Вопросы по OnAllTrade

Страницы: 1 2 След.
RSS
Вопросы по OnAllTrade
 
тестовый скрипт:
Код
local is_run = true
local date_time= ""

function OnAllTrade(alltrade)
date_time = tostring(alltrade.datetime.hour) .. ":" .. tostring(alltrade.datetime.min) .. ":" .. tostring(alltrade.datetime.sec)
message(date_time)
end

function main()
while is_run 
do
sleep(100)
end

end

function OnStop()
is_run = false
return 1000
end
Действия:
Запускаю простенький тестовый скрипт и... вижу, что время перепрыгивает назад и потом возвращается. Но, всё бы ничего - да только отключение галочки "Получать пропущенные данные" - не спасает.
 
Сделки получаете по одному классу и инструменту?
 
как видно из скрипта - не обязательно по одному (ненормируется). к тому же у меня открыто несколько ТВС.
 
изначально, стоит задача сделать счётчик количества сделок в секунду. и я его сделал и вроде бы даже правильно показывает НО! "флешбеки" его убивают.
 
Если есть разные классы и инструменты, то это нормальная ситуация
 
вопрос, как сделать - НОРМАЛЬНО?
 
одна из моих тестовых вариаций:
Код
 local act_time = 0
local prev_time = 0
local counter = 0
local is_run = true
local date_time= ""

function OnAllTrade(alltrade)
act_time = tonumber(alltrade.datetime.sec)
if  act_time == prev_time then
counter=counter+1
else
date_time = tostring(alltrade.datetime.hour) .. ":" .. tostring(alltrade.datetime.min) .. ":" .. tostring(alltrade.datetime.sec)
message(date_time .. "   " .. tostring(counter))
counter = 0
prev_time = tonumber(alltrade.datetime.sec)
end

end
--[[
function OnAllTrade(alltrade)
date_time = tostring(alltrade.datetime.hour) .. ":" .. tostring(alltrade.datetime.min) .. ":" .. tostring(alltrade.datetime.sec)
message(date_time)
end
--]]
function main()
while is_run 
do
sleep(100)
end

end

function OnStop()
is_run = false
return 1000
end
 
Предложение:
У нас уже есть раздел в меню: Свзязь->Списки. По идее, этого должно быть достаточного для квика, чтоб он понял, какие данные пользователю действительно нужны (на которые он каГбе "подписан"). Зачем было делать ещё привязку к открытым таблицам ТВС и их количеству, а также, делать малоработоспособнй галочку "Получать пропущенные данные"?
 
Цитата
sam063rus пишет:
вопрос, как сделать - НОРМАЛЬНО?
Что значит нормально? Подробнее задачу опишите, пожалуйста.
 
описываю подробно: я хочу измерять общее количество сделок в секунду (с позиции серверного времени разумеется) приходящих с биржи. Из-за "флешбеков" - индикатор местами выдаёт "остатки" от предыдущего таймстампа. Если я буду делать принудительную промежуточную сортировку на "боевом потоке" - убью квик. - Он просто зависнет.
 
для чего мне этот счётчик - не могу сказать. Он часть моей системы.
 
Цитата
Michael Bulychev пишет:
Сделки получаете по одному классу и инструменту?
впоследствии буду по разным. Но также надо и общий счётчик.
 
просто считать количество сделок в секунду пришедших с сервера?
 
получается, что так. при том, что время должно быть обязательно серверным (биржевым).
 
и как уже писал выше - на показания счётчика не должно влиять количество открытых ТВС, всякие createdatasource, а только то, что отмечено в меню Связь->Списки.
 
мда уж...
чот, как говорится, прям "лес рук"...
 
----------------------------------------------------------------------------------------------------------------------------------
 
ок.
раз с этим вопросом туго - то задам другой вопрос:

Действия:
  1. Убрал галочку "получать пропущенные данные".
  2. Сохранил настройки в info.wnd
  3. Отключился от сервера и выключил квик. Удалил файл alltrades.dat.
  4. Влючил квик и подключился к серверу
  5. Запустил тестовый скрипт описанный выше.
Результат:
  1. Таблица всех сделок пуста НО!!! приходит куча колбеков аж со вчерашней вечерней сессии и заканчивая сегодняшней.
Вопрос:
ДЛя чего мне получать коллбеки из прошлого и ладно бы это было секунду/минуту назад но, не день же назад???
 
а может...
это тоже  
Цитата
нормальная ситуация
?
 
Цитата
sam063rus пишет:
получается, что так. при том, что время должно быть обязательно серверным (биржевым).
Если классы и бумаги заказаны разные, то скорее всего это сделать будет сложно. Время может быть не синхронизовано.
 
