Поделитесь, кто как отслеживает факт "готовности свечи"?

Страницы: 1
RSS
Поделитесь, кто как отслеживает факт "готовности свечи"?
 
Если кто пользуется CreateDataSource и свечами из него, как вы решаете задачу, чтобы максимально быстро забрать самую последнюю **законченную** свечу?
Имею в виду, в datasource поседняя свеча всё время меняется, как узнать что она уже "точно сформировалась"?
Есть ли такая возможность? Если нет, может нам попросить разработчиков наконец-то сделать её?
 
Цитата
Павел Bosco написал:
Имею в виду, в datasource поседняя свеча всё время меняется, как узнать что она уже "точно сформировалась"?
А как? допустим сейчас 10:59:59.999 и прошла сделка, как узнать что это последняя сделка на свечке?
Вот и мы не знаем, а вдруг будет еще 10 таких же сделок, и все в 10:59:59.999?
Никто Вам не скажет сколько точно будет сделок в одной свече. В связи с чем, "точно" узнать что свечка сформировалась можно только и только в момент когда уже появится новая свеча (т.е. уже случится сделка приведшая к появлению новой свечки и/или пошла первая секунда новой свечи).
 
Ну хорошо, ну ведь если пришла сделка от 11:00:00, вы можете сказать что все свечки от 10 часов уже не обновятся.
Проблема в том, что у многих (в т.ч. у меня) выключены таблицы всех сделок - как поедающие траффик, и мы полагаемся на квик, который аггрегирует свечи.
А он почему-то даже после открытия свечи в 11:00 может обновить и предыдущую. Насколько я знаю..
В идеале хотелось бы иметь какой-то дополнительные евент, наподобие OnUpdateCallBack, но OnCandleCompleteCallback
пусть квик сначала вызывает OnCandleCompleteCallback, а потом начинает рисовать новую свечу у себя. и потом вызывает OnUpdateCallBack
 
Цитата
Павел Bosco написал:
Ну хорошо, ну ведь если пришла сделка от 11:00:00, вы можете сказать что все свечки от 10 часов уже не обновятся.
Ну да, ровно это и было сказано, разве нет?
Цитата
Sergey Gorokhov написал:
т.е. уже случится сделка приведшая к появлению новой свечки и/или пошла первая секунда новой свечи).
Цитата
Павел Bosco написал:
А он почему-то даже после открытия свечи в 11:00 может обновить и предыдущую. Насколько я знаю..
Так не должно быть, есть логи/скриншоты/доказательства?
Или это Ваши домыслы? если так то пожалуйста не надо говорить то чего нет.

Цитата
Павел Bosco написал:
В идеале хотелось бы иметь какой-то дополнительные евент, наподобие OnUpdateCallBack, но OnCandleCompleteCallbackпусть квик сначала вызывает OnCandleCompleteCallback, а потом начинает рисовать новую свечу у себя. и потом вызывает OnUpdateCallBack
Как уже было сказано и еще раз повторим, нет никакой возможности узнать что свеча сформирована ДО того как появится новая свеча.
В нашем примере 11:00:00.000 это УЖЕ новая свеча (и тут не важно была сделка или нет)
"а потом начинает рисовать новую свечу" это значит вызвать OnCandleCompleteCallback в 10:59:59.999 и при этом точно на все 100% знать что новых сделок не будет, а этого никто не знает и не может знать в принципе.

Вы можете (на выбор):
1) смотреть время (по нашему примеру в 11:00:00.000 делать вывод что старая свеча сформирована).
2) смотреть сделки (можно совместно с п.1)
3) смотреть index в событии SetUpdateCallback (можно совместно с п.2)
 
спасибо, я был уверен, что где-то тут на форуме отвечали, что
Цитата
Sergey Gorokhov написал:
Так не должно быть, есть логи/скриншоты/доказательства?
, что так бывает.
если не бывает, то действительно можно на апдейте ловить индекс. попробую на досуге поупражняться.
просто сейчас если брать в 11:00:00 серверного времени минутную свечку от 10:59:00, когда она ещё последняя, и нет новой от 11:00:00, то вроде как обрезается объём.
т.е. часть данных приходит попозже серверного момента 11:00:00
а отскриншотить это невозможно. там речь идёт на миллисекунды между 11:00:00 и 11:00:01
 
справедливости ради, сейчас выключил исскусственную задержку в получении свечи - и всё без ошибок, объёмы не обрезаются, как вы и утверждаете.
ещё раз спасибо, буду тестировать на открытии сессий.
в принципе щас уже и закрытие скоро, может побегает.
 
