← Back

Снова стакан

Иногда в стакане BestBid.Price или BestAsk.Price равны нулю. Стаканы яполчаю в конструкторе и для рассчета текущих сигналов использую только их вот код

public BasketSignalCalculator(TradedBasket basket, TikerController tikerController, bool isSigmaCalculated) { this.isSigmaCalculated = isSigmaCalculated; this.trader = tikerController.Trader; this.basket = basket; this.tikerController = tikerController; leftSideMD = trader.GetMarketDepth(trader.Securities.First(sec => sec.Code == basket.Basket.LeftSide[0].Asset.Name)); rightSideMDs = trader.GetMarketDepth(trader.Securities.First(sec => sec.Code == basket.Basket.RightSide[0].Asset.Name)); }

вот код одного из методов

public decimal CalcSumCurrentBids() { decimal delta = 0; foreach (TradedBasketItem tradedBasketItem in basket.CurrentPart.RightSide) { decimal koef = GetTikerKoef(tradedBasketItem.Tiker); double bid = rightSideMDs.BestBid.Price; delta = delta + bid * tradedBasketItem.Weight * koef; if (delta <= 0) {

TradeBasketHelperLogger.Logger.Debug(String.Format("Delta = 0, koef = {0}, BB = {1}, TotalVol = {2}, TotalPrice {3}", koef, bid, rightSideMDs.TotalVolume, rightSideMDs.TotalPrice)); } } return delta; }

и вот лог

14:06:57,421 - Delta = 0, koef = 1, BB = 0, TotalVol = 667149, TotalPrice 1487,4 14:09:05,515 - Delta = 0, koef = 1, BB = 0, TotalVol = 659359, TotalPrice 1486,44 14:10:23,468 - Delta = 0, koef = 1, BB = 0, TotalVol = 522221, TotalPrice 1486,02

что это за глюк и как с ним бороться?

Comments (17)

Login or Create account, Log in or register to leave a comment

Mikhail Sukhov
Mikhail Sukhov

Может быть банально еще не пришел экспорт? Или это в середине работы случается?

Tauler
Tauler Author

и вот еще

14:27:57,078 - Delta = 0, koef = 1, BB = 0, TotalVol = 0, TotalPrice 0 14:28:15,953 - Delta = 0, koef = 1, BB = 0, TotalVol = 0, TotalPrice 0 14:28:18,078 - Delta = 0, koef = 1, BB = 0, TotalVol = 520064, TotalPrice 1489,09

в середине, в том то и беда. метод CalcSumCurrentBids() вызываеся в цикле весьма часто (как видно по тайм стампам), десять раз в секунду точно

Tauler
Tauler Author

вот секция из info.ini

[excel] timeout=90 price-timeout=0 start-timeout=100 use-multithread=1 num-attempts=0 language_id=0

может price-timeout = 0 не надо делать?

Tauler
Tauler Author

Я кстати правильно делаю, что создаю переменную сткана в конструкторе , кладу ее в поле и потом пользую? не надо какжый рах trader.GetMarketDepth() использовать?

Tauler
Tauler Author

И вот вопрос - щас покурил мануал и что лучге использовать - MarketDepth.BestAsk или MarketDepth GetBestQuote(OrderDirections.Sell)?

Mikhail Sukhov
Mikhail Sukhov

Минутку, а как данные в эти стаканы попадают?

Mikhail Sukhov
Mikhail Sukhov

Отбой, я понял о чем идет речь.

Mikhail Sukhov
Mikhail Sukhov

Второе вызывает первое.

Mikhail Sukhov
Mikhail Sukhov

Частота не зависит... А можете сократить код до простого примера в 10 строчек?

Tauler
Tauler Author

Да грубо говоря так

MarketDepth md = trader.GetMarketDepth(security);

while(true) { Console.WriteLine(md.BestAsk.Price); Thread.Sleep(10);

Mikhail Sukhov
Mikhail Sukhov

Ок, посмотрю чуть по-позже. Надо еще глянуть на частоту обновления инструментов... Главное, чтобы этот код точно приводил к баге.

Tauler
Tauler Author

Иожно вообще слип убрать и отлавливать моменты когда бестбид или бестаск равны 0. еще вот я заметил тоталволюм парур раз 0 проскакивал.

вероятно если подписаться на событие QoutesChanged таког не будет, н оу Workflow со событиями как то не айс работа, на то он и flow.

Tauler
Tauler Author

а MarketDepth потокобезопасный? может я в него лезу как раз в тот момент , ктога он обновляет эти свойства?

Mikhail Sukhov
Mikhail Sukhov

Потокобезопасный.

Mikhail Sukhov
Mikhail Sukhov

Две новости. Хорошая - у меня работает. Плохая (но не для меня) - у меня версия 2.1. Вот так =)

Действительно, посмотрел старый код. Такое поведение могло быть. Обновление котировок было не атомарно.

Tauler
Tauler Author

а долго ожидать релиза 2.1?

Mikhail Sukhov
Mikhail Sukhov

Я в процессе документирования. Думал на этой неделе сделаю, а у вас все проблемы да проблемы... Думаю 2-3 дня.