Юрий Волошин (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Получение данных о состоянии счета
 
Цитата
Sergey Gorokhov написал:
в Lua и так уже сейчас можно повторить те же расчеты и получить те же цифры что видны в таблице
Как получить в Lua QUIK 8.13 значения полей "% активов" из таблицы "Состояние счета"?
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
 
Цитата
Roman Azarov написал: Мы добавим умолчательную поддержку cp1251 в будущих версиях ПО.
Ура! Здравый смысл победил!
Получение данных о состоянии счета
 
Цитата
Sergey Gorokhov написал: В текущей реализации к сожалению нет доступа через Lua к этой таблице.
Прошло 6 лет -- на дворе лето 2021. Таки можно получить через Lua QUIK доступ к таблице "Состояние счёта"?!
Программный разрыв соединения
 
Цитата
BlaZed написал:
Код
 local  w32 =  require ( "w32" )
 local  hWnd =  w32.FindWindow ( "InfoClass" ,"")
 w32.PostMessage (hWnd,w32.WM_COMMAND, 101 , 0 )  
Я не понимаю этот код (поэтому не могу его использовать в программе биржевого робота Lua QUIK -- по завету Уоррена Баффета).
Могли бы Вы чуть подробней объяснить что это за код и как он работает?
У всех ли он будет работать?
Какие подводные камни?
На сколько это кашерный код?
Программный разрыв соединения
 
Цитата
Sergey Gorokhov написал:
os.exit()
А таки "Разорвать соединение с информационным сервером" можно программно из Lua QUIK? Отключиться от сервера на ночь.
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
 
Цитата
Старатель написал:
не забыв при этом дать доступ на чтение символа разделителя дробной части числа (для строковых операций с числами).
Да, я тож переживал на тему смены "американской десятичной точки 0.5" на "русскую десятичную запятую 0,5", но вроде норм -- старый код работает в математических выражениях типа
Код
os.setlocale('Russian_Russia.1251') --'ru_RU.CP1251' для FreeBSD, 'rus_RUS.CP1251' для линукса, 'Russian_Russia.1251' для Windows
b = 1
a = b + 0.5
message(tostring(a))
1,5 таки получается -- я переживал, что сглючит, распознав десятичную точку как разделитель тысяч или ещё как и будет математическая ошибка -- но вроде всё норм. Продолжаем в коде писать десятичную точку, хотя во внешнем выводе видим десятичную запятую :-)
Потому что если написать
Код
os.setlocale('Russian_Russia.1251') --'ru_RU.CP1251' для FreeBSD, 'rus_RUS.CP1251' для линукса, 'Russian_Russia.1251' для Windows
b = 1
a = b + 0,5
message(tostring(a))
1 будет :-)
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
 
Цитата
swerg написал:
Считаю это ошибкой, которую разработчики QUIK должны исправить.
Интерфейс у терминала русский, по умолчанию для русских букв штатные upper / lower должны корректно работать.
Да! Как тут тегнуть разработчиков Lua QUIK? Конечно они должны сделать нормально работающие РУССКИЕ БУКВЫ по умолчанию!
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
 
Цитата
Артем написал:
Код
  os.setlocale (  'Russian_Russia.1251'  )  -- 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'   
Попробовал:

было
Код
message(string.upper('привет'))
привет

стало
Код
os.setlocale('Russian_Russia.1251')
message(string.upper('привет'))
ПРИВЕТ

Работает! Спасибо!
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
 
Цитата
Артем написал:
Код
  os.setlocale (  'Russian_Russia.1251'  )  -- 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'   
-- 'ru_RU.CP1251' для FreeBSD, 'rus_RUS.CP1251' для линукса, 'Russian_Russia.1251' для Windows -- я правильно понимаю?
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
 
Как просто и грамотно сделать string.upper(S) с русскими буквами в Lua QUIK версии 8.13?

Проблема в том, что string.upper('English') работает, а string.upper('русские буквы') не работатет.

Так как сделать string.upper('русские буквы') == 'РУССКИЕ БУКВЫ'
Неполные лоты валюта. Коды класса и инструментов
 
