本文整理汇总了C#中StockSharp.Messages.ExecutionMessage.GetOrderLogCancelReason方法的典型用法代码示例。如果您正苦于以下问题:C# ExecutionMessage.GetOrderLogCancelReason方法的具体用法?C# ExecutionMessage.GetOrderLogCancelReason怎么用?C# ExecutionMessage.GetOrderLogCancelReason使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StockSharp.Messages.ExecutionMessage
的用法示例。
在下文中一共展示了ExecutionMessage.GetOrderLogCancelReason方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Update
//.........这里部分代码省略.........
if (item.IsSystem == false || item.TradePrice != null || item.Price == 0 /* нулевая цена может появится при поставке опционов */)
return changed;
if (item.IsOrderLogRegistered())
{
changed = TryApplyTrades(null);
if (
(item.Side == Sides.Buy && (_depth.Asks.IsEmpty() || item.Price < _depth.Asks.First().Price)) ||
(item.Side == Sides.Sell && (_depth.Bids.IsEmpty() || item.Price > _depth.Bids.First().Price))
)
{
if (item.TimeInForce == TimeInForce.PutInQueue)
{
var quotes = (item.Side == Sides.Buy ? _bids : _asks);
var quote = quotes.TryGetValue(item.Price);
if (quote == null)
{
quote = new QuoteChange
{
Side = item.Side,
Price = item.Price,
Volume = volume,
};
quotes.Add(item.Price, quote);
if (item.Side == Sides.Buy)
_depth.Bids = GetArray(quotes);
else
_depth.Asks = GetArray(quotes);
}
else
quote.Volume += volume;
changed = true;
}
}
else
{
_matchingOrder = (ExecutionMessage)item.Clone();
// mika
// из-за того, что могут быть кросс-сделки, матчинг только по заявкам невозможен
// (сначала идет регистрация вглубь стакана, затем отмена по причине кросс-сделки)
// http://forum.rts.ru/viewtopic.asp?t=24197
//
}
}
else if (item.IsOrderLogCanceled())
{
var isSame = _matchingOrder != null && _matchingOrder.OrderId == item.OrderId;
changed = TryApplyTrades(item);
if (!isSame && item.TimeInForce == TimeInForce.PutInQueue)
{
// http://forum.rts.ru/viewtopic.asp?t=24197
if (item.GetOrderLogCancelReason() != OrderLogCancelReasons.CrossTrade)
{
var quotes = (item.Side == Sides.Buy ? _bids : _asks);
var quote = quotes.TryGetValue(item.Price);
if (quote != null)
{
quote.Volume -= volume;
if (quote.Volume <= 0)
{
quotes.Remove(item.Price);
if (item.Side == Sides.Buy)
_depth.Bids = GetArray(quotes);
else
_depth.Asks = GetArray(quotes);
}
}
}
changed = true;
}
}
else
{
throw new ArgumentException(LocalizedStrings.Str943Params.Put(item), "item");
// для одной сделки соответствуют две строчки в ОЛ
//_trades[item.Trade.Id] = item;
}
}
finally
{
if (changed)
_depth.ServerTime = item.ServerTime;
}
return changed;
}