Цитата
Sergey Gorokhov написал:
А он почему-то даже после открытия свечи в 11:00 может обновить и предыдущую. Насколько я знаю..
Так не должно быть, есть логи/скриншоты/доказательства?
Или это Ваши домыслы? если так то пожалуйста не надо говорить то чего нет.
...
Вы можете (на выбор):
1) смотреть время (по нашему примеру в 11:00:00.000 делать вывод что старая свеча сформирована).
2) смотреть сделки (можно совместно с п.1)
3) смотреть index в событии SetUpdateCallback (можно совместно с п.2)[/QUOTE]

вот если делать
1) причём, я смотрю именно серверное время, в котором нет миллисекунд, то получается вот так:


видите, в показанном стрелкой объёме, время сервера уже норм, а в свечке не доехало 2 контракта в объём.
локальное время близко к серверному, но для серверного нет миллисекунд.
алгоритм взятия свечи такой, что **сначала** берётся время сервера, запоминается на клиенте (отдельный скрипт) и потом уже берётся свеча,
т.е. серверное время **заведомо** больше чем написано в строке "Время сервера"
так что если делать 1), то только с задержкой.
 
Есть разные варианты нарезки данных на свечки: по времени (штатный в QUIK), по объему, по высоте, ...
Многие Вы можете реализовать, если у Вас в руках SetUpdateCallback, даже по времени можно разнообразить, например, через 17.5 секунд.
Для меня, например, важнее не завершение свечки, а достижение ценой определенного значения, причем это значение само меняется во времени.
Достижение этого значения не связано с Close штатной свечки, да и вообще, Open и Close менее надежны, чем High и Low. Дожидаясь Close, Вы теряете драгоценное время.

Свечки нужны только для компактного хранения истории, хранить тики и пользоваться ими очень неудобно.
Гораздо важнее временные задержки и особенности в доставке данных от биржи через брокера и QUIK до Вашего скрипта.  
 
Цитата
Борис Гудылин написал:
Дожидаясь Close, Вы теряете драгоценное время.
это хорошая мысль, но кажется очень большой философский разговор :)
подумаю на досуге. спасибо.
проблема high-low зачастую в том, что в тех точках очень тяжело войти в контр-тренд, а в тренд брокер конечно с радостью исполнит по самой наихудшей цене.
хай-лоу внутри минуты я ловлю для своих целей.
 
вот так примерно выглядят данные в квике на открытии сессии


где-то 5 минут квику надо чтобы "догнать" всё что происходит на открытии. нормально разве?
времена указаны символического окончания минутной свечи.
я решил в случае расхождения времени локала  сервера дожидаться начала новой свечки,
а если время более менее синхронно, то дожидаюсь окончания обновления текущей при смене минут.
 
Разобрался с проблемой в предыдущем комменте наконец.
Всё решилось обновлением win32kfull.sys и корректировкой синхронизации времени.
Сейчас время не улетает.

Возвращаюсь к первоначальному вопросу, мысли вслух. Я оцениваю "готовность" свечи сейчас по GetInfoParam("SERVERTIME"), и время от времени "пролетаю", т.е. в GetInfoParam("SERVERTIME") уже началась новая минута,
я забираю из DataSource свечу предыдущей минуты, а потом оказывается, что она ещё "не сготовилась", т.е. я забрал объём меньше того который потом в ней окажется.
Для меня это мучительно, потому что архитектура робота такая, что переобувать старые свечки на ходу в другие данные я не могу - фарш невозможно провернуть назад.

По сути, задача у меня очень конкретная, мне нужны только свечки Si'шки. Тут читал поиск форум и набрёл на сообщение, что оказывается GetInfoParam("SERVERTIME") вычисляется по таблице Текущих Торгов.
Т.е. у меня родилась такая гипотеза, что я могу взять вместо GetInfoParam("SERVERTIME") время "последней сделки" для сишки из той же таблицы или из Текущих Параметров, и если в нём началась новая минута - то у меня будут более целые данные.
Т.е. *возможно* в таблицу Текущих торгов данные приходят неодновременно пакетом, а отдельными строками, к примеру, и какой-то класс обновляется раньше Сишки (редко, очень редко, но бывает).

Осталось понять несколько вещей:
1. будет ли время в таблице Текущих Торгов или Текущих Параметров меняться быстрее, чем создаваться новая свечка в DataSource? Похоже что таблица одна и таже? По крайней мере функция GetParamEx[2] работает с текущими торгами.
2. не ошибся ли я в своих рассуждениях.

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

Т.е. вполне может быть что вы спрашиваете getParamEx(class, sec, "TIME"), получаете 12:00:00
после этого берёте 1M свечку от 11:59:00 и та-дам, она не полная, к ней данные ещё не доехали!