Цитата
Илья написал:
Подскажите, какие надо указывать коды класса и инструментов (для неполных лотов).
С 26 апреля 2021 Московская биржа начнёт торги основными мировыми валютами от $1 и €1.Сделки будут проходить в режиме TOM. В режиме CETS доступны инструменты USDRUB_TMS и EURRUB_TMS -- от 1 до 999.99 можно покупать
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Артем написал:
Если ждать в цикле пока количество свечек станет больше 0, то видно что значение прыгает от 0 сразу к 5000
Очень интересно -- спасибо...
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Kolossi написал: ds(Size) будет отличен от нуля только после  завершения  загрузки?
Хороший вопрос... я понаблюдаю в динамике этот процесс через PrintDbgStr()...
Как определить, когда идет торговая сессия, а когда нет?
 
Цитата
Roman Azarov написал:
Юрий Волошин, добрый день!

Приведите, пожалуйста, пример конкретного инструмента определенного класса, по которому наблюдается описанное поведение: в таблице терминала статус -  открыта , а значение tradingstatus, полученное в Lua -  закрыта .
Пришлите, пожалуйста, снимок экрана, наглядно демонстрирующий проблему и фрагмент кода.

Заранее благодарим.
Проверил. Проблема не у вас в Lua QUIK, проблема в криворуких макаках на биржах России или у брокера на Сервере. Вот прямо сейчас, 9:40 суббота -- все биржи закрыты -- а при этом статус "торгуется" "открыта" стоит практически у всех акции Московской биржи и у всех акций биржи СПБ (кроме немецких, немецкие в статусе "закрыта") -- макаки-с... К вам претензий нет. Как писать грамотную программу на Lua QUIK, если на Московской бирже и на Бирже СПБ макаки -- я не знаю... открыта RUAL на Московской бирже, открыта GOOG на бирже СПБ -- в 9:45 субботы, ага... Или кто за это отвечает? Кто настраивает поле "статус" - "торгуется" -- оно же getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image == 'открыта'?! Кто за это отвечает?!
Как рассчитывается УДС? Как его самому можно рассчитать?, Как рассчитывается УДС? Как его самому можно рассчитать?
 
Цитата
sam063rus написал:
УДС = (Стоимость портфеля - Мин.маржа)/(Нач.маржа – Мин.маржа)
Я только так смог посчитать и узнать УДС на Lua QUIK:
Код
local result = getPortfolioInfoEx(firm, client, 2)
MinMargin = tonumber(result.min_margin)
InitMargin = tonumber(result.init_margin)
CorrectedMargin = tonumber(result.corrected_margin)
PortfolioValue = tonumber(result.portfolio_value)
UDS = (PortfolioValue-MinMargin)/(CorrectedMargin-MinMargin)
Есть лучше варианты?
Как рассчитывается УДС? Как его самому можно рассчитать?, Как рассчитывается УДС? Как его самому можно рассчитать?
 
Цитата
sam063rus написал:
УДС = (Стоимость портфеля - Мин.маржа)/(Нач.маржа – Мин.маржа)
Начальная маржа или скорректированная начальная маржа должна использоваться в Вашей формуле для вычисления УДС на Lua QUIK?
Код
message(getPortfolioInfoEx(firm, client, 2).min_margin)
message(getPortfolioInfoEx(firm, client, 2).init_margin)
message(getPortfolioInfoEx(firm, client, 2).corrected_margin)
message(getPortfolioInfoEx(firm, client, 2).portfolio_value)
Как рассчитывается УДС? Как его самому можно рассчитать?, Как рассчитывается УДС? Как его самому можно рассчитать?
 
Цитата
sam063rus написал:
УДС = (Стоимость портфеля - Мин.маржа)/(Нач.маржа – Мин.маржа)
Как программно на Lua QUIK взять УДС? Или только считать? Примерчик кода можете показать?
Например НПР1 и НПР2 я легко могу взять на Lua QUIK -- как аналогично взять УДС?
Код
NPR1 = tonumber(getPortfolioInfoEx(firm, client, 2).rcv1)
NPR2 = tonumber(getPortfolioInfoEx(firm, client, 2).rcv2)
Как получить размер лота для бумаги по открытой позиции?
 
