Еще раз про событийную модель
~/topic/1631/eshshe-raz-pro-sobytiinuyu-model/
Copyright @ StockSharp Platform LLC 2010 - 2024
2024-03-29T15:42:52Z
https://stocksharp.ru/images/logo.png
https://stocksharp.ru/posts/m/8554/
День добрый! Подскажите, проверка условия When и действие Do выполняются в одном потоке или в разных...
2011-06-02T07:03:39Z
2011-06-02T07:03:39Z
InsiderHSE
https://stocksharp.ru/users/6099/
info@stocksharp.ru
День добрый! Подскажите, проверка условия When и действие Do выполняются в одном потоке или в разных?<br />Использую следующий код (трэйдер в асинхронном режиме):<br /><div class="code"><strong>Код</strong><div class="innercode">class MyStrategy : ActionStrategy<br /> {<br /> public MyStrategy(TimeSpan t)<br /> {<br /> _timeFrame = t;<br /> }<br /> <br /> private readonly TimeSpan _timeFrame;<br /><br /> private CandleManager _candleManager;<br /><br /> public CandleManager CandleManager<br /> {<br /> get { return _candleManager; }<br /> set<br /> {<br /> _candleManager = value;<br /><br /> When(Signal1).Do(Action1)<br /> .MakePeriodical(); // сделать событие периодичным<br /> }<br /> }<br /><br /> private bool Signal1()<br /> {<br /> Debug.WriteLine(DateTime.Now.ToLongTimeString() + " - проверяем сигнал");<br /> //проверяем, сдвинулись ли границы текущей свечки<br /> bool needchange = _timeFrame.GetCandleBounds(base.Trader).Max > _сandleBounds.Max;<br /> bool rez = _candleManager.GetTimeFrameCandle(Security, _timeFrame, _сandleBounds.Max) != null;<br /> //если текущая свечка сдвинулась, а предыдущая не была получна, значит не было сделок - получаем новые границы ожидаемой свечки<br /> if (!rez && needchange)<br /> { _сandleBounds = _timeFrame.GetCandleBounds(base.Trader); }<br /> return rez;<br /> }<br /> private void Action1()<br /> {<br /> Debug.WriteLine(DateTime.Now.ToLongTimeString() + " - Запускаем действие");<br /><br /> // запоминаем новое время следущей свечки<br /> _сandleBounds = _timeFrame.GetCandleBounds(base.Trader);<br /> }<br /><br /> private Range<DateTime> _сandleBounds;<br /><br /> protected override void OnRunning()<br /> {<br /> Debug.WriteLine(DateTime.Now.ToLongTimeString() + " - вызван OnRunning");<br /> // получаем границы текущей свечки<br /> _сandleBounds = _timeFrame.GetCandleBounds(base.Trader);<br /> _candleManager.CandlesFinished += (t,c) =><br /> {<br /> Debug.WriteLine(DateTime.Now.ToLongTimeString() + " - пришла свечка: " + c.First().Time.ToLongTimeString());<br /> };<br /> base.OnRunning();<br /> }<br /> }</div></div><br /><br />Ожидается, что когда будет приходить новая свечка, будет запускаться действие. Однако на практике часто после прихода новой свечки действие запускается 2 раза (видимо потому что пока выполняется Do, When успевает еще раз провериться). А иногда после прихода свечки действие не запускается (например, 10:45:30, 10:45:44) (не понимаю почему =( )<br />Запускаю с интервалом 2 секунды и получаю следующий вывод:<br /><br /><div class="code"><strong>Код</strong><div class="innercode">10:44:18 - вызван OnRunning<br />10:44:19 - проверяем сигнал<br />10:44:20 - проверяем сигнал<br />10:44:21 - пришла свечка: 10:44:22<br />10:44:21 - проверяем сигнал<br />10:44:21 - Запускаем действие<br />10:44:22 - проверяем сигнал<br />10:44:22 - пришла свечка: 10:44:24<br />10:44:23 - проверяем сигнал<br />10:44:23 - Запускаем действие<br />10:44:24 - проверяем сигнал<br />10:44:25 - проверяем сигнал<br />10:44:26 - пришла свечка: 10:44:26<br />10:44:26 - проверяем сигнал<br />10:44:26 - Запускаем действие<br />10:44:27 - проверяем сигнал<br />10:44:27 - Запускаем действие<br />10:44:28 - пришла свечка: 10:44:30<br />10:44:28 - проверяем сигнал<br />10:44:28 - Запускаем действие<br />10:44:29 - проверяем сигнал<br />10:44:29 - Запускаем действие<br />10:44:30 - проверяем сигнал<br />10:44:31 - проверяем сигнал<br />10:44:32 - пришла свечка: 10:44:32<br />10:44:32 - проверяем сигнал<br />10:44:32 - пришла свечка: 10:44:34<br />10:44:33 - проверяем сигнал<br />10:44:33 - Запускаем действие<br />10:44:34 - проверяем сигнал<br />10:44:35 - пришла свечка: 10:44:36<br />10:44:35 - проверяем сигнал<br />10:44:35 - Запускаем действие<br />10:44:36 - проверяем сигнал<br />10:44:37 - пришла свечка: 10:44:38<br />10:44:37 - проверяем сигнал<br />10:44:37 - Запускаем действие<br />10:44:38 - пришла свечка: 10:44:40<br />10:44:38 - проверяем сигнал<br />10:44:38 - Запускаем действие<br />10:44:39 - проверяем сигнал<br />10:44:39 - Запускаем действие<br />10:44:40 - проверяем сигнал<br />10:44:41 - пришла свечка: 10:44:42<br />10:44:41 - проверяем сигнал<br />10:44:41 - Запускаем действие<br />10:44:42 - проверяем сигнал<br />10:44:43 - пришла свечка: 10:44:44<br />10:44:43 - проверяем сигнал<br />10:44:43 - Запускаем действие<br />10:44:44 - пришла свечка: 10:44:46<br />10:44:44 - проверяем сигнал<br />10:44:44 - Запускаем действие<br />10:44:45 - проверяем сигнал<br />10:44:45 - Запускаем действие<br />10:44:46 - пришла свечка: 10:44:48<br />10:44:46 - проверяем сигнал<br />10:44:46 - Запускаем действие<br />10:44:47 - проверяем сигнал<br />10:44:47 - Запускаем действие<br />10:44:48 - проверяем сигнал<br />10:44:49 - пришла свечка: 10:44:50<br />10:44:49 - проверяем сигнал<br />10:44:49 - Запускаем действие<br />10:44:50 - пришла свечка: 10:44:52<br />10:44:50 - проверяем сигнал<br />10:44:50 - Запускаем действие<br />The thread '<No Name>' (0x1734) has exited with code 0 (0x0).<br />10:44:51 - проверяем сигнал<br />10:44:51 - Запускаем действие<br />10:44:52 - проверяем сигнал<br />10:44:53 - проверяем сигнал<br />10:44:54 - проверяем сигнал<br />10:44:55 - проверяем сигнал<br />10:44:56 - проверяем сигнал<br />10:44:56 - пришла свечка: 10:44:54<br />10:44:57 - проверяем сигнал<br />10:44:57 - Запускаем действие<br />10:44:58 - проверяем сигнал<br />10:44:58 - пришла свечка: 10:45:00<br />10:44:59 - проверяем сигнал<br />10:44:59 - Запускаем действие<br />10:45:00 - проверяем сигнал<br />10:45:00 - пришла свечка: 10:45:02<br />10:45:01 - проверяем сигнал<br />10:45:01 - Запускаем действие<br />10:45:02 - проверяем сигнал<br />10:45:03 - пришла свечка: 10:45:04<br />10:45:03 - проверяем сигнал<br />10:45:03 - Запускаем действие<br />10:45:04 - проверяем сигнал<br />10:45:04 - пришла свечка: 10:45:06<br />10:45:05 - проверяем сигнал<br />10:45:05 - Запускаем действие<br />10:45:06 - проверяем сигнал<br />10:45:07 - проверяем сигнал<br />10:45:08 - проверяем сигнал<br />10:45:08 - пришла свечка: 10:45:08<br />10:45:09 - проверяем сигнал<br />10:45:09 - Запускаем действие<br />10:45:10 - пришла свечка: 10:45:12<br />10:45:10 - проверяем сигнал<br />10:45:10 - Запускаем действие<br />10:45:11 - проверяем сигнал<br />10:45:11 - Запускаем действие<br />10:45:12 - проверяем сигнал<br />10:45:12 - пришла свечка: 10:45:14<br />10:45:13 - проверяем сигнал<br />10:45:13 - Запускаем действие<br />10:45:14 - проверяем сигнал<br />10:45:14 - пришла свечка: 10:45:16<br />10:45:15 - проверяем сигнал<br />10:45:15 - Запускаем действие<br />10:45:16 - проверяем сигнал<br />10:45:17 - пришла свечка: 10:45:18<br />10:45:17 - проверяем сигнал<br />10:45:17 - Запускаем действие<br />10:45:18 - проверяем сигнал<br />10:45:19 - проверяем сигнал<br />10:45:20 - пришла свечка: 10:45:20<br />10:45:20 - пришла свечка: 10:45:22<br />10:45:20 - проверяем сигнал<br />10:45:20 - Запускаем действие<br />10:45:21 - проверяем сигнал<br />10:45:21 - Запускаем действие<br />10:45:22 - проверяем сигнал<br />10:45:23 - пришла свечка: 10:45:24<br />10:45:23 - проверяем сигнал<br />10:45:23 - Запускаем действие<br />10:45:24 - проверяем сигнал<br />10:45:25 - пришла свечка: 10:45:26<br />10:45:25 - проверяем сигнал<br />10:45:25 - Запускаем действие<br />10:45:26 - проверяем сигнал<br />10:45:27 - проверяем сигнал<br />10:45:28 - проверяем сигнал<br />10:45:29 - проверяем сигнал<br />10:45:30 - пришла свечка: 10:45:28<br />10:45:30 - проверяем сигнал<br />10:45:31 - проверяем сигнал<br />10:45:31 - пришла свечка: 10:45:32<br />10:45:32 - проверяем сигнал<br />10:45:33 - проверяем сигнал<br />10:45:34 - пришла свечка: 10:45:34<br />10:45:34 - проверяем сигнал<br />10:45:35 - проверяем сигнал<br />10:45:35 - пришла свечка: 10:45:36<br />10:45:36 - проверяем сигнал<br />10:45:36 - пришла свечка: 10:45:38<br />10:45:37 - проверяем сигнал<br />10:45:37 - Запускаем действие<br />10:45:38 - проверяем сигнал<br />10:45:38 - пришла свечка: 10:45:40<br />10:45:39 - проверяем сигнал<br />10:45:39 - Запускаем действие<br />10:45:40 - проверяем сигнал<br />10:45:41 - пришла свечка: 10:45:42<br />10:45:41 - проверяем сигнал<br />10:45:41 - Запускаем действие<br />10:45:42 - проверяем сигнал<br />10:45:43 - проверяем сигнал<br />10:45:44 - пришла свечка: 10:45:44<br />10:45:44 - проверяем сигнал<br />10:45:45 - проверяем сигнал<br />10:45:46 - проверяем сигнал<br />10:45:47 - проверяем сигнал<br />10:45:47 - пришла свечка: 10:45:46<br />10:45:48 - проверяем сигнал<br />10:45:49 - проверяем сигнал<br />10:45:50 - пришла свечка: 10:45:50<br />10:45:50 - проверяем сигнал<br />10:45:50 - пришла свечка: 10:45:52<br />10:45:51 - проверяем сигнал<br />10:45:51 - Запускаем действие<br />10:45:52 - проверяем сигнал</div></div>
Copyright @ StockSharp Platform LLC 2010 - 2024