← Zurück

Корректная настройка исторического коннектора

Добрый день.

Как заставить коннектор HistoryEmulationConnector

_connector = new HistoryEmulationConnector(new[] { sec1, sec2 }, ConfigManager.TryGetService<IPortfolioProvider>().Portfolios, new StorageRegistry()) , LogLevel = LogLevels.Info, CreateDepthFromOrdersLog = true, CreateTradesFromOrdersLog = true };
  1. Реагировать на изменение стакана, используя исторический ордер лог? CreateDepthFromOrdersLog = true не помогает. Подсказку про MarketDataMessage не понимаю как применить. Capture.PNG
  2. Реагировать на новые сделки, используя исторический ордер лог? CreateTradesFromOrdersLog = true не помогает. Аналогично с подсказкой про MarketDataMessage.
  3. Реагировать на новые сделки, используя исторический стакан заявок?

Kommentare (8)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Support
Support

Добрый день

Вы можете подписаться на стакан через метод https://doc.stocksharp.ru/html/M_StockSharp_Algo_Connector_RegisterMarketDepth.htm указав в нем режим Build.

Дмитрий_
Дмитрий_ Autor

Support: Добрый день

Вы можете подписаться на стакан через метод https://doc.stocksharp.ru/html/M_StockSharp_Algo_Connector_RegisterMarketDepth.htm указав в нем режим Build.

Для стакана срабатывают правила WhenMarketDepthChanged и WhenNewTrade, если прописать _connector.RegisterMarketDepth(security) и иметь историю по стакану.

Возможно неточно выразился. У меня история ордер лога. Прописано _connector.RegisterOrderLog(security); _connector.RegisterMarketDepth(security) (пробовал и _connector.RegisterMarketDepth(security, buildMode: MarketDataBuildModes.Build))

Для ордер лога срабатывает только правило WhenNewOrderLogItem, но не срабатывают правила WhenMarketDepthChanged и WhenNewTrade.

  1. Получается - историю ордер лога нужно конвертнуть в историю стакана для срабатывания правил WhenMarketDepthChanged и WhenNewTrade?
  2. Имея только ордер лог, правила WhenMarketDepthChanged и WhenNewTrade недосягаемы?
Support
Support

Пришлите пожалуйста ваш код.

Дмитрий_
Дмитрий_ Autor

Support: Пришлите пожалуйста ваш код. Добрый день. Код отправил на почту.

Дмитрий_
Дмитрий_ Autor

Коннектор

var pairTradingStrategy = Strategy as PairTradingStrategy;

var storageRegistry = new StorageRegistry { DefaultDrive = new LocalMarketDataDrive(MainWindow.Instance.PathHistory) };

        _connector = new HistoryEmulationConnector(new[] { pairTradingStrategy.FirstSecurity, pairTradingStrategy.SecondSecurity },
            ConfigManager.TryGetService<IPortfolioProvider>().Portfolios,
            new StorageRegistry())
        {
            HistoryMessageAdapter =
            {
                StartDate = BeginDateTime.ChangeKind(DateTimeKind.Utc),
                StopDate = EndDateTime.ChangeKind(DateTimeKind.Utc),
                StorageRegistry = storageRegistry,
                StorageFormat = StorageFormat 
            },
            LogLevel = LogLevels.Info,
            CreateDepthFromOrdersLog = true,
            CreateTradesFromOrdersLog = true
        };

_connector.NewSecurity += Connector_NewSecurity;

private void Connector_NewSecurity(Security security) { _connector.RegisterOrderLog(security); _connector.RegisterMarketDepth(security, buildMode: MarketDataBuildModes.Build); }

_connector.LookupSecuritiesResult += _connector_LookupSecuritiesResult;

private void _connector_LookupSecuritiesResult(SecurityLookupMessage arg1, IEnumerable<Security> arg2, Exception arg3) { if (Strategy.ProcessState != ProcessStates.Stopped) return;
        Strategy.Start();
        _connector.Start();
    }

В PairTradingStrategy OnStarted()

protected override void OnStarted() { FirstSecurity.WhenMarketDepthChanged(Connector) .Do(ProcessMarketDepth) .Apply(this);
        SecondSecurity.WhenMarketDepthChanged(Connector)
            .Do(ProcessMarketDepth)
            .Apply(this);

        FirstSecurity.WhenNewOrderLogItem(Connector)
            .Do(ProcessNewOrderLogItem)
            .Apply(this);

        FirstSecurity.WhenNewTrade(Connector)
            .Do(ProcessNewTrade)
            .Apply(this);

        base.OnStarted();
    }

private void ProcessNewTrade(Trade obj)

    private void ProcessNewOrderLogItem(OrderLogItem obj)
    {
    }

    private void ProcessMarketDepth(MarketDepth marketDepth)
    {

}

Support
Support

Добрый день

Мы протестировали вами ранее присланный ОЛ на нашем примере SampleHistoryTesting и без каких либо модификаций он показал и стаканы и тиковые сделки (из которых были построены свечи для стратегии). Поэтому для исторического коннектора указание режима build не требуется.

Дмитрий_
Дмитрий_ Autor

Support: Добрый день

Мы протестировали вами ранее присланный ОЛ на нашем примере SampleHistoryTesting и без каких либо модификаций он показал и стаканы и тиковые сделки (из которых были построены свечи для стратегии). Поэтому для исторического коннектора указание режима build не требуется.

В проект SampleHistoryTestingGitHub добавил на строки 506 и 507

            connector.MarketDepthChanged += Connector_MarketDepthChanged;
            connector.NewTrade += Connector_NewTrade;

И данные события сработали: Connector_MarketDepthChanged - 2 раза Connector_NewTrade - 1 раз

Как такое может быть?

Видео приложено. запись_1.webm

Support
Support

Добрый день,

Попробуйте, пожалуйста, данный код

connector.NewOrderLogItem += t => Debug.WriteLine(t);

В случае тестирования на вашем ОЛ событие вызывается постоянно, и через него OrderLogItem.Order.Time можно понять текущее время на истории.