HistoryEmulationConnector для двух инструментов

HistoryEmulationConnector для двух инструментов
Atom
7/5/2017
Дмитрий_


Здравствуйте. Как правильно создать HistoryEmulationConnector для двух инструментов, если candleManager.Start(this ICandleManager manager, CandleSeries series) только для одного инструмента var security1 = new Security { Id = "SBER@TQBR", Code = "SBER", Board = _exchangeInfoProvider.GetOrCreateBoard("TQBR") }; var candleManager = new CandleManager((Connector)connector);

var seriesSecurity1 = new CandleSeries(typeof(TimeFrameCandle), security1, timeFrame) { BuildCandlesMode = emulationInfo.UsedCandleTimeFrame == null ? BuildCandlesModes.Build : BuildCandlesModes.Load };

var portfolio = new Portfolio { Name = "Test Arbitrage Account", BeginValue = 1000000, };

var connector = new HistoryEmulationConnector(new[] { security1, security2 }, new[] ) { EmulationAdapter = { Emulator = { Settings = { // match order if historical price touched our limit order price. // It is terned off, and price should go through limit order price level // (more "severe" test mode) MatchOnTouch = false, } } },

                CreateDepthFromOrdersLog = emulationInfo.IsUseOrderLog,
                CreateTradesFromOrdersLog = emulationInfo.IsUseOrderLog,

                HistoryMessageAdapter =
                {
                    StorageRegistry = storageRegistry,

					// set history range
					StartDate = startTime,
                    StopDate = stopTime,

                    OrderLogMarketDepthBuilders =
                    {
                        //{
                        //    secId,
                        //    LocalizedStrings.ActiveLanguage == Languages.Russian
                        //        ? (IOrderLogMarketDepthBuilder)new PlazaOrderLogMarketDepthBuilder(secId)
                        //        : new ItchOrderLogMarketDepthBuilder(secId)
                        //}
                    }
                },

                // set market time freq as time frame
                MarketTimeChangedInterval = timeFrame,
            };

candleManager.Start(seriesSecurity1); - исключение (An exception of type 'System.ArgumentException' occurred in StockSharp.Algo.dll but was not handled in user code

Additional information: Серия TimeFrameCandle_SBER@TQBR_00-01-00 не была остановлена.)



1 2  >
Support

Avatar
Date: 7/6/2017
Reply


В конструктор HistoryEmulationConnector передаете список инструментов... Создаете CandleSeries для каждого инструмента. Вызываете метод CandleManager.Start(series) для каждой серии..

Thanks:

Дмитрий_

Avatar
Date: 7/6/2017
Reply


var connector = new HistoryEmulationConnector(new List<Security> { security1, security2 }, new[] ) или var connector = new HistoryEmulationConnector(new[] { security1, security2 }, new[] ) в методе candleManager.Start(seriesSecurity1); появляется исключение (An exception of type 'System.ArgumentException' occurred in StockSharp.Algo.dll but was not handled in user code Additional information: Серия TimeFrameCandle_SBER@TQBR_00-01-00 не была остановлена.)

var connector = new HistoryEmulationConnector(new[] , new[] ) работает.

Как правильно передать в конструктор HistoryEmulationConnector список инструментов?

Thanks:

Support

Avatar
Date: 7/7/2017
Reply


Просто передаете список :List или массив Security[] инструментов...

Thanks:

Дмитрий_

Avatar
Date: 7/7/2017
Reply


И var sec = new Security[] { security1, security2 }; и var sec = new List<Security> { security1, security2 }; var connector = new HistoryEmulationConnector(sec, new[] ) выдаёт всё тоже исключение.

"Просто передаете список :List<Security> или массив Security[] инструментов" - покажите пример кодом, пожалуйста

Thanks:

Support

Avatar
Date: 7/10/2017
Reply


Ищите какое знание Вы не присвоили... Исключение внимательно посмотрите, может там "нулевое" свойство упоминается... Может в инструменте площадку не присвоили...

Thanks:

Дмитрий_

Avatar
Date: 7/10/2017
Reply


Снимок1.PNGСнимок2.PNG

var sec = new List<Security> { security1, security2 }; var connector = new HistoryEmulationConnector(sec, new[] ) var seriesSecurity1 = new CandleSeries(typeof(TimeFrameCandle), security1, timeFrame) { BuildCandlesMode = emulationInfo.UsedCandleTimeFrame == null ? BuildCandlesModes.Build : BuildCandlesModes.Load };

Причём, если использовать только security1, где var sec = new List<Security> { security1/*, security2 */}; var connector = new HistoryEmulationConnector(sec, new[] ) или только security2 var sec = new List<Security> { /*security1, */security2 }; var connector = new HistoryEmulationConnector(sec, new[] ) то исключения не возникает.

Покажите пример кода, где успешно запускается candleManager.Start(series), в котором var candleManager = new CandleManager((Connector)connector); где connector создан для двух и более инструментов.

Снимок1.PNG 69 KB (1036) Снимок2.PNG 143 KB (925)
Thanks:

Дмитрий_

Avatar
Date: 7/11/2017
Reply


Возможно, я что-то путаю с созданием коннектора var connector = new HistoryEmulationConnector(sec, new[] ) { EmulationAdapter = { Emulator = { Settings = { // match order if historical price touched our limit order price. // It is terned off, and price should go through limit order price level // (more "severe" test mode) MatchOnTouch = false, } } },

                CreateDepthFromOrdersLog = emulationInfo.IsUseOrderLog,
                CreateTradesFromOrdersLog = emulationInfo.IsUseOrderLog,

                HistoryMessageAdapter =
                {
                    StorageRegistry = storageRegistry,

					// set history range
					StartDate = startTime,
                    StopDate = stopTime,

                    OrderLogMarketDepthBuilders =
                    {
                        //{
                        //    secId,
                        //    LocalizedStrings.ActiveLanguage == Languages.Russian
                        //        ? (IOrderLogMarketDepthBuilder)new PlazaOrderLogMarketDepthBuilder(secId)
                        //        : new ItchOrderLogMarketDepthBuilder(secId)
                        //}
                    }
                },

                // set market time freq as time frame
                MarketTimeChangedInterval = timeFrame,
            };

Пример создания взят из gitHub Данный для одного инструмента работает, для 2-х - нет

Thanks:

Support

Avatar
Date: 7/11/2017
Reply


Ошибка когда вы серию создаете... Проверьте все ли поля в candleseries инициализированы...

Thanks:

Support

Avatar
Date: 7/11/2017
Reply


Весь код пришлите...

Thanks:

Дмитрий_

Avatar
Date: 7/11/2017
Reply


Поля в candleseries Снимок.PNG

Код пришлю на почту info@stocksharp.com, т.к. он содержит алгоритмы, которые у вас находятся не в открытом доступе

Снимок.PNG 73 KB (966)
Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy