当前位置: 首页>>代码示例>>C#>>正文


C# ExecutionMessage.GetOrderLogCancelReason方法代码示例

本文整理汇总了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;
		}
开发者ID:carlosaduro,项目名称:StockSharp,代码行数:101,代码来源:OrderLogMarketDepthBuilder.cs


注:本文中的StockSharp.Messages.ExecutionMessage.GetOrderLogCancelReason方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。