"Молодой человек, вы не понимаете, как устроен мир. У меня не было никаких неудач. Я с успехом определил пять тысяч способов, которые никуда не годятся."
Томас Эдисон

единственный верный способ - следить за датасорсом на момент появления следующей свечи. всё.
 
Подскажите, можно ли получить "open" текущей свечи, не дожидаясь ее закрытия?
 
Цитата
sav 312 написал:
Подскажите, можно ли получить "open" текущей свечи, не дожидаясь ее закрытия?

Да можно.
 
Цитата
Sergey Gorokhov написал:
Да можно.
Почему-то nil получаю. Пошел искать ошибку.
 
Все работает. Сам затупил, слетел идентификатор.
 
Цитата
Павел Bosco написал:
Если кто пользуется CreateDataSource и свечами из него, как вы решаете задачу, чтобы максимально быстро забрать самую последнюю **законченную** свечу?
Имею в виду, в datasource поседняя свеча всё время меняется, как узнать что она уже "точно сформировалась"?
Есть ли такая возможность? Если нет, может нам попросить разработчиков наконец-то сделать её?
все очень просто.
синхронизируйте время компа по атомным часам.
свеча закрывается всегда точно по указанному кванту времени и выдается "задним числом"
т е цена закрытия свечи (close) это цена последней сделки время которой не больше времени закрытия свечи.
т е как пропикало закрыть свечу - лови подарок от сервера.
можешь не ждать а вычислить сам - можешь даже обогнать.
 
Цитата
Николай Камынин написал:
т е цена закрытия свечи (close) это цена последней сделки время которой не больше времени закрытия свечи.
т е как пропикало закрыть свечу - лови подарок от сервера.
можешь не ждать а вычислить сам - можешь даже обогнать.
нет, об этом-то и весь пост, что эта логика хоть "в основном" и работает, но в разного рода ситуациях может подвести.
например большой поток данных, данные свечи приходят не ритмично и синхронно, а по возможности.
так же если есть косяки в винде или квике с замедлением-торможением (см топик про тормоза тёмной темы).

я уже смирился с тем что надо брать свечу когда начинается следующая. потери по скорости на самом деле не такие уж критичные. а вот надёжность 100%.
 
Цитата
Николай Камынин написал:
синхронизируйте время компа по атомным часам.свеча закрывается всегда точно по указанному кванту времени и выдается "задним числом"т е цена закрытия свечи (close) это цена последней сделки время которой не больше времени закрытия свечи.т е как пропикало закрыть свечу - лови подарок от сервера.можешь не ждать а вычислить сам - можешь даже обогнать.

Что даст вам такой фокус, если в начале нового интервала на вашем "синхронизированном" компе сервер пришлёт данные, относящиеся к предыдущему интервалу времени?
Априори нельзя точно сказать, когда закрылась свеча, пока не откроется новая.
Причём данные разных потоков не синхронизированы. Т.е., если терминал, например, получил обезличенную сделку с нового интервала, это ещё не значит, что на графике свеча закрылась. Более того, в QUIK обезличенные сделки с одной торговой площадки могут обогнать сделки с другой площадки.
Не проверял, но подозреваю, что на графиках та же история. Поскольку данные графиков формируются на стороне сервера по обезличенным сделкам, то теоретически возможен вариант, когда на одном графике (одной торговой площадки) ещё продолжает формироваться старая свеча, а на другом графике (другой торговой площадки) - уже открылась новая свеча.
 
Цитата
Старатель написал:
Цитата
Николай  Камынин написал:
синхронизируйте время компа по атомным часам.свеча закрывается всегда точно по указанному кванту времени и выдается "задним числом"т е цена закрытия свечи (close) это цена последней сделки время которой не больше времени закрытия свечи.т е как пропикало закрыть свечу - лови подарок от сервера.можешь не ждать а вычислить сам - можешь даже обогнать.