Цитата
Edunon написал:
получаю размер лота по бумаге следующим образом:
Спасибо, брат! Я так попробую узнать размер лота (указываю коды бирж -- некоторые маятся)
Код
Prazdnik = string.find('08 March, 03 May, 04 November', os.date('%d %B'))
birzhaSPB = 'SPBXM'
birzhaSPBDE = 'SPBDE'
birzhaMSK = 'TQBR'
birzhaMSKrisk = 'TQPI'
birzhaNYSEbest = 'NYSE_BEST'
birzhaNasdaqBest = 'NASDAQ_BEST'
birzhaMSKvalyuta = 'CETS'
BabloKodUSD = 'USD000UTSTOM'
BabloKodEUR = 'EUR_RUB__TOM'
birzhaMSKvalyutaSmall = 'CETS_S1'
BabloKodUSDsmall = 'USD000SMALL'
BabloKodEURsmall = 'EUR000SMALL'

XXXXsFull[key].birzha = birzhaMSK

result = getParamEx(XXXXsFull[key].birzha, key, 'LOTSIZE')
if result.result == '1' then XXXXsFull[key].lot = result.param_value else message('Куу! LOTSIZE '..key, 3) end
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Михаил Понамаренко Написал скрипт
Я так написал робот на Lua QUIK который проверяет при старте всё ли хорошо -- почему-то именно так  меня всё работает:
Код
function OnInit(script)
is_run = true
end

function OnStop()
is_run = false
end

function main()

birzhaSPB = 'SPBXM'
birzhaSPBDE = 'SPBDE'
birzhaMSK = 'TQBR'
birzhaNYSEbest = 'NYSE_BEST'
birzhaNasdaqBest = 'NASDAQ_BEST'
birzhaMSKvalyuta = 'CETS'
BabloKodUSD = 'USD000UTSTOM'
BabloKodEUR = 'EUR_RUB__TOM'
birzhaMSKvalyutaSmall = 'CETS_S1'
BabloKodUSDsmall = 'USD000SMALL'
BabloKodEURsmall = 'EUR000SMALL'

is_run_test = true
while is_run_test and is_run do is_run_test = false; message('Загрузка...'); sleep(9999)
for key in pairs(XXXXsFull) do local result = getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS')
if result.result == '1' then elseif result.result == '0' then is_run_test = true else message('пипец is_run_test TRADINGSTATUS '..key, 3) end
if getBuySellInfo(firm, clients[1], XXXXsFull[key].birzha, key, 0).share == nil then is_run_test = true end
end --for key in pairs(XXXXsFull)
end --while is_run_test

sleep(9999)

-- дальше робот работает спокойно

while is_run do
USDRUB = getParamEx(birzhaMSKvalyuta, BabloKodUSD, 'LAST').param_value
EURRUB = getParamEx(birzhaMSKvalyuta, BabloKodEUR, 'LAST').param_value
EURUSD = EURRUB/USDRUB

-- дальше робот работает спокойно

if os.date('%H%M')=='2304' then is_run = false else sleep(9999) end -- настоящие торги закончены -- пора спать
end --while is_run

end --main()
Замечания по коду приветствуются!
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Михаил Понамаренко написал:
        local chart = getCandlesByIndex("chart", 0, getNumCandles("chart") - 1, 1)[0].close
У меня Ваш код выпадает сейчас в ошибку: qwe.lua:42: attempt to index a nil value (field 'integer index')
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Михаил Понамаренко написал:
Написал скрипт
Хороший код. Я бы добавил sleep(9999) на входе и в каждой таблице -- торопиться нам некуда -- весь день вперед -- пусть всё спокойно прогрузится.
Как определить, когда идет торговая сессия, а когда нет?
 
Цитата
Sergey Gorokhov написал:
Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx
Нет, нельзя. Сейчас проверил на большом массиве с помощью dbgview и PrintDbgStr