Настройка "получать пропущенные данные" влияет на получение истории изменений параметров,  но не на таблицу всех сделок.
 
в общем, Михаил, у меня к Вам, как самому компетентному разработчику 2 описанных выше вопроса. Хотелось бы получить на них ответы с примерами правильного QLUA-кода.
 
и ещё, при всём уважении к Вам - ответ "сложно" - не принимается. Именно поэтому, если Вы уже заметили - я не задаю/засоряю форум действительно простыми вещами.
 
----------------------------------------------------------------------------------------------------------------------------------------------
 
Дополнительная информация:
Чуть изменил скрипт, чтоб отслеживал только один тикер:
Скрытый текст
  1. тестовый 5-минутный прогон - показал:
  2. "флешбеки" (нарушение временной последовательности распространения данных - прекратились).
  3. Заглянул в ТВС - там полная "дискотека" - в рамках одного тикера - последовательность данных сохраняется, а между разными - полный хаос.
  4. Скрипт считает сделки - неправильно. Пока непонятно в чём причина.
Текущие настройки рабочего места:

 
позволю предложить следующий алгоритм (так cделал бы сам):
-------------------
1) По спискам формируем таблицу играющих инструментов (критерий на ваш вкус)
2) если я ожидаю, что будут запаздывающие данные,
то задаю таблицу неопределенности (т е таблицу памяти N секунд, которые могут корректироваться опоздавшими данными.
3) В колбеке считаем распределение числа сделок по  N последним секундам.
------------------------------------
Ну а далее думаю - и зачем я это все посчитал???
 
Цитата
Николай Камынин пишет:
позволю предложить следующий алгоритм (так cделал бы сам):
-------------------
1) По спискам формируем таблицу играющих инструментов (критерий на ваш вкус)
2) если я ожидаю, что будут запаздывающие данные,
то задаю таблицу неопределенности (т е таблицу памяти N секунд, которые могут корректироваться опоздавшими данными.
3) В колбеке считаем распределение числа сделок по N последним секундам.
------------------------------------
Ну а далее думаю - и зачем я это все посчитал???
я уже смотрел в эту сторону - но, как уже написал выше - квик будет виснуть.

Цитата
Ну а далее думаю - и зачем я это все посчитал???
а вы не думайте - я уже подумал. Вы главное, код здесь приведите.
 
это всего лишь маленький "винтик" в моей задумке.
 
Цитата
sam063rus пишет:
У нас уже есть раздел в меню: Свзязь->Списки. По идее, этого должно быть достаточного для квика, чтоб он понял, какие данные пользователю действительно нужны (на которые он каГбе "подписан"). Зачем было делать ещё привязку к открытым таблицам ТВС
Этот раздел влияет на получаемые параметры (которые отображаются, например, в Текущей таблице параметров).
Список инструментов, по которым происходит получение обезличенных сделок, задается в пункте меню "Связь / Заказ всех сделок". В свою очередь настройки, которые отображаются при выборе этого пункта меню, могут меняться в зависимости от настроек открытых на текущий момент ТВС и тиковых графиков.

Цитата
sam063rus пишет:
Таблица всех сделок пуста НО!!! приходит куча колбеков аж со вчерашней вечерней сессии и заканчивая сегодняшней.
Проверьте настройки в "Связь / Заказ всех сделок" - возможно, там включено получение сделок по классам Фьючерсы или Опционы FORTS (дополнительная сессия). Также название этих классов может содержать в скобках слова "история пред. вечерней сессии".
 
Цитата
Дмитрий пишет:
Проверьте настройки в "Связь / Заказ всех сделок" - возможно, там включено получение сделок по классам Фьючерсы или Опционы FORTS (дополнительная сессия). Также название этих классов может содержать в скобках слова "история пред. вечерней сессии".
я к тому, что одно дело когда они (сделки/данные) приходят для всяких таблиц и совершенно другое когда вдобавок это ещё влияет на приход коллбеков, что мне совершенно не нужно.

к тому же, я не в той ситуации когда могу отключить приход данных за вчерашнюю сессию не нарушив тем самым функционал других своих скриптов. таким образом, мне надо "и то и это" НО!!! в разных целях и без ущерба.
 
Цитата
sam063rus пишет:
я к тому, что одно дело когда они (сделки/данные) приходят для всяких таблиц и совершенно другое когда вдобавок это ещё влияет на приход коллбеков, что мне совершенно не нужно.
Ну, как бэ, да. Приход новых данных (в т.ч. и сделок) вызывает колбек. Во всех скриптах, где он (колбек) используется. Так было всегда. Если колбек не нужен в конкретном скрипте, просто игнорируйте его или не используйте функцию колбека.
Надо делать так, как надо. А как не надо - делать не надо.
 
