Блог им. melamaster

moex+quik+lua+candles

Коллеги!
Есть два варианта как получать данные в квике в рамках луа-скриптов.
1. getCandlesByIndex
2. CreateDataSource

Первый вариант неудобен тем, что нужно держать открытыми графики и, если используются разные тф, то нужно держать больше открытых графиков. Всё это неудобно, когда меняются контракты и тд. Зато надёжно. Если ты графики создал, то источники создались и скрипты отработают.

Второй вариант неудобен тем, что не всегда источники данных создаются, нужно выжидать тайм-ауты и всякое такое.

Подскажите, какой из вариантов вы считаете наиболее правильным/оптимальным или какой используете сами?
Если накидаете пример кода как это используете, буду премного благодарен!
1.2К | ★3
12 комментариев

function main()
while IsRun do
sleep(1000)
for j= 1, 1 do
if IsWindowClosed(t_id) then --Если окно робота закрыто, то выключить робота
IsRun=false
break
end
— ========= КОНТРОЛЬ ВРЕМЕНИ СЕССИИ И СОЕДИНЕНИЯ С СЕРВЕРОМ
if isConnected()~=1 then
is=isConnected()
FIRSTRUN=0
break
end
— ========= ПЕРВЫЙ ЗАПУСК
if FIRSTRUN==0 then
ds15, error = CreateDataSource(CLASSCODE, INSTRUMENT, INTERVAL_M15)
if ds15 == nil or ds15:Size()<500 then
if error~=nil then
message('OHLC Si15: '..error,3)
else
message('OHLC Si15: error',3)
end
break
end
ds15: SetEmptyCallback()

FIRSTRUN=1
end
end --end FOR GLOBAL
end --end while
ds15:Close()
end --main

avatar
robot_bsk, что-то не удалось его запустить, выдало ошибку
test.lua:33: attempt to index a nil value (global 'ds15')
avatar
Rid, это же пример. Надо кодкласса и инструмент задать. Потом, если запуститься на выходе будет поток OHLCV с которым надо что-то делать
avatar
robot_bsk, предположим мы задали инструменты

aTickerList = {«SBER», «GMKN», «GAZP», «NVTK», «ALRS»};
как построить таблицу с колонками, что бы получить OHLCV по инструментам? Возможно ли в таблицу вывести значение средней, без построения на графиках, что бы скажем сравнить выше цена или ниже MA.? Параметр средней одинаков для всех и сравнение произвести каждого инструмента.

avatar
Rid, да возможно
avatar
2. CreateDataSource этот вариант самый лучший, не было не разу чтобы не создало источник данных, если не создало значит его в квике нет. По таймаутам, да зависит от скорости интернета и нагружености сервера брокера сколько ждать когда придет график, поэтому я делаю подписку на график CreateDataSource за несколько минут до начала торгов этого вполне хватает, либо можно контролировать по времени в последней свече(загрузился график или нет) но способ не универсален для неликвида не подойдет.
avatar
Если речь про данные баров, то только CreateDataSource.
Надежней много раз.

Небольшой пример: luaq.ru/CreateDataSource.html


avatar
зачем это все? лей таблицу обезличенных сделок в sql и строй свечи сам. Ну понятно лучше задублировать потоки и мерджить дату с двух квиков от разных брокеров
avatar
CreateDataSource не является синхронным, т.е. polling с проверкой что datasource.count > 0 единственный способ узнать, что в quik пришли эти данные, результат при этом не гарантируется, особенно в ~10 утра.
avatar
Не понмю такого, чтобы не работало. Пример :

открываем источник данных
local ds, error_desc;
ds, error_desc = CreateDataSource(class,name,period);
— Ограничиваем количество попыток (времени) ожидания получения данных от сервера
local try_count = 0;
if ds==nil then
message(name..' '..class..' data source error :\n'..error_desc);
return {0},0;
end
— Ждем пока не получим данные от сервера, либо пока не закончится время ожидания (количество попыток)
while ds:Size() == 0 and try_count < 100 do
sleep(100);
try_count = try_count + 1
end
— Если от сервера пришла ошибка, то выведем ее и прервем выполнение
if try_count>99 or error_desc ~= nil then
message('Error loading data for '..name..', '..class..' — can not open data source ');
return;
end

avatar
Всем доброго дня! Как раз на днях столкнулся ситуацией и тут появился этот пост! У меня вопрос не совсем по теме поста, хотя ...
Как то раз использовал это QPILE скрипт (редактировал под нужные мне инструменты рынки и таймфремы) из этого старого поста для экспорта свечек из Квика smart-lab.ru/blog/203956.php
К сожалению я не владею LUA на данный момент. Подскажите, есть ли какой нибудь готовый скрипт LUA, можно ли каким то способом, доступным не только программистам, экспортировать по-отдельности или вместе не только свечи по сделкам, но и данные по опционам:
— Спрос. Предложение, Теоретическая цена, Открытый Интерес, Волатильность?
Про ручной способ «Правая кнопка — Сохранить как», но хотелось сохранить не «один-два» страйка опционов, а несколько и поэтому желательна автоматизация ...
Заранее спасибо за любую помощь и дополнительные источники информации
UPD: отредактировал вопрос — понял что тот старый скрипт не lua а ещё qpile даже))
avatar

Читайте на SMART-LAB:
Фото
Навигация. Наши ресурсы.
Уважаемые подписчики! Вместе с развитием Холдинга развиваются и наши информационные каналы. Чтобы быть в курсе всех событий «Селигдара»,...
ДОМ.РФ обсудит перспективы рынка жилья
Друзья, привет! ⚡️Сегодня наш партнер, ДОМ.РФ, проведет свой первый День инвестора. Компания обсудит финансовые итоги 2025 года и поделится...
Фото
Корпоративный учебный центр «МГКЛ»: экспертиза, оформленная в образование
В Группе «МГКЛ» за годы работы с обеспеченными активами накоплен значительный практический опыт в оценке, управлении залогами и обороте...
Фото
Россети Урал. Отчет об исполнении инвестпрограммы за Q4 2025г. Считаем дивиденды!
Компания Россети Урал опубликовала отчет об исполнении инвестпрограммы за Q4 2025г., где показаны финансовые показатели компании по РСБУ в...

теги блога Sergey Pavlov

....все тэги



UPDONW
Новый дизайн