romany4
|
Date: 2/19/2014
В общем, может кому пригодится - надо подключить библиотеку MoreLinq
|
|
Thanks:
|
|
|
|
|
romany4
|
Date: 2/19/2014
|
|
|
|
Появился новый вопрос) при попытке эмуляции (HistoryEmulationConnector) в лог получаю следующее сообщение Code 2013/09/01 10:00:00.000|Error |HistoryEmulationConnector|System.ArgumentOutOfRangeException: Текущее время должно быть в интервале от 09/01/2013 10:00:00 до 02/28/2014 18:00:00. Parameter name: currentTime at StockSharp.Algo.Testing.HistorySessionHolder.UpdateCurrentTime(DateTime currentTime) at StockSharp.Algo.Testing.EmulationMessageAdapter.#=qLQaA57Ra4dqrkkYWb9B60NhvHtkRrXpLgVICuOEhvss=.#=qHTlfjg0Z5e8_hDvXk7IGli_zq2qdrN2Zdl$pKpAbVMw=(HistorySessionHolder #=qtdZDQUFGvWgNAVsZ$b61NQ==) at Ecng.Common.TypeHelper.DoIf[TSource,TDestination](TSource source, Action`1 handler) at StockSharp.Algo.Testing.EmulationMessageAdapter.OnSendInMessage(Message message) at StockSharp.Messages.MessageAdapter`1.OnInMessageProcessor(Message message, IMessageAdapter adapter)
Если посмотреть через дебаг то conectior.currentTime - Date = {01.01.0001 0:00:00} и вся проблема во внутреннем методе UpdateCurrentTime, который при проверке бросает этот эксепшн. Кто-нибудь с таким сталкивался? зы в 4.2.1.7 - проблемы такой не было, эмулирование проходило нормально. свой код для этой версии библиотеки правил с учетом примера SampleHistoryTesting 4.2.2.6
|
|
Thanks:
|
|
|
|
|
romany4
|
Date: 2/19/2014
|
|
|
|
В общем эту проблему обошел следующим путем - просто стал передавать только дату (при этом часы = 00). Т.е. раньше я передавал что-то типа этого в connector.Start(new DateTime(2013, 9, 1, 10, 0, 0), new DateTime(2014, 2, 1, 18, 0, 0) - теперь же просто connector.Start(new DateTime(2013, 9, 1, 0, 0, 0), new DateTime(2014, 2, 1, 0, 0, 0). НО теперь в логе вот что Code 2013/09/02 00:00:00.000| |HistoryEmulationConnector|Изменение состояния эмуляции Stopped -> Starting 2013/09/02 00:00:00.000| |HistoryEmulationConnector|Создан новый портфель test account. 2013/09/02 00:00:00.000| |HistoryEmulationConnector|Изменение состояния эмуляции Starting -> Started 2013/09/01 20:00:00.000|Debug |SS_SBER@QJSIM_test account|Переход из состояния Stopped в Started. 2013/09/01 20:00:00.000| |SS_SBER@QJSIM_test account|Стратегия запущена. [0,-1]. Позиция при старте 0. 2013/09/02 00:00:00.000| |HistoryEmulationConnector|Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для MarketDepth. 2013/09/02 00:00:00.000| |HistoryEmulationConnector|Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для Trades. 2014/02/19 22:38:40.342| |HistoryMessageAdapter|Loading 02.09.2013 0:00:00 Events: 0 2014/02/19 22:38:40.631| |HistoryMessageAdapter|Loading 03.09.2013 0:00:00 Events: 8640
...........
2014/02/19 22:39:11.106| |HistoryMessageAdapter|Loading 25.02.2014 0:00:00 Events: 1520640 2014/02/19 22:39:11.211| |HistoryMessageAdapter|Loading 26.02.2014 0:00:00 Events: 1529280 2014/02/26 23:59:59.999| |HistoryEmulationConnector|Изменение состояния эмуляции Started -> Stopping 2014/02/26 23:59:59.999|Error |HistoryEmulationConnector|System.InvalidOperationException: Подключение в состоянии Connected получило неожиданное сообщение типа 'DisconnectMessage'. 2014/02/26 23:59:59.999| |HistoryEmulationConnector|Изменение состояния эмуляции Stopping -> Stopped
Не могу понять принцип выставления времени. Кто-нибудь может объяснить? А также натолкнуть на мысль причины ошибки "Подключение в состоянии Connected получило неожиданное сообщение типа 'DisconnectMessage'."
|
|
Thanks:
|
|
|
|
|
Bond
|
Date: 2/20/2014
Добрый день! Похоже вы торгуете акции в нерабочее время биржи. Демо-Квик работает по своему расписанию) Отсюда похоже и ошибки. Покажите ваши настройки времени работы робота.
|
|
Thanks:
|
|
|
|
|
romany4
|
Date: 2/21/2014
|
|
|
|
Добрый вечер! Quote:Похоже вы торгуете акции в нерабочее время биржи. Демо-Квик работает по своему расписанию) Отсюда похоже и ошибки. Да. Эмулятор тестирую по вечерам. Демо-квик сейчас не использую. Все данные (свечи, инструменты) беру из бд вот так Code
new Security()
{
Id = security.Code + "@" + security.ExchangeBoardT.Code,
Code = security.Code,
Name = security.Name,
Decimals = security.Decimals,
Class = security.Class,
LastChangeTime = DateTime.Now,
MinLotSize = security.MinLotSize,
MinPrice = security.MinPrice,
MinStepPrice = security.MinStepPrice,
MinStepSize = security.MinStepSize,
Currency = (CurrencyTypes)security.IdsCurrencyTypes,
ExtensionInfo = new Dictionary<object, object> { { "DBIds", security.Id } },
//ExchangeBoard = new ExchangeBoard()
//{
// Code = security.ExchangeBoardT.Code,
// Exchange = new Exchange()
// {
// Name = security.ExchangeBoardT.ExchangeT.Code,
// EngName = security.ExchangeBoardT.ExchangeT.EngName,
// RusName = security.ExchangeBoardT.ExchangeT.RusName,
// TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")
// },
// ExpiryTime = new TimeSpan(),
// IsSupportAtomicReRegister = security.ExchangeBoardT.IsSupportAtomicReRegister,
// IsSupportMarketOrders = security.ExchangeBoardT.IsSupportMarketOrders,
// WorkingTime = new WorkingTime()
//},
ExchangeBoard = ExchangeBoard.MicexJunior
};
На данный момент решил пока использовать ExchangeBoard.MicexJunior. Свечи так Code
new TimeFrameCandle()
{
OpenPrice = candle.Open,
HighPrice = candle.High,
LowPrice = candle.Low,
ClosePrice = candle.Close,
TimeFrame = timeFrameCandle,
OpenTime = time,
CloseTime = time + timeFrameCandle,
TotalVolume = candle.Volume,
Security = security,
State = CandleStates.Finished
};
Данные из бд корректны (основываюсь на том что в предыдущих версиях проблем не было и график худо-бедно строился) Если принять, что проблема во времени выполнения, когда биржа закрыта, то предположу, что текущее время берется из системного, однако, перевод часов в нужный период не дал результата) или я что-то не так делаю?)
|
|
Thanks:
|
|
|
|