for key in pairs(XXXXsFull) do local qwe = getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image
PrintDbgStr('key = '..key)
PrintDbgStr('.param_image = '..qwe)
PrintDbgStr('.param_type = '..getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_type)
PrintDbgStr('.param_value = '..getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_value)
PrintDbgStr('.result = '..getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').result)
end

примерно в 30% чушь -- [8928] .param_image = закрыта
примерно в 70% правильно -- [8928] .param_image = открыта

остальные
[8928] .param_type = 4
[8928] .param_value = 1.000000
[8928] .param_value = 1.000000
всегда идентичны.

И чё? Как нам узнать идут тогри или нет по данной позиции с помощью Lua QUIK?! Без 30% ошибок!
Как определить, когда идет торговая сессия, а когда нет?
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx
Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Ваша фантазия не соответствует реальной жизни. Вот прямо сейчас торги идут, а в Lua QUIK 8.13 мы видим:
11:07 01.04.2021
[8928] key = CCL
[8928] .param_image = закрыта
[8928] .param_value = 0.000000
[8928] .result = 1

ВАША TRADINGSTATUS с помощью функции getParamEx НЕ РАБОТАЕТ В РЕАЛЬНОЙ ЖИЗНИ. СОВСЕМ НЕ РАБОТАЕТ. Проблема. Надо как-то реагировать. Ваш косяк? Косяк брокера? Косяк биржи? Кто у нас колхозник сегодня?
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Артем написал:
Вот один набор параметров:
Интересно. Спасибо. Есть над чем подумать...
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Владимир написал:
Сам считает, сам, по своему таймеру и по данным ТТТ (ориентируясь на цену последней сделки). По тем тикерам, по которым торги не идут (по любой причине) свечи будут похожи
Да, вариант интересный... и наверно, надёжный... "хочешь что-то сделать хорошо -- сделай это сам"...
Как определить, когда идет торговая сессия, а когда нет?
 
Цитата
Владимир написал:
Что делать? Видимо, то же, что и я: ВААПЩЕ не использовать TRADINGSTATUS!
Это ужасно, но Вы наверно правы! Сейчас все индикаторы TRADINGSTATUS -- ОДИНАКОВЫЕ -- хотя торги по AAPL на бирже СПБ идут, а торгов по Северсталь на Московской бирже нет! Я проверил по массиву из более чем 100 акций через dbgview -- ВСЕ ИНДИКАТОРЫ ОДИНАКОВЫЕ! По TRADINGSTATUS утренняя сессия на бирже СПБ неотличима никак! Золхоз и колхозники, их жеж мать!

9:29 01.04.2021
[8928] key = AAPL
[8928] .param_image = закрыта
[8928] .param_type = 4
[8928] .param_value = 0.000000
[8928] .result = 1

[8928] key = CHMF
[8928] .param_image = закрыта
[8928] .param_type = 4
[8928] .param_value = 0.000000
[8928] .result = 1

ТАК КАК ЖЕ НАМ ОПРЕДЕЛИТЬ -- ЕСТЬ ТОРГИ ИЛИ НЕТ ПО ДАННОЙ ПОЗИЦИИ? По любой бирже -- биржа СПБ (утром и в нормальное время), Московская биржа, NYSE, Nasdaq...
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Артем написал:
Тангенс ниже нуля = просадка
Интересно, спасибо
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Владимир написал:
именно "один отдельный инструмент", чтобы вложить деньги здесь и сейчас именно туда, куда нужно, а не распылять их по всему "целому списку"
Да, с точки зрения уже не инвестора, а трейдера -- именно это важно в моменте -- один лучший вариант "здесь и сейчас"
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Артем написал:
проверить в цикле все 100 акций на предмет просадки цены
Спасибо. Да, наверно надо искать именно просадку -- остальные критерии в данном случае вторичны, имхо...
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Владимир написал:
Реальность, правда, несколько более сложная - принимаем решения, ориентируясь на данные
А как в Lua QUIK из списка, скажем, 100 акций выбрать ту, которая временно просела в цене, чтобы именно её купить именно сейчас? Как быстро и красиво определить по каждой акции из списка те, которые просели сегодня по какой-то причине относительно своего "нормального" уровня?
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Egor Zaytsev написал:
Параметр Нереал.PL можно получить из таблицу Купить/Продать, параметр Прибыль дня.
Можете привести кусочек программного кода Lua QUIK, который быстро и красиво находит и возвращает код самой прибыльной акции в портфеле этого счёта через таблицу Купить/Продать?
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Egor Zaytsev написал:
Параметр Нереал.PL можно получить из таблицу Купить/Продать, параметр Прибыль дня.
Интересно... Но я не совсем Вас понимаю... Можно кусок кода Lua QUIK для примера? Я только с примерами понимаю :-)
Неполные лоты валюта. Коды класса и инструментов
 
