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

Корректная настройка исторического коннектора
Atom
04.02.2019
Дмитрий_


Добрый день.

Как заставить коннектор HistoryEmulationConnector [spoiler]_connector = new HistoryEmulationConnector(new[] { sec1, sec2 }, ConfigManager.TryGetService().Portfolios, new StorageRegistry()) , LogLevel = LogLevels.Info, CreateDepthFromOrdersLog = true, CreateTradesFromOrdersLog = true };[/spoiler]

  1. Реагировать на изменение стакана, используя исторический ордер лог? CreateDepthFromOrdersLog = true не помогает. Подсказку про MarketDataMessage не понимаю как применить. [img=108528]Capture.PNG[/img]
  2. Реагировать на новые сделки, используя исторический ордер лог? CreateTradesFromOrdersLog = true не помогает. Аналогично с подсказкой про MarketDataMessage.
  3. Реагировать на новые сделки, используя исторический стакан заявок?
Capture.PNG 14 KB (1077)


Support

Фотография
Дата: 04.02.2019
Ответить


Добрый день

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

Спасибо:

Дмитрий_

Фотография
Дата: 05.02.2019
Ответить


[quote=Support;46563]Добрый день

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

Для стакана срабатывают правила 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

Фотография
Дата: 05.02.2019
Ответить


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

Спасибо:

Дмитрий_

Фотография
Дата: 05.02.2019
Ответить


Коннектор [spoiler]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
        };[/spoiler]

_connector.NewSecurity += Connector_NewSecurity; [spoiler]private void Connector_NewSecurity(Security security) { _connector.RegisterOrderLog(security); _connector.RegisterMarketDepth(security, buildMode: MarketDataBuildModes.Build); }[/spoiler]

_connector.LookupSecuritiesResult += _connector_LookupSecuritiesResult; [spoiler]private void _connector_LookupSecuritiesResult(SecurityLookupMessage arg1, IEnumerable arg2, Exception arg3) { if (Strategy.ProcessState != ProcessStates.Stopped) return;

        Strategy.Start();
        _connector.Start();
    }[/spoiler]

В PairTradingStrategy OnStarted() [spoiler] 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)
    {

} [/spoiler]

Спасибо:

Дмитрий_

Фотография
Дата: 07.02.2019
Ответить


[quote=Support;46585]Пришлите пожалуйста ваш код.[/quote] Добрый день. Код отправил на почту.

Спасибо:

Support

Фотография
Дата: 07.02.2019
Ответить


Добрый день

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

Спасибо:

Дмитрий_

Фотография
Дата: 07.02.2019
Ответить


[quote=Support;46618]Добрый день

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

В проект SampleHistoryTestingGitHub добавил на строки 506 и 507 [spoiler] connector.MarketDepthChanged += Connector_MarketDepthChanged; connector.NewTrade += Connector_NewTrade;[/spoiler]

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

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

Видео приложено. [url=108560]запись_1.webm[/url]

запись_1.webm 7 MB (923)
Спасибо:

Support

Фотография
Дата: 14.02.2019
Ответить


Добрый день,

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

[code]connector.NewOrderLogItem += t => Debug.WriteLine(t);[/code]

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

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy