Счётчик числа сделок в секунду по одному тикеру

Страницы: Пред. 1 2 3 4 След.
RSS
Счётчик числа сделок в секунду по одному тикеру
 
Цитата
Николай Камынин пишет:
код увидел.
Мне читать все топики лень, поэтому я выскажусь, возможно что кто-то уже это сказал.
1) Работа через onParam - самый плохой вариант. Там и хранилище очень тяжелое и данный колбек на каждый чих срабатывает
при этом если срез не пришел и не актуальный то он вообще потеряется.
Т е через этот колбек Вы обязательно недосчитаетесь сделок когда-нибудь
---------------------------------
2) Поэтому данную задачу полагаю надо решать через onAllTrade
По крайней мере решение через onAllTrade будет полным, но возможно что есть и более быстрое но не полное.
Поэтому решение через onAllTrade должно быть базовым а остальные,
если они будут быстрее надо сравнивать с базовым.

--------------------------------
Поэтому предлагаю написать вариант через onAllTrade
и изложить претензии к такому решению (желательно с примерами)
отлично, жду от Вас примера кода. (без иронии)
 
Цитата
Николай Камынин пишет:
Поэтому предлагаю написать вариант через onAllTrade
и изложить претензии к такому решению (желательно с примерами)
уже были и примеры и топики и претензии но...
Цитата
sam063rus пишет:
Мне читать все топики лень,
 
последняя реплика, разумеется - не моя ("мне читать все топики лень,").
 
Цитата
sam063rus пишет:
будет ровно одна секунда
Время в ТТП транслируется без мкс, поэтому сказать точно, какая там разница не представляется возможным.
Надо делать так, как надо. А как не надо - делать не надо.
 
Пример кода сейчас писать некогда, но для OnAllTrade могу сказать, что в пределах одной торговой площадки там сделки поступают строго в порядке увеличения времени, поэтому считать можно по ним.
При этом надо запоминать время самой последней сделки из этой секции биржи и если придет сделка с более ранним временем с той же секции, то просто игнорировать ее (такое может быть если не включена галка "получать информацию по всем сделкам с текущего момента" и сделки по какому-то инструменту были заказаны спустя какое-то время после начала торгов - тогда сначала придут все сделки по этому инструменту, совершенные с начала торгов до текущего момента).
 
с другой стороны, если с биржи в квик каким-то образом приходит биржевое время и разработчики вдруг (ну а вдруг?) согласятся сделать коллбек OnMarketTimeChange - то многие задачи отпадут сами собой (и эта в том числе)
 
Цитата
Дмитрий пишет:
Пример кода сейчас писать некогда, но для OnAllTrade могу сказать, что в пределах одной торговой площадки там сделки поступают строго в порядке увеличения времени, поэтому считать можно по ним.
При этом надо запоминать время самой последней сделки из этой секции биржи и если придет сделка с более ранним временем с той же секции, то просто игнорировать ее (такое может быть если не включена галка "получать информацию по всем сделкам с текущего момента" и сделки по какому-то инструменту были заказаны спустя какое-то время после начала торгов - тогда сначала придут все сделки по этому инструменту, совершенные с начала торгов до текущего момента).
тут мы опять имеем "галки" - для моей задачи - это неприемлемо.
 
Цитата
sam063rus пишет:
тут мы опять имеем "галки" - для моей задачи - это неприемлемо.
Я описал, как сделать, чтобы наличие или отсутствие галки не влияло на работу скрипта:
Цитата
sam063rus пишет:
При этом надо запоминать время самой последней сделки из этой секции биржи и если придет сделка с более ранним временем с той же секции, то просто игнорировать ее
 
Ну вот я написал Вам черновик вашего счетчика:
он будет считать для всех инструментов
Сразу скажу, что это черновик и в нем изложены основные идеи,
но детально не отлаживал
Дерзайте.
-------------------
is_run = true
local Count={}

function OnAllTrade(t)
local cl,se=t.class_code,t.sec_code;
local t1=Count[cl] if t1==nil then t1={}; Count[cl]=t1; end
local t2=t1[se] if t2==nil then t2={0;0}; t1[se]=t2; end  
local d=t.datetime;
if d.sec==t2[1] then t2[2]=t[2]+1; t2[1]=d.sec else t2[2]=0; t2[1]=d.sec; end
end


function main()
while is_run do sleep(100)   -- здесь я в своих программах использую Event OS но можно и так оставить
end
end

function OnStop()
is_run = false
return 1000
end
--------------------
 
Николай Камынин,
большое спасибо за пример. Посмотрю.
 
Убрал пока что из скрипта все расчёты:

Код
actNumTrades = 0
lastNumTrades = 0
lastTime = 0
actTime = 0
is_run = true


function OnParam(class_code, sec_code)
   if class_code == "SPBFUT" and sec_code == "SiM5" then
      actNumTrades = tonumber(getParamEx(class_code, sec_code, "NUMTRADES").param_value)
      actTime = tonumber(getParamEx(class_code, sec_code, "TIME").param_value)

      message(tostring(actTime) .. "   " .. tostring(actNumTrades))
   end 
end


function main()
while is_run 
do

sleep(100)

end
end

function OnStop()
is_run = false
return 1000
end
 





В общем, причина не работы моего скритпа была в том, что в OnParam почему-то теряются некоторые параметры, а точнее, сам коллбек - теряется. т.е. под апдейт невсегда всё попадает.
Так, по ТВС ясно просматриваются реальные сделки по SiM5:


Код
 1127305110   21:18:16   номер сделки -- время
1127305111   21:18:16
1127305112   21:18:16
1127305138   21:18:19
1127305139   21:18:19
1127305140   21:18:19
1127305141   21:18:19
1127305146   21:18:20
1127305147   21:18:20



а по ТТП тем временем:

Код
211816   32530   --время -- количество сделок
211816   32530
211816   32530
211820   32536
211820   32536
211820   32536
211820   32536
211820   32536
211820   32536
211820   32536
211820   32536
211820   32536
211820   32536
211820   32536
 

т.е. время: 21:18:19 - попросту отсутствует. И это ещё безобидный пример. Дальше - хлеще. Но, это уже, километры листинга. И хоть нам тут говорят, что мол, инфа копится и ничего не забывается. Но, что-то незаметно. Хотя, возможно для OnAllTrade - это работает.

В итоге, имеем то, что имеем....

Прошу tech support пояснить.
 
Цитата
sam063rus пишет:
т.е. время: 21:18:19 - попросту отсутствует.
для справки: я также на всякий случай делал анализ нарастающего итога по сделкам в ТВС - всё равно не сходится. (с временным гистерезисом в одну секунду - тоже)
 
Написал тестовый скрипт для подсчёта общего количества сделок  по колбекам OnAllTrade и OnParam
Результаты на демо-сервере по SBER:



Price - цена последней сделки
Num Trades - количество сделок с момента запуска скрипта
Time - время последней сделки, согласно колбеку
Local Time - локальное время получения колбека
Count - количество полученных колбеков:
1) для OnParam счётчик увеличивается при увеличении параметра NUMTRADES
2) для OnAllTrade: поскольку OnAllTrade приходят "пачками", то счётчик увеличивается при приходе новой "пачки" сделок при условии, когда между соседними колбеками прошло более 20 мс

Как видите, количество сделок совпадает. Количество колбеков немного отличается.
Завтра проверю на боевом сервере.
Надо делать так, как надо. А как не надо - делать не надо.
 
проверьте на "боевом", на фортс, фьючерс SiM5. То, что Вы показали - не объясняет почему в OnParam не было изменения параметра за 21:18:19. К тому же, как Вы можете видеть - мои таблицы - тоже не дадут мне соврать - визуально видно, что нет сходимости в данных.
 
Цитата
sam063rus пишет:
т.е. время: 21:18:19 - попросту отсутствует.
Вы не привели миллисекунды сделок, а мс там такие:
Цитата
SiM5;28.05.2015;21:18:19;53161;2;B;940000;1127305138
SiM5;28.05.2015;21:18:19;53163;1;B;941000;1127305139
SiM5;28.05.2015;21:18:19;53163;1;B;941000;1127305140
SiM5;28.05.2015;21:18:19;53163;1;B;941000;1127305141
Т.е., эти сделки могли попросту не успеть попасть в "срез" на 21:18:19, а попали в следующий "срез".
Надо делать так, как надо. А как не надо - делать не надо.
 
повторюсь - мой скрипт вполне даже себе уверенно и правильно считает. местами... ))
потом - хреново считает (такое ощущение, что идёт прогрузка данных)
потом - опять замечательно считает.

Мне надо - чтоб он считал -ВСЕГДА и не итог, а именно то, что мне надо: количество сделок в секунду.
 
Цитата
sam063rus пишет:
повторюсь - мой скрипт вполне даже себе уверенно и правильно считает. местами... ))
потом - хреново считает (такое ощущение, что идёт прогрузка данных)
Имеется в виду который считает по AllTrade, и только по одному инструменту?

Цитата
sam063rus пишет:
что мне надо: количество сделок в секунду.
По одному инструменту или по классу или на одной секции биржи?
 
насчёт мс и мкс - я сохранил данные таблиц в текстовые файлы, потом выгрузил в эксель. Но при сохранении в текстовый файл штатными средствами квика - почему-то не сохранились все поля таблицы.
да это по сути и не особо важно бо как даже при таком представлении - все отсчёты в ТВС - реально показаны. Насчёт срезов - скажу так, имхо:
параметры "время" в ТВС и TIME в ТТП - насколько я себе это представляю, - одинаковые по определению. и именно по ним построены таблицы. Так о каких тогда срезах можно говорить?
 
вот полная инфо:
ТВС:
Скрытый текст
 
ТТП:
Скрытый текст
 
Цитата
sam063rus пишет:
Так о каких тогда срезах можно говорить?
на бирже были три сделки подряд
все три придут в ТВС
а обновлений ТТП за это время может прийти, например, только два (а то и меньше), так как они происходят только с определенной периодичностью
в первом обновлении ТТП будет указано число сделок 1 и время 1-й сделки
во втором - число сделок 3 и время 3-й сделки
 
в ТТП у меня: Время последней сделки и количество сделок
 
т.е. не просто какое-то время с потолка (время обновления по непонятно какому параметру), а именно время последней сделки
 
Цитата
Старатель пишет:
Написал тестовый скрипт для подсчёта общего количества сделокпо колбекам OnAllTrade и OnParam
Результаты на демо-сервере по SBER:
Даже на демо-сервере видно, что число коллбэков по изменению ТТП меньше, чем по приходу новой сделки (при том что там еще не все колбэки OnAllTrade посчитаны, т.е. не учтены идущие подряд с минимальным интервалом).
Это иллюстрация к моему предыдущему сообщению.
Думаю, на боевом сервере в самый разгар торгов разница будет еще больше.
 
Цитата
sam063rus пишет:
Насчёт срезов - скажу так, имхо:
параметры "время" в ТВС и TIME в ТТП - насколько я себе это представляю, - одинаковые по определению. и именно по ним построены таблицы. Так о каких тогда срезах можно говорить?
Ещё раз: в ТТП показываются не все сделки, а только часть, срезами один-несколько раз в сек. Поэтому сделки с 940 мс могли просто не попасть в таблицу, а попала, скажем следующая
Цитата
SiM5;28.05.2015;21:18:20;53161;2;S;228000;1127305146
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
sam063rus пишет:
т.е. не просто какое-то время с потолка (время обновления по непонятно какому параметру), а именно время последней сделки
это время последней сделки на момент формирования данного среза значений текущих параметров
 
Цитата
Дмитрий пишет:
Цитата
Старатель пишет:
Написал тестовый скрипт для подсчёта общего количества сделокпо колбекам OnAllTrade и OnParam
Результаты на демо-сервере по SBER:
Даже на демо-сервере видно, что число коллбэков по изменению ТТП меньше, чем по приходу новой сделки (при том что там еще не все колбэки OnAllTrade посчитаны, т.е. не учтены идущие подряд с минимальным интервалом).
Это иллюстрация к моему предыдущему сообщению.
Думаю, на боевом сервере в самый разгар торгов разница будет еще больше.
я в версии скрипта на основе OnParam коллбеки и не считал, а учитывал изменение количества сделок к предыдущему.
 
Я думаю, что по OnParam невозможно сделать точный подсчет количества сделок в секунду.
 
Цитата
sam063rus пишет:
я в версии скрипта на основе OnParam коллбеки и не считал, а учитывал изменение количества сделок к предыдущему
я к тому, что ТТП изменяется далеко не при каждой новой сделке
 
Цитата
Дмитрий пишет:
Я думаю, что по OnParam невозможно сделать точный подсчет количества сделок в секунду.
я не спорю - осталось дождаться "официального подтверждения" и пусть укажут в документации (зарегистрируют очередное пожелание), что по факту полагаться на коллбеки OnParam однозначно нестоит бо как они не учитывают все изменения.
 
Цитата
sam063rus пишет:
я не спорю - осталось дождаться "официального подтверждения" и пусть укажут в документации (зарегистрируют очередное пожелание), что по факту полагаться на коллбеки OnParam однозначно нестоит бо как они не учитывают все изменения
Если поискать на форуме, то по-моему уже найдется немало указаний на это, в том числе и официальных.
 
Цитата
Дмитрий пишет:
я к тому, что ТТП изменяется далеко не при каждой новой сделке
по нормальному - должна при каждорй сделке - т.к. сделка - это уже существенный факт.
 
Цитата
sam063rus пишет:
по нормальному - должна при каждорй сделке - т.к. сделка - это уже существенный факт.
У вас в настройках стоит "Запрашивать данные раз в 1 сек"
Надо делать так, как надо. А как не надо - делать не надо.
 
