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

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


Вот такая ошибка при сохранении данных. Получается, что смартком может присылать некорректные стаканы? Почему-то перестали приходить оповещения о новых сообщениях в форуме. Адрес в профиле правильный, на оповещения подписан.
Code
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)

Tags:


Thanks:


vk37

Avatar
Date: 9/13/2013
Reply


Забавно еще что условие на исключение такой ситуации в коде есть:
Code
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);
}
Не понимаю, как такая ошибка могла произойти.
Thanks:

Mikhail Sukhov

Avatar
Date: 9/13/2013
Reply


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


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy