﻿<?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">whenpartiallymatched. StockSharp</title>
  <id>https://stocksharp.ru/handlers/atom.ashx?category=tag&amp;id=whenpartiallymatched&amp;type=community</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-30T06:57:53Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=tag&amp;id=whenpartiallymatched&amp;type=community" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/topic/8327/</id>
    <title type="text">Частичное исполнение лимитной заявки</title>
    <published>2017-06-19T13:08:18Z</published>
    <updated>2017-06-20T14:18:17Z</updated>
    <author>
      <name>Knup</name>
      <uri>https://stocksharp.ru/users/50721/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="WhenNewTrade" />
    <category term="WhenPartiallyMatched" />
    <category term="лимитная заявка" />
    <category term="частичное исполнение" />
    <content type="html">Добрый день,&lt;br /&gt;&lt;br /&gt;Подскажите, пожалуйста, как на S# корректно реализовать следующий алгоритм: &lt;br /&gt;1) Выставляем лимитную заявку на покупку&lt;br /&gt;2) При каждом частичном исполнении заявки выставляется тейк-профит в виде противоположной лимитной заявки. Тейк-профит должен быть всегда один, т.е. при каждом новом частичном исполнении заявки старый тейк-профит отменяется, новый же с сальдированным большим объёмом - выставляется. И так, пока заявка на покупку полностью не исполнится. Т.е. в итоге после исполнения лимитной заявки на покупку из n лотов должна быть одна противоположная заявка на продажу (тейк-профит) тоже из n лотов.  &lt;br /&gt;&lt;br /&gt;Делаю примерно так через WhenNewTrade: &lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;br /&gt;...&lt;br /&gt;_orderOpen.WhenNewTrade(Connector)&lt;br /&gt;                .Do(o =&amp;gt;&lt;br /&gt;                {&lt;br /&gt;                    // фиксируем набранную позицию&lt;br /&gt;                    _summVolumeOpen += o.Trade.Volume;&lt;br /&gt;                    _summPriceVolumeOpen += _orderdata.OpenPrice * o.Trade.Volume;&lt;br /&gt;&lt;br /&gt;                    // Создать заявку тейк-профит по набранной позиции&lt;br /&gt;                    CreateTakeProfitOrderSell(_summVolumeOpen);&lt;br /&gt;                })&lt;br /&gt;                .Apply(this);&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;        private void CreateTakeProfitOrderSell(decimal curvol)&lt;br /&gt;        {&lt;br /&gt;            lock (_syncObjSafe)&lt;br /&gt;            {&lt;br /&gt;                if (_orderClose != null &amp;amp;&amp;amp; _orderClose.State == OrderStates.Active)&lt;br /&gt;                    CancelOrder(_orderClose);&lt;br /&gt;                &lt;br /&gt;                _orderClose = this.SellAtLimit(_orderdata.ClosePrice, curvol);&lt;br /&gt;                &lt;br /&gt;                ...&lt;br /&gt;&lt;br /&gt;                RegisterOrder(_orderClose);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Проблема в том, что при исполнении лимитной заявки по частям WhenNewTrade вызывается быстро несколько раз так, что заявка тейк-профит _orderClose не успевает принять состояние Active и поэтому не отменяется. WhenPartiallyMatched, как я понял, тоже не решает проблему - это правило вызывается столько же раз, сколько и WhenNewTrade. В общем, в результате вместо одного тейк-профита у меня выставляется сразу несколько, что неправильно (все заявки кроме последней должны быть отменёнными).  &lt;br /&gt;</content>
  </entry>
</feed>