Что даст вам такой фокус, если в начале нового интервала на вашем "синхронизированном" компе сервер пришлёт данные, относящиеся к предыдущему интервалу времени?
Априори нельзя  точно  сказать, когда закрылась свеча, пока не откроется новая.
Причём данные разных потоков не синхронизированы. Т.е., если терминал, например, получил обезличенную сделку с нового интервала, это ещё не значит, что на графике свеча закрылась. Более того, в QUIK обезличенные сделки с одной торговой площадки могут обогнать сделки с другой площадки.
Не проверял, но подозреваю, что на графиках та же история. Поскольку данные графиков формируются на стороне сервера по обезличенным сделкам, то теоретически возможен вариант, когда на одном графике (одной торговой площадки) ещё продолжает формироваться старая свеча, а на другом графике (другой торговой площадки) - уже открылась новая свеча.
Вы не правы.
Поясню в чем у вас ошибка.
---------------------------------
Начну с определения ,которое я написал ранее и поясню подробнее.
Что такое свеча?
Это сжатое отображение сделок на заданном интервале времени и переход от неравномерной временной шкалы к равномерной,.
-------------------------
Т е исходные данные - это поток обезличенных сделок т е цена и время сделки .
Чтобы уменьшить объем данных и отобразить эти данные графически применяются различные методы сжатия
------------------------------
один из них  - это свечи - которые по сути своей есть отсчеты четырех функций от исходного потока.
--------------------------------
Эти отсчеты отображаются на равномерной временной оси.
--------------------
Функции вычисляются следующим образом
поток сделок разделяется на интервалы таймы по оси времени.
Т е в каждый интервал попадут сделки время которых больше левой границы интервала но меньше или равно правой ( знак равенства ставим либо справа либо слева по желанию)
Далее в этом интервале берем первую сделку, последнюю , максимум и миниму.  
Вот и получилась свеча.
------------------------
Каким же образом определить закрытие свечи.
Очень просто. Это граница временного интервала. Сделки время которых за этой границей - это новая свеча.
именно так и определяет сервер биржи.
-----------------------------------
Таким образом, смотрим точное время и когда оно ровно границе - свеча закрылась. Это реальное время.
Если Вы синхронизируетесь с атомными часами и биржа тоже с ними синхронизируется.
То Вы точно знаете в какой момент реального времени свеча закрыта.
------------------------------------------------------------
После этого момента с сервера брокера к Вам поступят свечи, время которых может быть меньше чем время закрытия свечи
и вы их включите в закрытую свечу, но это уже будет не реальное время, а прошлое.
-------------------------------------------
С таким же успехом к Вам могут прийти данные вчерашнего дня, которые у вас отсутствовали и вы тоже их включите в прошлые закрытые свечи.
---------------------------
Поэтому Все сделки ,,которые  Вы получите после границы закрытия свечи  по атомным часам с временем меньшим чем реальное - покажут  Вам отставание Вашей псевдо реальной торговли от реальности.  
------------------------------------
Вы уж определитесь, что Вы хотите узнать -реальность или историю(прошлое).
От этого будет зависеть и способ определения времени закрытия свечи на Вашем компьютере.
 
и еще...
Свеча бывает пустая - т е в ней нет сделок. Но интервал для нее будет выделен.
Момент начала не пустой свечи в действительности равен времени первой сделки, но на графике и параметрах свечи это будет начало интервала.
Все это потому, что свечи - это упрощенное отображения сделок.
А упрощение можно делать до полного безобразия  кому и как вздумается.
 
Николай Камынин,
offtopic
 
Допустим, есть графики фьючерсов, c одной биржи, отличающиеся только названием ф. Если хоть на одном из них открылась новая свеча, то все свечи на остальных графиках со временем, как у только что закрытой свечи, также можно считать закрытыми. Это гипотеза. Ее правильность зависит от того, как на сервере эти графики формируются, и доставляются до клиента.
 
Цитата
Павел Bosco написал:
Всё решилось обновлением win32kfull.sys и корректировкой синхронизации времени.Сейчас время не улетает
Интересно вы все рассуждаете про свечи, но не учитываете что сама операционная система windows компьютера не является системой реального времени, линукс может чуть лучше, но то же не может выдать вам реальное время в микросекундах, миллисекунды наверно может причем десятки может быть, поэтому все рассуждения о синхронизации по атомным часам даже в теории мне кажется не реально. Но у меня другой вопрос, где можно посмотреть чем отличаются различные модули квика при обновлении, это где то пишется? Я тупо обновляю программу, что приходит, а что там обновилось не имею представления. Может где то можно почитать или это не имеет особого значения при работе программы?
человек (не робот)
 
Цитата
Андрей написал:
где можно посмотреть чем отличаются различные модули квика при обновлении, это где то пишется? Я тупо обновляю программу, что приходит, а что там обновилось не имею представления. Может где то можно почитать или это не имеет особого значения при работе программы?

https://arqatech.com/ru/products/quik/terminals/user-applications/
https://arqatech.com/ru/products/quik/terminals/user-applications/quik-workstation/
https://arqatech.com/ru/support/files/quik-workstation/

Это важная информация, особенно если касается lua.
 
Д. Д.
Если актуально ? . . .
Как вам такой вариант.

"Еще можно отслеживать изменения в ТТП (истории)".
Наступило время новой свечи (в таблице ТПП), а к-во сделок (проторгованных объемов) НЕ изменилось (т. е. сделок НЕ БЫЛО).
Страницы: 1
Читают тему (гостей: 1)
Наверх