События появления/завершения свечи
Atom Ответить
08.02.2012


Пытаюсь переходить на событийную модель, в связи с чем такой вопрос появился.
Почему сначала отрабатывается событие новой свечи, а потом появляется событие предыдущей свечи.
Это доставляет следующие проблемы.
У меня стратегия работает по закрытию свечи, допустим сейчас идет свеча 13:00, рабочий ТФ 30 минут, так вот по идее я должен входить сразу как свеча закончилась, т.е. в 13:30:00. А событийная модель завершение свечи считает тогда, когда началась новая, а новая может начаться в 13:30:23 допустим, т.е. после того как закончилась свеча 13:00 первая сделка пошла через 23 секунды после начала, соответственно за 23 секунды стакан может поменяться и вход у меня будет совсем другой чем в бэктесте.
Можно ли это как-то исправить, или мне нужно возвращаться к TimeFrameStrategy где я могу этот момент урегулировать.
Спасибо.

Теги:


Спасибо:




13 Ответов
Alexander

Фотография
Дата: 08.02.2012
Ответить


russ Перейти
Пытаюсь переходить на событийную модель, в связи с чем такой вопрос появился.
Почему сначала отрабатывается событие новой свечи, а потом появляется событие предыдущей свечи.
Это доставляет следующие проблемы.
У меня стратегия работает по закрытию свечи, допустим сейчас идет свеча 13:00, рабочий ТФ 30 минут, так вот по идее я должен входить сразу как свеча закончилась, т.е. в 13:30:00. А событийная модель завершение свечи считает тогда, когда началась новая, а новая может начаться в 13:30:23 допустим, т.е. после того как закончилась свеча 13:00 первая сделка пошла через 23 секунды после начала, соответственно за 23 секунды стакан может поменяться и вход у меня будет совсем другой чем в бэктесте.
Можно ли это как-то исправить, или мне нужно возвращаться к TimeFrameStrategy где я могу этот момент урегулировать.
Спасибо.


Какие предложения?
Учитывайте, что у вас поток сделок заканчивается не ровно в 13:29:59, он может придти и в 13:30:01 со сделками совершёнными в 13:29:59.
Спасибо:

russ

Фотография
Дата: 08.02.2012
Ответить


Alexander Mukhanchikov Перейти
russ Перейти
Пытаюсь переходить на событийную модель, в связи с чем такой вопрос появился.
Почему сначала отрабатывается событие новой свечи, а потом появляется событие предыдущей свечи.
Это доставляет следующие проблемы.
У меня стратегия работает по закрытию свечи, допустим сейчас идет свеча 13:00, рабочий ТФ 30 минут, так вот по идее я должен входить сразу как свеча закончилась, т.е. в 13:30:00. А событийная модель завершение свечи считает тогда, когда началась новая, а новая может начаться в 13:30:23 допустим, т.е. после того как закончилась свеча 13:00 первая сделка пошла через 23 секунды после начала, соответственно за 23 секунды стакан может поменяться и вход у меня будет совсем другой чем в бэктесте.
Можно ли это как-то исправить, или мне нужно возвращаться к TimeFrameStrategy где я могу этот момент урегулировать.
Спасибо.


Какие предложения?
Учитывайте, что у вас поток сделок заканчивается не ровно в 13:29:59, он может придти и в 13:30:01 со сделками совершёнными в 13:29:59.

Если честно, я не очень сильно разбираюсь в ньюансах, со своей стороны я бы предложил событие о завершении свечи высылать через 2 секунды после того как закончится ее время, т.е. в данном примере событие о закрытии свечи 13:00 присылать в 13:00:02. Не уверен насколько это правильно, но и существующее решение не совсем подходит для малоликвидных рынков (у нас когда дикий сон на рынке иногда вообще бывает нет сделок по пару минут).
З.Ы. Еще можно пользователю дать самому настраивать лаг после которого должно приходить событие о закрытии свечи.
Автор топика
Спасибо:

Alexander

Фотография
Дата: 08.02.2012
Ответить


russ Перейти
Alexander Mukhanchikov Перейти
russ Перейти
Пытаюсь переходить на событийную модель, в связи с чем такой вопрос появился.
Почему сначала отрабатывается событие новой свечи, а потом появляется событие предыдущей свечи.
Это доставляет следующие проблемы.
У меня стратегия работает по закрытию свечи, допустим сейчас идет свеча 13:00, рабочий ТФ 30 минут, так вот по идее я должен входить сразу как свеча закончилась, т.е. в 13:30:00. А событийная модель завершение свечи считает тогда, когда началась новая, а новая может начаться в 13:30:23 допустим, т.е. после того как закончилась свеча 13:00 первая сделка пошла через 23 секунды после начала, соответственно за 23 секунды стакан может поменяться и вход у меня будет совсем другой чем в бэктесте.
Можно ли это как-то исправить, или мне нужно возвращаться к TimeFrameStrategy где я могу этот момент урегулировать.
Спасибо.


Какие предложения?
Учитывайте, что у вас поток сделок заканчивается не ровно в 13:29:59, он может придти и в 13:30:01 со сделками совершёнными в 13:29:59.

Если честно, я не очень сильно разбираюсь в ньюансах, со своей стороны я бы предложил событие о завершении свечи высылать через 2 секунды после того как закончится ее время, т.е. в данном примере событие о закрытии свечи 13:00 присылать в 13:00:02. Не уверен насколько это правильно, но и существующее решение не совсем подходит для малоликвидных рынков (у нас когда дикий сон на рынке иногда вообще бывает нет сделок по пару минут).
З.Ы. Еще можно пользователю дать самому настраивать лаг после которого должно приходить событие о закрытии свечи.


В вашем предложении может возникнуть ситуация, что сделка, совершённая в 13:29:58 или 13:29:59 придёт в 13:30:03 и уже будет отнесена к новой 5-минутке, что совсем криво.
Если нужно отсекать по 5 минут - пользуйтесь таймфреймами.
Спасибо:

russ

Фотография
Дата: 08.02.2012
Ответить


Alexander Mukhanchikov Перейти

В вашем предложении может возникнуть ситуация, что сделка, совершённая в 13:29:58 или 13:29:59 придёт в 13:30:03 и уже будет отнесена к новой 5-минутке, что совсем криво.
Если нужно отсекать по 5 минут - пользуйтесь таймфреймами.

Не совсем понял как такое возможно, когда в квике системное время 13:30:00, значит свеча 13:00 уже завершилась разве не так? И если прошла сделка в 13:30:01 значит она уже идет в новую свечу. Я сейчас говорю не о своих сделках, а вообще о всех сделках.
Автор топика
Спасибо:

Alexander

Фотография
Дата: 08.02.2012
Ответить


russ Перейти
Alexander Mukhanchikov Перейти

В вашем предложении может возникнуть ситуация, что сделка, совершённая в 13:29:58 или 13:29:59 придёт в 13:30:03 и уже будет отнесена к новой 5-минутке, что совсем криво.
Если нужно отсекать по 5 минут - пользуйтесь таймфреймами.

Не совсем понял как такое возможно, когда в квике системное время 13:30:00, значит свеча 13:00 уже завершилась разве не так? И если прошла сделка в 13:30:01 значит она уже идет в новую свечу. Я сейчас говорю не о своих сделках, а вообще о всех сделках.


Сделка прошла в 13:29:59, в квике из-за тормозов отобразилась как совершённая в 13:30:02 (время что она исполнена отобразилось как 13:29:59), по DDE пришла в робота в 13:30:03.
И это - довольно стандартная ситуация.
Спасибо:

russ

Фотография
Дата: 08.02.2012
Ответить


Alexander Mukhanchikov Перейти
russ Перейти
Alexander Mukhanchikov Перейти

В вашем предложении может возникнуть ситуация, что сделка, совершённая в 13:29:58 или 13:29:59 придёт в 13:30:03 и уже будет отнесена к новой 5-минутке, что совсем криво.
Если нужно отсекать по 5 минут - пользуйтесь таймфреймами.

Не совсем понял как такое возможно, когда в квике системное время 13:30:00, значит свеча 13:00 уже завершилась разве не так? И если прошла сделка в 13:30:01 значит она уже идет в новую свечу. Я сейчас говорю не о своих сделках, а вообще о всех сделках.