А там меньше и не поставишь насколько я знаю
 
Цитата
sam063rus пишет:
по нормальному - должна при каждорй сделке - т.к. сделка - это уже существенный факт.
В свое время разработчики решили иначе :)
Насколько я понимаю, обновление ТТП происходит через определенные интервалы времени, независимо от частоты изменения тех или иных параметров. Таков принцип работы квика с ТТП.
 
Цитата
sam063rus пишет:
А там меньше и не поставишь насколько я знаю
Там можно вообще не ставить галку, тогда ТТП будет обновляться намного чаще.
 
в таком случае, боюсь задча счётчика останет ся не разрешимой бо как на фортс вдобавок ко всему в OnAllTrade округляется всё до миллисекунд.
 
По-моему, задача вполне решаема, именно с использованием OnAllTrade.
Округление до миллисекунд не критично - если и даст погрешность, то незначительную.
 
либо, пусть разработчики решат проблему с синхронизацией ТТП - потому как скрипт большую часть времени всё же правильно показывает.
 
в общем, как и говорил ранее: у кого какие варианты с кодом есть - Welcome!
 
Цитата
sam063rus пишет:
в общем, как и говорил ранее: у кого какие варианты с кодом есть - Welcome!
На досуге напишу, если к тому времени вопрос еще не решится.
 
Цитата
Дмитрий пишет:
По-моему, задача вполне решаема, именно с использованием OnAllTrade.
Округление до миллисекунд не критично - если и даст погрешность, то незначительную.
остаётся только вопрос как её правильно оценивать бо как ТТП - уже скомпрометирована. А визуально по ТВС - результаты получаются ещё хуже чем в версии скрипта с OnParam
 
sam063rus, по-моему вы "из мухи делаете слона".
Если вам нужен счётчик сделок, то за отдельную плату я могу вам его написать. По OnAllTrade. Больше ничего не надо. Можно и по OnParam, но там точность будет не очень.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Дмитрий пишет:

Цитата
sam063rus пишет:
что мне надо: количество сделок в секунду.
По одному инструменту или по классу или на одной секции биржи?
 
если бы я за каждую муху платил денег - я осталс бы без штанов.
 
Цитата
Дмитрий пишет:
По одному инструменту или по классу или на одной секции биржи?
изначально я планировал по классу (по фьючерсам), потом выяснилось,что наблюдается рассинхронизация между отдельными бумагами в классе. В итоге, остановился хотя бы на одной бумаге (тут синхронизация - полная)
 
Цитата
sam063rus пишет:
если бы я за каждую муху платил денег - я осталс бы без штанов.
sam063rus, хитрый вы какой: с других трясёте денег, а сами за чужой труд платить не желаете   :evil:  
(Дмитрий спрашивал вас, кстати о помощи.)
Надо делать так, как надо. А как не надо - делать не надо.
 
с OnAllTrade также пришлось столкнуться с тем, что надо знать "правильное чередование" и наличие "галочек". К тому же, коллбеки приходили со вчерашней вечерней сессии (понятно что сессия длится от клиринга до клиринга). В общем, это только кажется, что так всё просто.
 
Цитата
Старатель пишет:
Цитата
sam063rus пишет:
если бы я за каждую муху платил денег - я осталс бы без штанов.
sam063rus , хитрый вы какой: с других трясёте денег , а сами за чужой труд платить не желаете
(Дмитрий спрашивал вас, кстати о помощи .)
С Дмитрием - мы всё уже решили - к тому же, моя подсказка в формате "clear room" была в топике для всех.
Насчёт "трясти денег" - если создадите функциональный аналог qchart.dll - вам тогда не 10тыр, а в 3 раза больше будет )))))
 
Цитата
sam063rus пишет:
с OnAllTrade также пришлось столкнуться с тем, что надо знать "правильное чередование" и наличие "галочек". К тому же, коллбеки приходили со вчерашней вечерней сессии (понятно что сессия длится от клиринга до клиринга). В общем, это только кажется, что так всё просто.
Цитата
sam063rus пишет:
Цитата
Дмитрий пишет:
По одному инструменту или по классу или на одной секции биржи?
изначально я планировал по классу (по фьючерсам), потом выяснилось,что наблюдается рассинхронизация между отдельными бумагами в классе. В итоге, остановился хотя бы на одной бумаге (тут синхронизация - полная)
вдобавок ко всему, - чем сложней и совершенней алгоритм в OnAllTrade был - тем больше тормозил квик, а учитывая, что сделок туда сыпется видимо-невидимо - то ...
Страницы: Пред. 1 2 3 4 След.
Читают тему
Наверх