немного переделал:

Код
 act_time = 0
deal_time = 0
counter = 0
is_run = true


function OnAllTrade(alltrade)
   if alltrade.class_code == "SPBFUT" and alltrade.sec_code == "SiM5" then
      act_time =tonumber(string.sub(getInfoParam("SERVERTIME"), 7, 8))
      if  act_time == deal_time then
         counter=counter+1
      else
      
         do
            message(act_time .. "   " .. tostring(counter))
            counter = 0
            deal_time = tonumber(alltrade.datetime.sec)
         end
      end
   end
end


function main()
while is_run 
do
sleep(100)

end
end

function OnStop()
is_run = false
return 1000
end
стало только хуже бо как время сервера и время из таблицы невсегда совпадает.
 
sam063rus, правильно я понимаю, что вас интересует количество сделок за последнюю минуту? Если так, то сбрасывайте счётчик только, когда время сделки увеличивается.
Правда, и в этом случае, могут быть сбои, потому как время сделок на разных секциях может отличаться на секунды.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
sam063rus пишет:
стоит задача сделать счётчик количества сделок в секунду
 
Ну да... Думаю одно, а пишу другое...

Следует читать так:
sam063rus, правильно я понимаю, что вас интересует количество сделок за последнюю секунду? Если так, то сбрасывайте счётчик только, когда секунды в сделке увеличиваются. Если пришла сделка с сильным запаздыванием - просто проигнорируйте её.
Надо делать так, как надо. А как не надо - делать не надо.
 
Серж, Дмитрий - спасибо за ссылки. Почитаю. Почти решил проблему - считает но, с декрементом на единицу. Думаю, добью впоследствии. Но, в любом случае, рад новым идеям.
 
если есть интерес к этой теме - впоследствии выложу для всех.
 
Цитата
sam063rus пишет:
Хотелось бы получить на них ответы с примерами правильного QLUA-кода.
Добрый день.
В общем виде нет корректного решения задачи, которую Вы поставили. Либо надо подробнее формулировать задачу, либо принимать во внимание возможные ограничения и допущения и упрощать алгоритм.
Лично я бы использовал в качестве счетчика таблицу, в которой ключами являются строки из кода класса, бумаги и времени на сделке с точностью до секунд. И при получении сделки накручивал значение в нужном поле.
 
Цитата
Michael Bulychev пишет:

Лично я бы использовал в качестве счетчика таблицу, в которой ключами являются строки из кода класса, бумаги и времени на сделке с точностью до секунд. И при получении сделки накручивал значение в нужном поле.
тогда это будет просто счётчик, а не "спидометр"
 
Цитата
sam063rus пишет:
Вопрос:
ДЛя чего мне получать коллбеки из прошлого и ладно бы это было секунду/минуту назад но, не день же назад???
этот вопрос ( #18 ) - остаётся открытым.
 
Вот пример:
Скрытый текст
результат примерно такой:
Скрытый текст
По поводу вопроса о вчерашних сделках
Надо проверить из какого класса они к Вам попадают. Так же надо учесть, что на ФОРТС новая торговая сессия начинается сразу после вечернего клиринга и утром она просто продолжается. Так что вчерашние сделки формально относятся к одной торговой сессии.
 
Цитата
Michael Bulychev пишет:
Так что вчерашние сделки формально относятся к одной торговой сессии.
это всё понятно. Но, как и говорил выше - "надо оставлять прошлое - в прошлом". я - про коллбеки дневной давности.
 
что такое:
persistence.lua
result.lua
 
result.lua  - второй кусок кода, куда я сохранил таблицу для наглядности

persistence.lua - код для сохранения таблиц в файл, один из многих вариантов.
 
полуфабрикат
 
про вечерние сделки могу сказать следующее ( наблюдал это уже давно возможно что-то изменилось)
Они приходят потому, что на следующий день у них меняется класс
т е они становятся как бы новыми сделками и сервер их обязательно передает в терминал.
Когда сортировал все сделки на лету тоже поначалу в этом застрял. Потом поставил фильтр и все стало ОК
 
Цитата
sam063rus пишет:
полуфабрикат
Что именно?
 
вернее сказать,  они становятся как бы новыми сделками не потому что время изменилось, а потому что биржа перенесла их в новый класс
 
то, что вы привели - это неполный код. соответственно, я не могу оценить его работу.
 
То что я привел - лишь реализация  моей идеи. Вы не поставили задачу корректно и полно.
Страницы: 1 2 След.
Читают тему
Наверх