Сделка прошла в 13:29:59, в квике из-за тормозов отобразилась как совершённая в 13:30:02 (время что она исполнена отобразилось как 13:29:59), по DDE пришла в робота в 13:30:03.
И это - довольно стандартная ситуация.

Прикольно, не знал такого, что ж буду думать.
Вот только что опять глюк такой был, свеча закрылась и после этого 18 секунд не было сделок вообще, в итоге сообщение о закрытии свечи пришло через 18 секунд. Придется, вернуться назад на TimeFrameStrategy.
Спасибо за помощь.
Автор топика
Спасибо:

Alexander

Фотография
Дата: 08.02.2012
Ответить


russ Перейти
Alexander Mukhanchikov Перейти
russ Перейти
Alexander Mukhanchikov Перейти

В вашем предложении может возникнуть ситуация, что сделка, совершённая в 13:29:58 или 13:29:59 придёт в 13:30:03 и уже будет отнесена к новой 5-минутке, что совсем криво.
Если нужно отсекать по 5 минут - пользуйтесь таймфреймами.

Не совсем понял как такое возможно, когда в квике системное время 13:30:00, значит свеча 13:00 уже завершилась разве не так? И если прошла сделка в 13:30:01 значит она уже идет в новую свечу. Я сейчас говорю не о своих сделках, а вообще о всех сделках.


Сделка прошла в 13:29:59, в квике из-за тормозов отобразилась как совершённая в 13:30:02 (время что она исполнена отобразилось как 13:29:59), по DDE пришла в робота в 13:30:03.
И это - довольно стандартная ситуация.

Прикольно, не знал такого, что ж буду думать.
Вот только что опять глюк такой был, свеча закрылась и после этого 18 секунд не было сделок вообще, в итоге сообщение о закрытии свечи пришло через 18 секунд. Придется, вернуться назад на TimeFrameStrategy.
Спасибо за помощь.


Это не глюк.
Почему так - объяснил выше.
Спасибо:

freelancer

Фотография
Дата: 08.02.2012
Ответить


А как вы отличаете свечи, пришедшие при запуске стратегии, от только что пришедших в робота ?
Спасибо:

Garic

Фотография
Дата: 08.02.2012
Ответить


freelancer Перейти
А как вы отличаете свечи, пришедшие при запуске стратегии, от только что пришедших в робота ?


У меня событие CandleFinished(candles) разбито на два, каждое из которых выдаёт только одну свечу (вместо IEnumerable), стратегии используют непосредственно эти события
- AnyCandleFinished - вызывается для каждой свечи из candles
- LastCandleFinished - вызывается только для candles.last() если это свеча не старше 5 минут от QuikTerminal.MarketTime

Первое - используется для всяких расчётов и индикаторов.
Второе - для входа/выхода в позицию.

Заодно отсекается возможность получения стратегией несколько свечей (у меня рэндж бары) одновременно из-за лагов, и как следствие - открытие/закрытие левых позиций.

Ничего лучше придумать не удалось.
Спасибо:

freelancer

Фотография
Дата: 19.02.2012
Ответить


А если у вас ТФ = 1мин ? То как тогда ?
Нужен универсальный код, для любого ТФ (> 1 мин например)
Спасибо:

Garic

Фотография
Дата: 19.02.2012
Ответить


Лучше конечно candle.CloseTime смотреть. Оно появится в 4.1.
Если отличается секунд на 30 - нафиг эту свечу.
Спасибо:

freelancer

Фотография
Дата: 19.02.2012
Ответить


candle.CloseTime = candle.Time + TimeFrame ??
Спасибо:

Garic

Фотография
Дата: 19.02.2012
Ответить


freelancer Перейти
candle.CloseTime = candle.Time + TimeFrame ??


Свечи бывают не только таймфреймовые. Да и для таймфрейм - это не обязательно.

candle.Time (OpenTime) - время первой сделки свечи
candle.CloseTime - время последней сделки свечи

пример1 - вечёрка открылась в 19:01:20
candle.OpenTime = 19:01:20

пример2 - неликвид - прошло четыре сделки 11:30:10, 11:30:25, 11:30:57, 11:31:20
для минутного таймфрейма мы получим
candle.OpenTime = 11:30:10
candle.CloseTime = 11:30:57
но о том что свеча закончилась станет известно только в 11:31:20


Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy