Попытка записать неупорядоченные стаканы.

Попытка записать неупорядоченные стаканы.
Atom
07.12.2012
Garry


Помогите советом, пожалуйста! Пытаюсь писать сделки и стаканы с американского рынка через StockSharp API, на лету формирую классы Trade и MarketDepth добавляю их в List и скидываю через IMarketDataStorage.Save. До поры до времени все пишится отлично, но периодически вылазает следующий эксепшн:

System.ArgumentException: Попытка записать неупорядоченные стаканы. (или бывает сделки) Parameter name: time at #=qw1XTJ7dV75pMzOz0hBo$siihDG5OZdJczlcSqCrqHeUyxlEsmsAtnXp2udZg_U2NbEZ$ip5_9tsblQGkl18bdw==.#=qlTbzCDxbsFRMhdXeRnHLcA==(List1 #=qEZ$zSTu6NTimWrkeQ4ymLA==, DateTime #=qLHkFpgenDVQAbq_VEalrLw==, DateTime #=q1YTcmQ0aSkITnw2_u9_JGw==, String #=qRJWXZ_iDXJ5e6CyFySggxw==) at #=qUW3a2a_zU_oArSSOiBn3FLpJvD1is2zltkAN_lWp2$4QggKmPLesfcTNGEJsfTBj.#=q0XPS289_jbJQep3DL8Cfqg==(List1 #=qkTgCSAlcZNPcZEy9AZBFuw==, IEnumerable1 #=qqG_QHQ$oLWGmKV91zoKX7g==, #=qQE3gxfWjLob0eT4xQKg$lvKLXN_F2oep$WGSiQW9e_pG7GggJyb9DKRw7jrVdvBV #=qkKGlqzlXkfX$fJnU2J9jjg==) at #=qa_4zGoLcsro_feFbb0XM9_BlRhaxasQ1UrzoL3NsS5BLfjz_CcaLI5iqpy27MHoyWvADyOilwiIL8FNu4Ao2ig==.#=qwYoBzTre3Rqwrq$18odFFwAs16vZvPFKnBVlKACndM$R7_7lh23LQejqEr6XeJEHQS6AOtFMS5dX_4$Y7MoiGxjg027VUhTmQo_TuK$K4As=(IEnumerable1 #=qLQLfos6mvzvB9rAhsnoxLg==, #=qeTDkbpr2eeOjCLO$BGmaYqB0$_0v2N3UDYHi11JN7I8ARwjQbcOqhUBuEc4nnFMw #=qt22VzZuT_VCFx1qqarPCpw==) at #=qS_z4xglNzrousaCQdLYXkP_IjlUfppl$SeMe0e01sEcma$0uM2ViXhkzPsl2l6xC.#=q7q0eYZRA1iUY6p6r91AwpQ==(DateTime #=qW0qYrpmjZW0WsqbUpkvhew==, #=qFvJvQAioVGQfy_z_Ea6r1A==[] #=qA85ayI68bgFMuLNIN7NzUA==, Boolean #=qdZ$TS2XgaKiLLhbAouszfQ==) at #=qS_z4xglNzrousaCQdLYXkP_IjlUfppl$SeMe0e01sEcma$0uM2ViXhkzPsl2l6xC.Save(IEnumerable1 #=qCnHgFcoVHy5SJ3ZvbtahhQ==) at ArcheClient.MainGUI.frmMain.stakan(Object sender, EventArgs e) in F:\platforms\ArchePro\ISL\ArcheClient.MainGUI\frmMain.cs:line 3407 at #=qw1XTJ7dV75pMzOz0hBo$siihDG5OZdJczlcSqCrqHeUyxlEsmsAtnXp2udZg_U2NbEZ$ip5_9tsblQGkl18bdw==.#=qlTbzCDxbsFRMhdXeRnHLcA==(List1 #=qEZ$zSTu6NTimWrkeQ4ymLA==, DateTime #=qLHkFpgenDVQAbq_VEalrLw==, DateTime #=q1YTcmQ0aSkITnw2_u9_JGw==, String #=qRJWXZ_iDXJ5e6CyFySggxw==) at #=qUW3a2a_zU_oArSSOiBn3FLpJvD1is2zltkAN_lWp2$4QggKmPLesfcTNGEJsfTBj.#=q0XPS289_jbJQep3DL8Cfqg==(List1 #=qkTgCSAlcZNPcZEy9AZBFuw==, IEnumerable1 #=qqG_QHQ$oLWGmKV91zoKX7g==, #=qQE3gxfWjLob0eT4xQKg$lvKLXN_F2oep$WGSiQW9e_pG7GggJyb9DKRw7jrVdvBV #=qkKGlqzlXkfX$fJnU2J9jjg==) at #=qa_4zGoLcsro_feFbb0XM9_BlRhaxasQ1UrzoL3NsS5BLfjz_CcaLI5iqpy27MHoyWvADyOilwiIL8FNu4Ao2ig==.#=qwYoBzTre3Rqwrq$18odFFwAs16vZvPFKnBVlKACndM$R7_7lh23LQejqEr6XeJEHQS6AOtFMS5dX_4$Y7MoiGxjg027VUhTmQo_TuK$K4As=(IEnumerable1 #=qLQLfos6mvzvB9rAhsnoxLg==, #=qeTDkbpr2eeOjCLO$BGmaYqB0$_0v2N3UDYHi11JN7I8ARwjQbcOqhUBuEc4nnFMw #=qt22VzZuT_VCFx1qqarPCpw==) at #=qS_z4xglNzrousaCQdLYXkP_IjlUfppl$SeMe0e01sEcma$0uM2ViXhkzPsl2l6xC.#=q7q0eYZRA1iUY6p6r91AwpQ==(DateTime #=qW0qYrpmjZW0WsqbUpkvhew==, #=qFvJvQAioVGQfy_z_Ea6r1A==[] #=qA85ayI68bgFMuLNIN7NzUA==, Boolean #=qdZ$TS2XgaKiLLhbAouszfQ==) at #=qS_z4xglNzrousaCQdLYXkP_IjlUfppl$SeMe0e01sEcma$0uM2ViXhkzPsl2l6xC.Save(IEnumerable1 #=qCnHgFcoVHy5SJ3ZvbtahhQ==) at ArcheClient.MainGUI.frmMain.stakan(Object sender, EventArgs e) in F:\platforms\ArchePro\ISL\ArcheClient.MainGUI\frmMain.cs:line 3407

