Прошу пояснений про получение цены

Страницы: 1
RSS
Прошу пояснений про получение цены
 

Добрый день, прошу помочь с пониманием процесса получения цены.

1) Пробовал использовать getParamEx(class_code, sec_code, "last").param_valueЧем не устроил: выдает цену с задержкой (разнообразной). Я вызываю его раз в секунду, цена на графике уже изменилась, а getParamEx возвращает старое значение. Если запустить на выходных, выдает старую цену игнорируя изменения цены в не торговой сессии. Т.е. на графике инструмента у меня 10,14, но getParamEx выдает 9,98, как было во время торгов. Почему?

Стал разбираться с CreateDataSource. Почитал форум, возникли вопросы и хотелось бы ответов: правильно я понял или нет.

2) Чтобы один раз получить актуальные данные (при закрытых графиках) достаточно только

Код
ds_sber, error_desc = CreateDataSource("TQBR","SBER", INTERVAL_M5);

или это не правильно, на удачу?

3) Чтобы в ds_sber ВСЕГДА были актуальные данные, нужно ОДИН РАЗ, именно из main() надо вызвать CreateDataSource+ SetEmptyCallback

Код
function main()ds_sber, error_desc = CreateDataSource("TQBR","SBER", INTERVAL_M5);ds_sber:SetEmptyCallback();sleep(5000); --ждем пока данные прилетятwhile IsRun doprice_sber=ds_sber:C(ds:Size());-- далее обработка цены-- т.к. подписаны, то будем всегда иметь актуальный набор свечей?sleep(1000);end;ds_sber:Close();end;

после этого в любой момент работаю с последними данными в ds_sber? Все верно?

4) Какие будут последствия если при завершении скрипта не делать ds_sber:Close()

5) Можно как-то определять для интервала, например М30, что свеча закрылась и началась новая свеча?

6) У меня в цикле 1сек обсчитываются 10-20 инструментов ( массив ), инструменты меняются, т.е. статичные ds не сделать. Как правильно организовать запрос данных (свечей) в таком случае ?

 
function main()
ds_sber, error_desc = CreateDataSource("TQBR","SBER", INTERVAL_M5);
ds_sber:SetEmptyCallback();
sleep(5000); --ждем пока данные прилетят
while 1 do
price_sber=ds_sber:C(ds:Size());
-- далее обработка цены
-- т.к. подписаны, то будем всегда иметь актуальный набор свечей?
sleep(1000);
end;
ds_sber:Close();
end;
 
Цитата
Vitaliy написал:
Почему?
Таблица текущих торгов обновляется средами, т.е. раз в период.
графики обновляются по факту прихода сделки.
Следовательно графики всегда будут показывать более актуальную инфомрацию

Цитата
Vitaliy написал:
2) Чтобы один раз получить актуальные данные (при закрытых графиках) достаточно только
Без подписки на колбек, CreateDataSource вернет только то что в данные момент есть в терминале.
Если в данный момент в терминале не актуальные данные (закрыли окна с графиками), то и от функции CreateDataSource Вы ничего внятного не добьетесь.

Цитата
Vitaliy написал:
после этого в любой момент работаю с последними данными в ds_sber? Все верно?

Чтобы получить актуальные данные, требуется подписаться на информацию с сервера, для этого нужно вызвать SetUpdateCallback или SetEmptyCallback
Цитата
Vitaliy написал:
4) Какие будут последствия если при завершении скрипта не делать ds_sber:Close()
ничего не будет, терминал сам закроет поток, если он не используется.

Цитата
Vitaliy написал:
5) Можно как-то определять для интервала, например М30, что свеча закрылась и началась новая свеча?
Этому вопросу уже десятки лет.
Все просто, дайте определение термину "свеча закрылась" и Вы сами найдете ответ.
если для Вас, закрытие свечи происходит по времени, то проверяйте время.
если для Вас, закрытие свечи происходит по факту открытия новой свечи, значит проверяйте появление новой свечи
Ну или скомбинируйте оба варианта, как Вам нравится.
Само собой, если время еще не прошло, то узнать о том закрылась свеча или нет не представляется возможным, в будущее мы смотреть еще не научились.

Цитата
Vitaliy написал:
6) У меня в цикле 1сек обсчитываются 10-20 инструментов ( массив ), инструменты меняются, т.е. статичные ds не сделать. Как правильно организовать запрос данных (свечей) в таком случае ?
закрывайте старые ds и открывайте новые, не видим тут какой-либо проблемы.
 
