← Atrás

OnProcess вызов по событию

Здравствуйте. Я так понимаю, что это событие вызвается через определенный интервал по времени. И хотелось бы узнать, как можно, допустим, генерировать и обрабатывать это событие на каждом тике? Я понимаю, что можно внутренние проверки устроить, например контролировать объем последней свечи или еще что то, но может быть есть более простой выход, которого я не знаю?

¿Le resultó útil este tema?

Compartir tema

Comentarios (8)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

ltrim
ltrim

В описании написано http://stocksharp.com/doc/Default.aspx?topic=Stock%23

Interval Интервал стратегии. Как часто StrategyManager будет вызывать метод Process(). (Унаследовано от Strategy.)

Andrey R.
Andrey R. Autor

Это то понятно, что событие OnProcess вызывается через заданный интервал. Меня интересует как сделать так, чтобы это событие вызывалось на каждом тике, не чаще и не реже.

ltrim
ltrim

Andrey R.: Это то понятно, что событие OnProcess вызывается через заданный интервал. Меня интересует как сделать так, чтобы это событие вызывалось на каждом тике, не чаще и не реже.

strategy.Interval = TimeSpan.FromTicks(1)

Иванов Андрей
Иванов Андрей

ltrim:

Andrey R.: Это то понятно, что событие OnProcess вызывается через заданный интервал. Меня интересует как сделать так, чтобы это событие вызывалось на каждом тике, не чаще и не реже.

strategy.Interval = TimeSpan.FromTicks(1) Думаю, что это не то, что хотел автор треда. Мне так кажется, что он имеет в виду тики Квика или чего-то другого. Потому что один тик TimeSpan это 100 нс. Слишком уж часто, по-моему.

К тому же, Михаил в шедулере стратегий использует Thread.Sleep, точность которого, мягко говоря, никакая =) Потому что шедулер операционной системы оперирует квантами, которые измеряются десятками и сотнями миллисекунд. На практике ваши 100 нс округлятся до 0 мс, которые дадут вам рандомную задержку, так как в этом случае она зависит от загрузки процессора. Если нет у шедулера операционной системы готового потока, вы задержки не получите вообще, а если есть, то задержка будет рандомной и, скорее всего, кратной кванту, потому что ваш поток может получть квант не следующий и не через один, а пятый, например, потому что у шедулера системы своё мнение на тему того, какой поток должен сейчас исполняться. "Скорее всего" кратный кванту, потому что другой поток тоже может пойти поспать, в этом случае вы получите оставшуюся часть его кванта.

Вероятно, это как в том анекдоте про яблоко, "папа, ты сейчас с кем разговаривал?". Но, надеюсь, понятно хотя бы, что никаких гарантий по интервалу никто дать не может. С большими интервалами, типа секунды, погрешность 10% не критична, а вот с предложенной вами задержкой 100 нс погрешность измеряется тысячами процентов.

Иванов Андрей
Иванов Андрей

Andrey R.: Здравствуйте. Я так понимаю, что это событие вызвается через определенный интервал по времени. И хотелось бы узнать, как можно, допустим, генерировать и обрабатывать это событие на каждом тике? Я понимаю, что можно внутренние проверки устроить, например контролировать объем последней свечи или еще что то, но может быть есть более простой выход, которого я не знаю? Думаю, что вам надо просто подписаться на события того, что вам надо. Предположу, что вам нужны сделки. Вот на событие ITrader.NewTrades и подписывайтесь. Я именно так и работаю, без искусственных задержек и оверхеада на получение данных из общего списка.

Если нужны стаканы для скальпинга, подписывайтесь на событие изменения стаканов. Я не скальпер, событие на память не помню.

Andrey R.
Andrey R. Autor

Андрей Андрея понял))

Да, так и делал раньше(на старой версии библиотеки). А сейчас делаю нового робота с новой библиотекой и почему-то подумалось, что такая возможность появилась)) Всем спасибо за ответы, буду делать по старому..

Mikhail Sukhov
Mikhail Sukhov

Andrey R.: Здравствуйте. Я так понимаю, что это событие вызвается через определенный интервал по времени. И хотелось бы узнать, как можно, допустим, генерировать и обрабатывать это событие на каждом тике? Я понимаю, что можно внутренние проверки устроить, например контролировать объем последней свечи или еще что то, но может быть есть более простой выход, которого я не знаю?

А вот это не оно Событийная модель?

Andrey R.
Andrey R. Autor

возможно, это оно.. Буду разбираться. Спасибо!