﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Корректная работа с событийной моделью на примере простого алгоритма</title>
  <id>~/topic/3502/korrektnaya-rabota-s-sobytiinoi-modelyu-na-primere-prostogo-algoritma/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-05T21:22:59Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3502" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/24821/</id>
    <title type="text"> - Доктор, когда я вот так делаю, у меня вот здесь болит - что делать? - Не делайте так!</title>
    <published>2013-03-26T13:16:01Z</published>
    <updated>2013-03-26T13:16:01Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;- Доктор, когда я вот так делаю, у меня вот здесь болит - что делать?&lt;br /&gt;- Не делайте так!&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24815/</id>
    <title type="text">Спасибо за ответ. Какие принципы борьбы с подобными вещами существуют?</title>
    <published>2013-03-26T12:32:19Z</published>
    <updated>2013-03-26T12:32:19Z</updated>
    <author>
      <name>Андрей Шабанов</name>
      <uri>https://stocksharp.ru/users/16691/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Спасибо за ответ. Какие принципы борьбы с подобными вещами существуют?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24787/</id>
    <title type="text">Доброго времени суток. Начал знакомиться с событийной моделью в S#. Чтобы разобраться как все работа...</title>
    <published>2013-03-25T19:31:50Z</published>
    <updated>2013-03-26T12:01:32Z</updated>
    <author>
      <name>Андрей Шабанов</name>
      <uri>https://stocksharp.ru/users/16691/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Доброго времени суток. Начал знакомиться с событийной моделью в S#.&lt;br /&gt;Чтобы разобраться как все работает решил реализовать простой алгоритм, который выглядит следующим образом.&lt;br /&gt;На вход дается два параметра CurrentMidPrice и Step.&lt;br /&gt;Робот выставляет две заявки на куплю и на продажу (по цене CurrentPrice+Step и СurrentPrice-Step)&lt;br /&gt;Далее если произошла сделка на покупку то оставшаяся заявка снимается, CurrentPrice-=Step и алгоритм повторяется. Если произошла сделка на продажу то CurrentPrice+=Step соответственно.&lt;br /&gt;&lt;br /&gt;В моем понимании код стратегии выглядит примерно так:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

 class Mesh:Strategy
    {
        public decimal Step;
        public decimal CurrentMidPrice;
    
        protected override void OnStarted()
        {
           Security.WhenMarketDepthChanged()
               .Do(() =&amp;gt; SetBidAskOrders(CurrentMidPrice))
                    .Once().Apply(this);
            base.OnStarted();
        }

        public void SetBidAskOrders(decimal price)//выставляем спред шириной 2*Step вокруг цены price
        {
            var h = new SyncObject();
            CancelActiveOrders();
            var sellOrder = this.CreateOrder(OrderDirections.Sell, price + Step);
            var buyOrder = this.CreateOrder(OrderDirections.Buy, price - Step);
            sellOrder.WhenNewTrades()
                     .Sync(h)
                     .Do(t =&amp;gt;
                         {
                             CurrentMidPrice += Step;
                             SetBidAskOrders(CurrentMidPrice);
                         })
                     .Once().Apply(this);

            buyOrder.WhenNewTrades()
                    .Sync(h)
                    .Do(t =&amp;gt;
                        {
                            CurrentMidPrice -= Step;
                            SetBidAskOrders(CurrentMidPrice);
                        })
                    .Once().Apply(this);
            lock (h)
            {
                RegisterOrder(sellOrder);
                RegisterOrder(buyOrder);
            }
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Теперь суть вопроса. В целом алгоритм работает  как ему и положено но если выставить Step=минимальный шаг цены то из-за задержек. В какой-то момент он начинает множить заявки выставлять по 2-3 спреда и не отменять те заявки которые висят в терминале. Хотя CancelOrders ему полагается делать на каждую сделку.&lt;br /&gt;&lt;br /&gt;Очевидно можно вводить флаги и останавливать работу всего алгоритма пока мы на каждый чих не получим возвратный чих от биржи, но я хотел бы в столь простом учебном примере обойтись без лишних костылей. вопрос какие вообще существуют пути решения проблемы транзакционости и синхронизации в такого рода роботах. Надо усложнять код или может я что-то проглядел в документации/подходах.&lt;br /&gt;&lt;br /&gt;Спасибо.&lt;br /&gt;(проверял на тестовом квике, есть плаза и это первое решение естественно но она не решает проблему устойчивости событийного алгоритма к задержкам)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24803/</id>
    <title type="text">Похоже, машинка не поспевает за рынком и перед локом формируется необработанная очередь. &amp;quot;Простой&amp;quot; а...</title>
    <published>2013-03-26T09:23:29Z</published>
    <updated>2013-03-26T09:23:29Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Похоже, машинка не поспевает за рынком и перед локом формируется необработанная очередь.&lt;br /&gt;&amp;quot;Простой&amp;quot; алгоритм - это, получается, злобный HFT со всеми техническими издержками.&lt;br /&gt;Наверное.  </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>