Лучший бид больше или равен лучшему офферу

Лучший бид больше или равен лучшему офферу
Atom
13.09.2013
vk37


Вот такая ошибка при сохранении данных. Получается, что смартком может присылать некорректные стаканы? Почему-то перестали приходить оповещения о новых сообщениях в форуме. Адрес в профиле правильный, на оповещения подписан.
Код
2013-09-13 18:40:17,786 [ 9] ERROR - Ошибка при сохранении маркет данных
System.ArgumentException: Лучший бид 142,35 больше или равен лучшему офферу 142 во время 13.09.2013 18:40:15.
Parameter name: depths
   at #=qDQE6UFyxY9ev55BGfq1mkCmubxEixGG2yBIZlqLtpQ9bmJpQ_GquL8XpvvBN9PSq.#=qtWdK3nDdnk6xQfwORvHBNw==(List`1 #=q8nuRg9VchYxAVYe7yyrhuQ==, IEnumerable`1 #=qsPBBtgh68UJlE5Hw$TkT7A==, #=qYfTpvUh_jC5dOKfp3oA$a$b$FJD2k3o9Jrb8w9CInySnbfsO0HQf4ln5h79dbxa8 #=qFR9phsNymisrVabddAd8OA==)
   at #=q_jpGTnhSCdiEhHJ6se4J0IFa5Dmw1ez$m$ORCOBZEjTcPUi5PKQNimMyWYwfvNo4x842oQR1_AGB9ugNEekkrw==.#=qIoakeHStFXUa2AHCKtSOdZUvLDrFa4Orpyv$_jkkOJmspCOVdBbkJ_UokHOyfuzmxFGNWIcprDrFx0Kc1H6FB1G_4jZdZZMNSEyjMqTAI_g=(IEnumerable`1 #=q5TZ1SjQvukY$5hj_YJh91g==, #=qiWb_GdPXBy57hPO7nT63wW_uh6O$TZiVwWzTtXcvawJAE4P$HFJhh3wqkIqbTt83 #=qiwN6UlyUAOoKQeRJOx_xpQ==)
   at #=qp3zGpbG2i9SNLszeVqQkh7K4ALyVkGrB7KX$cWHAuCKUvZuPq9EsKdkoQs7huFyk.#=qBd4q2YIIXt6UtEskScJftA==(DateTime #=quT0M19H4t_1w1ds02km1fg==, #=q1_a1b6wY1uBf_KE6EGlYwQ==[] #=qtUGZg56jTQSVda3SXiflQQ==, Boolean #=qvUxXIOqEaak08Vrzl7CggQ==)
   at #=qp3zGpbG2i9SNLszeVqQkh7K4ALyVkGrB7KX$cWHAuCKUvZuPq9EsKdkoQs7huFyk.Save(IEnumerable`1 #=q_JfroTjjq7EKzmSUl2CfHA==)
   at AlgoTrading.Hydra.Model.SaveManager.SaveMarketDepths() in c:\Users\Vladimir\AppData\Local\Temp\AlgoTrading\Build Process Data\Export\SourceCode\Applications\AlgoTrading.Hydra\Model\SaveManager.cs:line 184
   at AlgoTrading.Hydra.Model.SaveManager.<StartSaving>b__3(Object sender, DoWorkEventArgs args) in c:\Users\Vladimir\AppData\Local\Temp\AlgoTrading\Build Process Data\Export\SourceCode\Applications\AlgoTrading.Hydra\Model\SaveManager.cs:line 82
   at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
   at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)

Теги:


Спасибо:


vk37

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


Забавно еще что условие на исключение такой ситуации в коде есть:
Код
foreach (var marketDepth in marketDepths)
{
    if (marketDepth.Bids == null || marketDepth.Asks == null || marketDepth.BestAsk == null || marketDepth.BestBid == null)
        continue;

    if (marketDepth.Bids.Length == 0 || marketDepth.Asks.Length == 0)
        continue;

    //!!!!! Вот это условие !!!!!
    if (marketDepth.BestAsk.Price <= marketDepth.BestBid.Price)
        continue;

    _saveManager.MarketDepths.Enqueue(marketDepth);
}
Не понимаю, как такая ошибка могла произойти.
Спасибо:

Mikhail Sukhov

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


Потому что объект MarketDepth переиспользуется. Нужно клонировать. И используйте Гидру. Она за долгое время научилась уже фильтровать такие косяки.
Спасибо: vk37


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

loading
clippy