Цитата
Илья написал:
Подскажите, какие надо указывать коды класса и инструментов (для неполных лотов).
Нормальные (минимум 1 лот $1000) -- код Московской биржи для покупки USD и EUR и код USD и EUR расчётами завтра (самый ходовой)
birzhaMSKvalyuta = 'CETS'
BabloKodUSD = 'USD000UTSTOM'
BabloKodEUR = 'EUR_RUB__TOM'

Неполные лоты расчётами завтра -- код биржи-брокера и код USD и EUR -- можно купить или продать 1 доллар или 1 евро:
birzhaMSKvalyutaSmall = 'CETS_S1'
BabloKodUSDsmall = 'USD000SMALL'
BabloKodEURsmall = 'EUR000SMALL'
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Илья написал:
Как получить с помощью LUA скрипта значение "Нереал PL" из таблицы "Состояние счета" ?
Вот так можно получить значение "Нереал. PL" из таблицы "Состояние счета":
message('= '..getBuySellInfo(firm, client, birzhaSPBDE, 'DPW@DE', 0).profit_loss)
Какой функцией получить прибыль по инструменту., LUA скрипты
 
Цитата
Stanislav Tvorogov написал:
Цитата
Илья написал:
Цитата
Egor Zaytsev   написал:
Доступа через QLUA к таблице "Состояние счета" в текущей реализации нет.
т.е. Получить "Нереал PL" никак невозможно, только в ручную? Это крайне не удобно.
В будующем эта опция будет доступна ?
Добрый день,

Можем зарегистрировать пожелание на доработку относительно возможности работы с таблицей "Состояние счета" из QLUA. Регистрируем?
Конечно регистрируйте! Сейчас конец марта 2021 -- в версии 8.11.00.66 можно получить доступ  "Нереал PL" из таблицы "Состояние счета" ? Очень нужная вещь!
Как определить, когда идет торговая сессия, а когда нет?
 
Цитата
Владимир написал:
примерно раз в полчаса
я некоторые ключевые показатели -- втч getParamEx(XXXXsFull[key].birzha, key, 'TRADINGSTATUS').param_image пересчитываю каждые 9999 милисекунд... а что делать...
getParamEx
 
А если биржа и у нас и в США не работает, то у меня param_image = 'закрыта'
getParamEx
 
Цитата
Старатель написал:
А вот так, если параметр получен:
Код
  {param_type =  "4" , param_value =  "1.000000" , result =  "1" , param_image =  "открыта" }  
А если в США премаркет, то будет param_image = 'открытие' на NASDAQ_BEST
А если биржа и у нас и в США работает, то у меня param_image = 'открыта'
getParamEx
 
Цитата
Старатель написал:
Вот так выглядит таблица, возвращаемая getParamEx, если искомый параметр ("tradingstatus") не задан в списках:
Код
  {param_type =  "2" , param_value =  "0.000000" , result =  "1" , param_image =  "" }  
А вот так, если параметр получен:
Код
  {param_type =  "4" , param_value =  "1.000000" , result =  "1" , param_image =  "открыта" }  
Спасибо! Коротко, ясно, чётко и всё по делу!
Как определить, когда идет торговая сессия, а когда нет?
 
Цитата
Sergey Gorokhov написал:
Проверить можно через параметры TRADINGSTATUS или STATUS с помощью функции getParamEx
Или еще проще, добавить проверку текущего времени. Расписание торгов заранее известно и меняется крайне редко
Спасибо, попробую так и сделать.
P.S. Это в США стабильность и понятный график торгов по времени -- а у нас суета -- на бирже СПБ теперь есть утренняя торговая сессия -- и хаотично меняющийся список "кто утром есть, а кого утром нет". Бардак и суета на ровном месте, как в колхозе.
Страницы: 1
Наверх