/// <summary> /// проверить, не пора ли высылать новую заявку /// </summary> public void Check() { if (_ordersNeadToCreate == null || _ordersNeadToCreate.Count == 0) { return; } if (_ordersInSystem == null || _ordersInSystem.State == OrderStateType.Done) { _ordersInSystem = _ordersNeadToCreate[0]; _ordersNeadToCreate.Remove(_ordersInSystem); if (_type == AcebergType.Open) { _position.AddNewOpenOrder(_ordersInSystem); } else if (_type == AcebergType.Close) { _position.AddNewCloseOrder(_ordersInSystem); } else if (_type == AcebergType.ModificateBuy) { if (_position.Direction == Side.Buy && _ordersInSystem.Side == Side.Buy || _position.Direction == Side.Sell && _ordersInSystem.Side == Side.Sell) { _position.AddNewOpenOrder(_ordersInSystem); } else { _position.AddNewCloseOrder(_ordersInSystem); } } else if (_type == AcebergType.ModificateSell) { if (_position.Direction == Side.Buy && _ordersInSystem.Side == Side.Buy || _position.Direction == Side.Sell && _ordersInSystem.Side == Side.Sell) { _position.AddNewOpenOrder(_ordersInSystem); } else { _position.AddNewCloseOrder(_ordersInSystem); } } if (NewOrderNeadToExecute != null) { NewOrderNeadToExecute(_ordersInSystem); } } }
/// <summary> /// создать новую позицию по индексу /// </summary> private Position CreatePosition(decimal price, Security security, int index, DateTime time) { Order newOrder = new Order(); newOrder.SecurityNameCode = security.Name; newOrder.Price = price; newOrder.NumberUser = index; newOrder.Volume = 1; newOrder.NumberMarket = index.ToString(); newOrder.Side = SideInter; newOrder.TimeCallBack = time; newOrder.TimeCreate = time; Position newPosition = new Position(); newPosition.Direction = SideInter; newPosition.PriceStep = security.PriceStep; newPosition.PriceStepCost = security.PriceStep; newPosition.AddNewOpenOrder(newOrder); MyTrade trade = new MyTrade(); trade.Volume = 1; trade.Side = newOrder.Side; trade.NumberOrderParent = index.ToString(); trade.Price = price; trade.NumberTrade = index + 1.ToString(); trade.Time = time; newPosition.SetTrade(trade); return(newPosition); }
/// <summary> /// создать сделку /// </summary> public Position CreatePosition(string botName, Side direction, decimal priceOrder, int volume, OrderPriceType priceType, TimeSpan timeLife, Security security, Portfolio portfolio) { Position newDeal = new Position(); newDeal.Number = NumberGen.GetNumberDeal(); newDeal.Direction = direction; newDeal.State = PositionStateType.Opening; newDeal.AddNewOpenOrder(CreateOrder(direction, priceOrder, volume, priceType, timeLife)); newDeal.NameBot = botName; newDeal.Lots = security.Lot; newDeal.PriceStepCost = security.PriceStepCost; newDeal.PriceStep = security.PriceStep; newDeal.PortfolioValueOnOpenPosition = portfolio.ValueCurrent; return(newDeal); }