При этом в отладчике специально смотрю лист, время у стаканов или сделок идет по возрастанию. Помогите советом, отчего такой эксепшн может вылазить и как с ним бороться? S# 4.1.6


Теги:


Спасибо:


< 1 2 
Garry

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


Я понимаю, что не правильные данные, но не правильные с точки зрения хранилища S#, с моей точки зрения стакан представляет набор бидов и асков, так вот эти данные верны и совпадают с терминалом на 100%. Так вот и прошу наводку куда смотреть то, эксепшн говорит про время, время не причем. Разве функция MarketDeph.Verify не говорит что стакан верный? Я бы и сохранял, как вы говорите, как есть и меня это вполне устраивало, если бы хранилище не ругалось не понятно на что.

Спасибо:

Mikhail Sukhov

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


Garry: Разве функция MarketDeph.Verify не говорит что стакан верный?

Еще раз. Неправильные не стаканы, а их последовательность. О чем пишет ошибка (по-русски, кстати).

Спасибо:

Garry

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


Mikhail Sukhov:

Garry: Разве функция MarketDeph.Verify не говорит что стакан верный?

Еще раз. Неправильные не стаканы, а их последовательность. О чем пишет ошибка (по-русски, кстати).

Михаил, в том то и дело я эту последовательность проверяю уже неделю. И нет там ошибки, хоть убей. Я не смог найти никакого другого свойства в MarketDepth кроме как LastChangeTime, которое могло бы определять последовательность, так вот оно совершенно точно идет по возрастанию каждые 500мс и сохранение делал уже по одному стакану, но эксепшн все равно идет. Вопрос лишь в том как правильную последовательность определяет S# API, значит где-то там какой то нюанс или баг, который я не учитываю. Для меня это к сожалению черный ящик, рефлектором лазил, пытался посмотреть этот эксепшн, току мало, код обфусцирован. Вот я и задаю эти вопросы и пытаюсь уточнить как правильная последовательность определяется, если не по LastChangeTime(в нем то точно все ок).

Спасибо:

Mikhail Sukhov

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


Garry: Михаил, в том то и дело я эту последовательность проверяю уже неделю. И нет там ошибки, хоть убей.

http://stocksharp.com/posts/m/22917/

Спасибо:

Garry

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


Помогите, кто может советом, совсем я запутался. Ту проблему так и не решил, ну думал как то не так стаканы собираю или еще что, но вот теперь опять столкнулся. Переписываю все свое добро для рос рынка под PlazaTrader, нужно писать стаканы но с дискретностью 500мс, а не на каждом изменении(в квике просто делал соответствующую настройку DDE вывода и все работало отлично). Тут пишу по таймеру System.Timers.Timer рах в 500мс следующий код: public PlazaTrader Trader; MarketDataBuffer<StockSharp.BusinessEntities.MarketDepth> tldict = new MarketDataBuffer<StockSharp.BusinessEntities.MarketDepth>(); Dictionary<Security, IMarketDataStorage> stordict = new Dictionary<Security, IMarketDataStorage>(); .......

    public void stakan_vivod(Object sender, System.Timers.ElapsedEventArgs e)
    {
        foreach (Security sec in this.Trader.RegisteredMarketDepths)
        {
            var depth = sec.GetMarketDepth();
            if (depth.Count > 0 && depth.Depth > 0)
            {
                tldict.Add(sec, depth.Clone());
                counter++;
            }
            if (counter > 120)
            {
                foreach (KeyValuePair<Security, IEnumerable<MarketDepth>> kvp in tldict.Get())
                {
                    stordict[kvp.Key].Save(kvp.Value);
                }
                counter = 0;
            }
        }
    }

Все отлично работает час, два, три стаканы пишутся, и тут раз и проскакивает этот эксепшн, т.е. он не постоянен(раз в 2-3 часа). Из-за чего? если ошибка в коде, то почему 3 часа исправно пишутся стаканы? да и проверку добавлял по LastChangeTime(добавлять стакан, только если оно больше) не помогает, т.е. до момента stordict[kvp.Key].Save(kvp.Value); стаканы точно доходят упорядоченные. Может таймер для записи не подходит? тогда как правильно писать? IMarketDataStorage, к сожалению для меня черный ящик, на ум приходит только какие то проблемы с потоками, например что-то где то не успевает дописаться.

Спасибо:

Mikhail Sukhov

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


Мои рекомендации не помогли или не были поняты?

Спасибо:

Garry

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


Mikhail Sukhov: Мои рекомендации не помогли или не были поняты?

Скорее были не поняты.

Спасибо:
< 1 2 

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

loading
clippy