﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">HistoryEmulationConnector, MyTrade, Как исполняются заявки</title>
  <id>~/topic/9823/historyemulationconnector-mytrade-kak-ispolnyayutsya-zayavki/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-13T17:55:05Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=9823" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/44834/</id>
    <title type="text">Добрый день Цены исполнения генерируются рандомно на основании цен на истории. Алгоритм так же влияе...</title>
    <published>2018-08-22T13:43:14Z</published>
    <updated>2018-08-22T13:43:14Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.com/users/97869/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день&lt;/p&gt;
&lt;p&gt;Цены исполнения генерируются рандомно на основании цен на истории. Алгоритм так же влияет на генерируемую историю. Это сделано специально, чтобы каждый раз выдавать разные результаты, и не давать возможность подгонять алгоритм под историю.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/44830/</id>
    <title type="text">Здравствуйте! Разбирался как эмулятор исполняет заявки и получил интересную ситуацию. В csv файле им...</title>
    <published>2018-08-22T10:01:08Z</published>
    <updated>2018-08-22T10:24:58Z</updated>
    <author>
      <name>tsuranov</name>
      <uri>https://stocksharp.com/users/101656/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Здравствуйте!&lt;/p&gt;
&lt;p&gt;Разбирался как эмулятор исполняет заявки и получил интересную ситуацию.
В csv файле имеются следующие сделки:&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;14147947	+00:00		13476.5	200	Buy
14148513	+00:00		13476	198	Sell
14148580	+00:00		13476	2000	Sell
14148791	+00:00		13476.5	100	Buy
14149148	+00:00		13476.5	51	Buy
14149713	+00:00		13476	391	Sell
14150048	+00:00		13425	5386	Buy
14150140	+00:00		13424.5	500	Sell
14150574	+00:00		13425	2000	Buy
14150765	+00:00		13425	15000	Buy
14151864	+00:00		13431	8000	Buy
14152042	+00:00		13431	200	Buy
14152158	+00:00		13431	807	Buy
14152213	+00:00		13431	4800	Buy&lt;/summary&gt;
&lt;/details&gt;
&lt;p&gt;В обработчике на NewTrade в момент прихода сделки под номером 14149713 с ценой 13476 регистрирую лимитную заявку(=ордер) на покупку по цене 13461 (была такая ситуация при тестировании и я воссоздал в упрощенном виде, чтобы понять, что происходит)
При этом генерируется НОВАЯ сделка с ценой 13425.2 (которой нет в файле, понятно, что это делается намеренно, по какому-то алгоритму и это наша сделка - сделка стратегии)
Как, возможно, уже понятно, заявка исполнилась по цене 13425,2 (как видно из скриншота в дебаг-окне).
Подскажите, пожалуйста, какая вообще логика у исполнения заявок вообще, и откуда взялась цена исполнения 13425.2 в частности? (полагаю, что бралось среднее из чего-то, но вот чего, какой алгоритм)&lt;/p&gt;
&lt;p&gt;исходный код:&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;using System;&lt;/summary&gt;
&lt;p&gt;using Ecng.Common;&lt;/p&gt;
&lt;p&gt;using StockSharp.Algo.Candles;
using StockSharp.Algo.Storages;
using StockSharp.Algo.Strategies;
using StockSharp.Algo.Testing;
using StockSharp.BusinessEntities;
using StockSharp.Logging;
using StockSharp.Messages;&lt;/p&gt;
&lt;p&gt;namespace ConsoleApp1
{
class Program
{
private static HistoryEmulationConnector _connector;
private static CandleSeries _candleSeries;
private static int _trades_count=0;
private static Strategy _strategy;
private static Order _order;
private static MyTrade _myTrade;
private const string _logFile = &amp;quot;log.txt&amp;quot;;
private static LogManager logManager = new LogManager();&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    static void Main(string[] args)
    {
        var storageRegistry = new StorageRegistry { DefaultDrive = new LocalMarketDataDrive(@&amp;quot;D:\StockSharp\Storage\&amp;quot;.ToFullPath()) };
        var security = new Security { Id = &amp;quot;XBTUSD@BMEX&amp;quot;, Code = &amp;quot;XBTUSD&amp;quot;, Board = ExchangeBoard.Bitmex };
        var portfolio = new Portfolio { Name = &amp;quot;test account&amp;quot;, BeginValue = 1000000 };
        logManager.Listeners.Add(new FileLogListener(_logFile));

        _connector = new HistoryEmulationConnector(new[] { security }, new[] { portfolio })
        {
            HistoryMessageAdapter =
            {
                StorageRegistry = storageRegistry,
                StorageFormat = StorageFormats.Csv,
                StartDate = new DateTimeOffset(2018, 1, 1, 1, 41, 49, TimeSpan.FromTicks(0)),
                StopDate = new DateTimeOffset(2018, 1, 2, 0, 0, 0, TimeSpan.FromTicks(0))
            },
            LogLevel = LogLevels.Info
        };
        logManager.Sources.Add(_connector);

        _candleSeries = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromMinutes(1))
        {
            BuildCandlesMode = MarketDataBuildModes.Build,
            BuildCandlesFrom = MarketDataTypes.Trades,
        };

        _connector.NewSecurity += Connector_NewSecurity;
        _connector.NewTrade += Connector_NewTrade;
        _connector.NewMyTrade += (t)=&amp;gt; _myTrade=t;

        _strategy = new Strategy()
        {
            Connector = _connector,
            Security = security,
            Portfolio = portfolio
        };

        _connector.Connect();

        while (Console.ReadKey().KeyChar.ToString() != &amp;quot;z&amp;quot;)
        {
            Console.WriteLine($&amp;quot;Кол-во сделок = {_trades_count}&amp;quot;);
        };

    }

    private static void Connector_NewSecurity(Security security)
    {
        _connector.RegisterTrades(security);
        //_connector.SubscribeCandles(_candleSeries);
        _connector.Start();
    }

    private static void Connector_NewTrade(Trade trade)
    {
        _trades_count++;
        if (_trades_count == 3)
        {
            _order = _strategy.CreateOrder(Sides.Buy, 13461, 1);
            _connector.RegisterOrder(_order);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/details&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>