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


Стакан создает сам робот (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();


        }
     }
}

Теги:


Спасибо:




2 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 13.03.2013
Ответить


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

kahuna

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


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


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

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


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

loading
clippy