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


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


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

System.ArgumentException: Попытка записать неупорядоченные стаканы. (или бывает сделки)
Parameter name: time
at #=qw1XTJ7dV75pMzOz0hBo$siihDG5OZdJczlcSqCrqHeUyxlEsmsAtnXp2udZg_U2NbEZ$ip5_9tsblQGkl18bdw==.#=qlTbzCDxbsFRMhdXeRnHLcA==(List`1 #=qEZ$zSTu6NTimWrkeQ4ymLA==, DateTime #=qLHkFpgenDVQAbq_VEalrLw==, DateTime #=q1YTcmQ0aSkITnw2_u9_JGw==, String #=qRJWXZ_iDXJ5e6CyFySggxw==)
at #=qUW3a2a_zU_oArSSOiBn3FLpJvD1is2zltkAN_lWp2$4QggKmPLesfcTNGEJsfTBj.#=q0XPS289_jbJQep3DL8Cfqg==(List`1 #=qkTgCSAlcZNPcZEy9AZBFuw==, IEnumerable`1 #=qqG_QHQ$oLWGmKV91zoKX7g==, #=qQE3gxfWjLob0eT4xQKg$lvKLXN_F2oep$WGSiQW9e_pG7GggJyb9DKRw7jrVdvBV #=qkKGlqzlXkfX$fJnU2J9jjg==)
at #=qa_4zGoLcsro_feFbb0XM9_BlRhaxasQ1UrzoL3NsS5BLfjz_CcaLI5iqpy27MHoyWvADyOilwiIL8FNu4Ao2ig==.#=qwYoBzTre3Rqwrq$18odFFwAs16vZvPFKnBVlKACndM$R7_7lh23LQejqEr6XeJEHQS6AOtFMS5dX_4$Y7MoiGxjg027VUhTmQo_TuK$K4As=(IEnumerable`1 #=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(IEnumerable`1 #=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==(List`1 #=qEZ$zSTu6NTimWrkeQ4ymLA==, DateTime #=qLHkFpgenDVQAbq_VEalrLw==, DateTime #=q1YTcmQ0aSkITnw2_u9_JGw==, String #=qRJWXZ_iDXJ5e6CyFySggxw==)
at #=qUW3a2a_zU_oArSSOiBn3FLpJvD1is2zltkAN_lWp2$4QggKmPLesfcTNGEJsfTBj.#=q0XPS289_jbJQep3DL8Cfqg==(List`1 #=qkTgCSAlcZNPcZEy9AZBFuw==, IEnumerable`1 #=qqG_QHQ$oLWGmKV91zoKX7g==, #=qQE3gxfWjLob0eT4xQKg$lvKLXN_F2oep$WGSiQW9e_pG7GggJyb9DKRw7jrVdvBV #=qkKGlqzlXkfX$fJnU2J9jjg==)
at #=qa_4zGoLcsro_feFbb0XM9_BlRhaxasQ1UrzoL3NsS5BLfjz_CcaLI5iqpy27MHoyWvADyOilwiIL8FNu4Ao2ig==.#=qwYoBzTre3Rqwrq$18odFFwAs16vZvPFKnBVlKACndM$R7_7lh23LQejqEr6XeJEHQS6AOtFMS5dX_4$Y7MoiGxjg027VUhTmQo_TuK$K4As=(IEnumerable`1 #=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(IEnumerable`1 #=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