Цитата
Sergey Gorokhov написал:
Без подписки на колбек, CreateDataSource вернет только то что в данные момент есть в терминале. Если в данный момент в терминале не актуальные данные (закрыли окна с графиками), то и от функции CreateDataSource Вы ничего внятного не добьетесь.
Цитата
Sergey Gorokhov написал:
Чтобы получить актуальные данные, требуется подписаться на информацию с сервера, для этого нужно вызвать SetUpdateCallback или SetEmptyCallback

Добрый день. Я так понял, что если вызываем функцию CreateDataSource, но на колбэки не подписываемся, то данные обновляться не должны. Но мне никак не удаётся воспроизвести такую ситуацию. Вызываю CreateDataSource, не вызываю SetEmptyCallback, но данные всё равно обновляются. Код ниже. Видно, как объём на последней свече меняется, как новые свечи приходят. Удалил в Квике все графики, таблицы, вкладки. В настройках "Заказ данных" снял все галки, до кучи в папке с Квиком удалил archive и alltrade.dat. Запускаю скрипт, приходят минутки за три с лишним дня, и данные продолжают обновляться. Проверял, минутки правильные. Пробовал и на боевом Квике, и на демо, на разных версиях (7.27, 8.1, 8.5.2). Не могу понять, то ли при вызове CreateDataSource данные обновляются и без колбэков, то ли всё-таки при каких-то настройках в Квике обновление само собой происходить не будет. Прошу подсказки.

Код
is_run = true

class_code = "SPBFUT"
sec_code = "RIM0"

function OnInit()
end

function OnStop()
   is_run = false
end

function main()
   ds = CreateDataSource(class_code, sec_code, INTERVAL_M1);
   sleep(200)
   --ds:SetEmptyCallback();
   while is_run do      
      message(ds:Size() .. " " .. ds:V(ds:Size()) .."\n",1)      
      sleep(3000)
   end
end
 
Цитата
Александр написал:
то ли всё-таки при каких-то настройках в Квике обновление само собой происходить не будет.

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

Как уже было сказано CreateDataSource без колбеков будет показывать то что есть в терминале.
Если в терминале актуальные данные то и в CreateDataSource Вы получите актуальные данные.
Значит где то у Вас есть подписка, возможно есть другой lua скрипт?
Без указанного скрипта и с закрытыми всеми графиками, в папке archive появляется что-нибудь?
А вообще на графики влияет галка "Получать пропущенные данные"
 
Цитата
Sergey Gorokhov написал:
Странно, обычно пользователи на оборот борются за то чтобы заказ данных происходил автоматически.Вы же почему-то пытаетесь избавиться от автозаказа.
Прежде всего я хочу, чтобы код вёл себя ожидаемым образом. Если вы пишете, что данные без колбэков обновляться не должны, я ожидаю это и пронаблюдать. А наблюдаю обновление данных. И поэтому пытаюсь разобраться, почему так происходит.

Цитата
Sergey Gorokhov написал:
Значит где то у Вас есть подписка, возможно есть другой lua скрипт?
Вот я и пытаюсь понять, где же эта подписка. Квик "голый": никаких графиков, таблиц. Других скриптов нет, этот скрипт только один в списке.


Цитата
Sergey Gorokhov написал:
Без указанного скрипта и с закрытыми всеми графиками, в папке archive появляется что-нибудь?
До запуска скрипта папка archive пустая. Сразу после запуска в этой папке появляется один файл SPBFUT_RIM0_1.dat.


Цитата
Sergey Gorokhov написал:
А вообще на графики влияет галка "Получать пропущенные данные"
Галка "Получать пропущенные данные" снята. Там же рядом есть пункты "Только данные, отражающие текущее состояние" и "Данные, отражающие текущее состояние и всю историю изменений": пробовал оба, минутки всё равно обновляются.
 
Александр,
На самом деле, заказ данных  после CreateDataSource  происходит независимо от заданного коллбэка.
Для данных на основании обезличенных сделок будут получаться все данные,
Для данных ТТТ в зависимости от настроек терминала для получения ТТТ, т.е. если получение пропущенных данных выключено, то будут доступны только новые данные ТТТ.
Страницы: 1
Читают тему
Наверх