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

HistoryEmulationConnector для двух инструментов
Atom
05.07.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

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


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

Спасибо:

Дмитрий_

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


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 список инструментов?

Спасибо:

Support

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


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

Спасибо:

Дмитрий_

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


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

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

Спасибо:

Support

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


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

Спасибо:

Дмитрий_

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


Снимок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)
Спасибо:

Дмитрий_

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


Возможно, я что-то путаю с созданием коннектора 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-х - нет

Спасибо:

Support

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


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

Спасибо:

Support

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


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

Спасибо:

Дмитрий_

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


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

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

Снимок.PNG 73 KB (966)
Спасибо:
1 2  >

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

loading
clippy