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


C# ExecutionMessage.Clone方法代码示例

本文整理汇总了C#中StockSharp.Messages.ExecutionMessage.Clone方法的典型用法代码示例。如果您正苦于以下问题:C# ExecutionMessage.Clone方法的具体用法?C# ExecutionMessage.Clone怎么用?C# ExecutionMessage.Clone使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在StockSharp.Messages.ExecutionMessage的用法示例。


在下文中一共展示了ExecutionMessage.Clone方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: OnProcess

		/// <summary>
		/// Обработать сообщение.
		/// </summary>
		/// <param name="message">Сообщение.</param>
		/// <returns>Результат обработки. Если будет возрвщено <see langword="null"/>,
		/// то генератору пока недостаточно данных для генерации нового сообщения.</returns>
		protected override Message OnProcess(Message message)
		{
			DateTimeOffset time;

			switch (message.Type)
			{
				case MessageTypes.Level1Change:
				{
					var l1Msg = (Level1ChangeMessage)message;

					var value = l1Msg.Changes.TryGetValue(Level1Fields.LastTradePrice);

					if (value != null)
						_lastOrderPrice = (decimal)value;

					TradeGenerator.Process(message);

					time = l1Msg.ServerTime;
					break;
				}

				case MessageTypes.Execution:
				{
					var execMsg = (ExecutionMessage)message;

					switch (execMsg.ExecutionType)
					{
						case ExecutionTypes.Tick:
							_lastOrderPrice = execMsg.GetTradePrice();
							break;
						default:
							return null;
					}

					time = execMsg.ServerTime;
					break;
				}

				case MessageTypes.Time:
				{
					var timeMsg = (TimeMessage)message;

					time = timeMsg.ServerTime;

					break;
				}

				default:
					return null;
			}

			if (!IsTimeToGenerate(time))
				return null;

			// TODO более реалистичную генерацию, так как сейчас объемы, цены и сделки c потолка

			var action = RandomGen.GetInt(0, 5);

			var isNew = action < 3 || _activeOrders.IsEmpty();

			ExecutionMessage item;

			if (isNew)
			{
				var priceStep = SecurityDefinition.PriceStep ?? 0.01m;

				_lastOrderPrice += RandomGen.GetInt(-MaxPriceStepCount, MaxPriceStepCount) * priceStep;

				if (_lastOrderPrice <= 0)
					_lastOrderPrice = priceStep;

				item = new ExecutionMessage
				{
					OrderId = IdGenerator.GetNextId(),
					SecurityId = SecurityId,
					ServerTime = time,
					OrderState = OrderStates.Active,
					Volume = Volumes.Next(),
					Side = RandomGen.GetEnum<Sides>(),
					Price = _lastOrderPrice,
					ExecutionType = ExecutionTypes.OrderLog,
				};

				_activeOrders.Enqueue((ExecutionMessage)item.Clone());
			}
			else
			{
				var activeOrder = _activeOrders.Peek();

				item = (ExecutionMessage)activeOrder.Clone();
				item.ServerTime = time;

				var isMatched = action == 5;

//.........这里部分代码省略.........
开发者ID:reddream,项目名称:StockSharp,代码行数:101,代码来源:OrderLogGenerator.cs

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