Ошибка построения стакана для RIH3@RTS
Стакан создает сам робот (ver 4.1.8)
и затем такая ошибка циклически выскакивает.
Что бы это могло значить:
Code
2013/03/13 15:09:59.169|Debug |RealTimeEmulationTrader`1|тут поставлена точка остановки по ошибке
2013/03/13 15:09:59.372| |QuikTrader|Экспорт запущен.
2013/03/13 15:10:25.772|Error |QuikTrader|System.InvalidOperationException: Ошибка построения стакана для RIH3@RTS. ---> System.ArgumentException: Элемент с тем же ключом уже был добавлен.
в System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
в System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
в StockSharp.Quik.QuikTrader.#=qjrOBFov$lIae$ZMCQLx7P1fQAe2X2s16$DxZRnv$aqU=.#=qzvbLwKmGOZP8Mn3VANwmO7j2JOolfd6kGP3G5If$W6A=.#=qoBmyAYCfRFCH40f$3yGW_A==(IList`1 #=qRHjMyjnBoxoiZTuH4AXEyA==, Func`2 #=qIQV1FWrBPFefG1SSxNmAjA==)
в #=qU8C8kAMUmJ0kPIeEJrF68f3NMymXDukMNgL4Dc7ffmr7PRgVzknJ3atY_n0PucT4.#=qB09_IBYvsxLb_dLzMi2NWQ==(DdeTable #=qOgXoydWCvsq2gXlddKoo0w==, IList`1 #=qMeYWUEb44NrXcAvbPuNfiQ==, Action`2 #=qolGBgTssErk3vXo538xxsQ==, Action`1 #=qIfmNdbFGgLtG9ybpXuosbQ==, Boolean #=qe3W9$GyIKMHUi59wvLuQeA==)
--- Конец трассировки внутреннего стека исключений ---
в StockSharp.Quik.QuikTrader.#=qjrOBFov$lIae$ZMCQLx7P1fQAe2X2s16$DxZRnv$aqU=.#=qzvbLwKmGOZP8Mn3VANwmO7j2JOolfd6kGP3G5If$W6A=.#=qg7jlPQQbjd3ga0fXSfzAPA==(Exception #=q7L4EpKXX1uzdIPMI_NaJKw==)
в #=qU8C8kAMUmJ0kPIeEJrF68f3NMymXDukMNgL4Dc7ffmr7PRgVzknJ3atY_n0PucT4.#=qB09_IBYvsxLb_dLzMi2NWQ==(DdeTable #=qOgXoydWCvsq2gXlddKoo0w==, IList`1 #=qMeYWUEb44NrXcAvbPuNfiQ==, Action`2 #=qolGBgTssErk3vXo538xxsQ==, Action`1 #=qIfmNdbFGgLtG9ybpXuosbQ==, Boolean #=qe3W9$GyIKMHUi59wvLuQeA==)
в StockSharp.Quik.QuikTrader.#=qjrOBFov$lIae$ZMCQLx7P1fQAe2X2s16$DxZRnv$aqU=.#=qlN2RGV_nOu2izbvUPp1GHQ==(Security #=qskBctfGFaOoCaDExIEMlfA==)
в StockSharp.Algo.BaseTrader.ProcessSecurityAction(String securityId, Object nativeSecurityId, Action`1 action, Boolean ignoreIfNotExist)
в StockSharp.Quik.QuikTrader.#=qjrOBFov$lIae$ZMCQLx7P1fQAe2X2s16$DxZRnv$aqU=.#=qu4gTMGq$3yH4Axl_FWkd5w==()
в StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)
вот например такой простой код дает эту ошибку:
Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Diagnostics;
using MessageBox = System.Windows.MessageBox;
using System.Threading;
using System.Linq;
using System.Xml;
using Ecng.Common;
using Ecng.Collections;
using Ecng.Xaml;
using Ecng.ComponentModel;
using StockSharp.BusinessEntities;
using StockSharp.Algo.Reporting;
using StockSharp.Quik;
using StockSharp.Algo;
using StockSharp.Xaml;
using StockSharp.Logging;
using StockSharp.Algo.Testing;
namespace test
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private RealTimeEmulationTrader<QuikTrader> _trader;
//private QuikTrader _trader;
private MonitorWindow monitor;
private LogManager _logManager;
public MainWindow()
{
InitializeComponent();
monitor = new MonitorWindow();
monitor.Show();
_logManager = new LogManager();
var fileListener = new FileLogListener("{0}_{1:00}_{2:00}.txt".Put(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day));
_logManager.Listeners.Add(fileListener);
_logManager.Listeners.Add(new GuiLogListener(monitor));
_trader = new RealTimeEmulationTrader<QuikTrader>(new QuikTrader(QuikTerminal.GetDefaultPath()) { IsAsyncMode = true, SupportManualOrders = true });
_trader.UnderlyingTrader.SupportManualOrders = true;
_trader.UnderlyingTrader.IsAsyncMode = true;
//_trader = new QuikTrader(QuikTerminal.GetDefaultPath()) { IsAsyncMode = true, SupportManualOrders = false };
_trader.UnderlyingTrader.LogLevel = LogLevels.Debug;
_logManager.Sources.Add(_trader.UnderlyingTrader);
_trader.LogLevel = LogLevels.Debug;
_logManager.Sources.Add(_trader);
//_trader.LogLevel = LogLevels.Debug;
//_logManager.Sources.Add(_trader);
_trader.ProcessDataError += (ex) =>
{
_trader.AddDebugLog("тут поставлена точка остановки по ошибке");
};
_trader.Connected += () =>
{
_trader.AddDebugLog("Соединились");
};
// запускаем экспорт по DDE
_trader.Connect();
while (!_trader.IsConnected) { }
_trader.StartExport();
string sec = "RIH3@RTS"; // создаем временную текстовую переменную и присваиваем ей название выбраного елемента (напр. RIH3@RTS)
sec = sec.Replace("@RTS", string.Empty); // вырезаем хвост "@RTS"
Security ss = _trader.Securities.First(s => s.Code == sec && s.Type == SecurityTypes.Future); // присваеваем переменной _security имя выбраного инструмента
_trader.RegisterMarketDepth(ss);
while (_trader.RegisteredMarketDepths.IsNull()) { }
_trader.UnRegisterMarketDepth(ss);
_trader.Disconnect();
_trader.Dispose();
}
}
}