← Zurück

Ошибка построения стакана для RIH3@RTS

Стакан создает сам робот (ver 4.1.8) и затем такая ошибка циклически выскакивает. Что бы это могло значить:


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)

вот например такой простой код дает эту ошибку:


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();


        }
     }
}

War dieses Thema hilfreich?

Thema teilen

Kommentare (2)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

Причину нужно искать в настройках стакана в Квике

kahuna
kahuna Autor

Mikhail Sukhov: Причину нужно искать в настройках стакана в Квике

Странно. Он же сам создается. Настройка потом не меняется. Вот как здесь http://stocksharp.com/doc/ и написано: "Если стакан для необходимого инструмента еще ни разу не окрывался в Quik-е, то QuikTrader самостоятельно создаст окно в терминале и настроит его при вызове метода RegisterMarketDepth из кода программы. Или можно принудительно закрыть стакан в Quik-е и он будет переоткрыт с уже корректными для S# настройками." Получается если стакан удален он может быть переоткрыт с некорректными для S# настройками?

Сдается мне эта беда появилась после вчерашего автоматического обновления Quik-а ver 6.5.2.11