/// <summary> /// Стоп-заявка /// </summary> /// <param name="ticker">тикер</param> /// <param name="bs">Покупка или продажа</param> /// <param name="st">Тип стоп-заявки - стоп-лосс или тейк-профит</param> /// <param name="alertPrice">цена срабатываная</param> /// <param name="lots">кол-во лотов</param> /// <param name="endTime">дата окончания</param> /// <param name="account">торговый счет</param> /// <returns>OrderNo</returns> public long AddStopOrder(string ticker, BuySell bs, StopOrderType st, decimal alertPrice, int lots, DateTime endTime, string account) { SfxOrder order = new SfxOrder(); order.SlotID = 0; order.OrderMode = "S"; // стоп-заявка order.BuySell = bs == BuySell.Buy ? "B" : "S"; // покупка или продажа order.MktLimit = "M"; // рыночная order.SplitFlag = "S"; // по разным ценам order.ImmCancel = " "; // поставить в очередь order.Account = account; // счет (из таблицы TRDACC) order.SecBoard = _secBoard; // режим торгов order.SecCode = ticker; // инструмент order.Quantity = lots; // кол-во лотов order.StopType = st == StopOrderType.StopLoss ? "L" : "P"; // тип stoploss или takeprofit order.AlertPrice = Convert.ToDouble(alertPrice); // цена order.EndTime = endTime; order.BrokerRef = _slot.BrokerRef; long orderNo; string resMsg; int res = order.Add(out orderNo, out resMsg); _logger.AddInfo("AlorTradeWrapper", "AddStopOrder res=" + res.ToString() + " resMsg='" + resMsg + "' orderNo=" + orderNo.ToString() + " bs=" + bs.ToString() + " st=" + st.ToString() + " ticker=" + ticker + " lots=" + lots.ToString() + " price=" + alertPrice.ToString()); return(res != (int)SFE.SFE_OK ? 0 : orderNo); }
private StopOrderKind ConvertStopOrderType(StopOrderType stopOrderType) { switch (stopOrderType) { case StopOrderType.StopLimit: return StopOrderKind.SIMPLE_STOP_ORDER; case StopOrderType.TakeProfit: return StopOrderKind.TAKE_PROFIT_STOP_ORDER; default: throw new Exception("Not implemented stop order type: " + stopOrderType); } }
private StopOrderKind ConvertStopOrderType(StopOrderType stopOrderType) { switch (stopOrderType) { case StopOrderType.StopLimit: return(StopOrderKind.SIMPLE_STOP_ORDER); case StopOrderType.TakeProfit: return(StopOrderKind.TAKE_PROFIT_STOP_ORDER); default: throw new Exception("Not implemented stop order type: " + stopOrderType); } }
/// <summary> /// Создать новый стоп-ордер. /// При срабатывании будет создана заявка. /// </summary> /// <param name="insID">Фин. инструмент</param> /// <param name="bs">Покупка или продажа</param> /// <param name="sot">Тип стоп-ордера</param> /// <param name="endTime">Время окончания стоп-ордера (при достижении стоп-ордер снимается)</param> /// <param name="alertPrice">Сигнальная цена</param> /// <param name="price">Цена в заявке при срабатывании стоп-ордера (Null - рыночная цена)</param> /// <param name="lotCount">Кол-во лотов в заявке</param> /// <returns></returns> public StopOrder AddStopOrder(int insID, BuySell bs, StopOrderType sot, DateTime?endTime, decimal alertPrice, decimal?price, int lotCount) { DateTime?time = _timeProvider.CurrentTime; if (time == null) { return(null); } StopOrder so = _data.AddStopOrder(time.Value, insID, bs, sot, endTime, alertPrice, price, lotCount, StopOrderStatus.Active); RaiseOnStopOrderChangeEvent(so); _isChangeData = true; SaveChangedData(); return(so); }
/// <summary> /// Создать новый стоп-ордер /// </summary> /// <param name="time">Дата и время создания</param> /// <param name="insID">Фин инструмент</param> /// <param name="bs">Покупка или продажа</param> /// <param name="soType">Тип стоп-ордера</param> /// <param name="endTime">Время окончания (null-действует бесконечно)</param> /// <param name="alertPrice">Цена срабатывания стопа</param> /// <param name="price">Цена заявки, которая будет создана при срабатывании стопа (null-заявка по рыночной цене)</param> /// <param name="lotCount">Кол-во лотов</param> /// <param name="status">Статус нового стоп-ордера</param> /// <returns>Новый стоп-ордер</returns> public StopOrder AddStopOrder(DateTime time, int insID, BuySell bs, StopOrderType soType, DateTime?endTime, decimal alertPrice, decimal?price, int lotCount, StopOrderStatus status) { StopOrder so = new StopOrder(); so.StopOrderID = GetNewID <StopOrder>(_stopOrders, r => r.StopOrderID); so.Time = time; so.InsID = insID; so.BuySell = bs; so.StopType = soType; so.EndTime = endTime; so.AlertPrice = alertPrice; so.Price = price; so.LotCount = lotCount; so.Status = status; so.AccountID = _account.AccountID; so.CompleteTime = null; _stopOrders.Add(so); return(so); }
public StopOrder AddStopOrder(int accountID, int insID, BuySell bs, StopOrderType st, decimal price, int lots) { StopOrder so = new StopOrder() { StopOrderID = _stopOrders.Count + 1, AccountID = accountID, InsID = insID, BuySell = bs, StopType = st, Time = DateTime.Now, CompleteTime = null, EndTime = null, Price = price, AlertPrice = price, LotCount = lots, StopOrderNo = 1000 * (_stopOrders.Count + 1), Status = StopOrderStatus.Active }; _stopOrders.Add(so); return(so); }
/// <summary> /// Создает стоп-заявку. /// </summary> /// <param name="createOrder"></param> /// <returns></returns> public int CreateStopOrder(StopOrder createOrder, StopOrderType type) { if (createOrder.Sec.Empty()) { return(-1); } if (createOrder.Price <= 0) { return(-2); } if (createOrder.Volume <= 0) { return(-3); } Common.Ext.NewThread(() => { Qlog.CatchException(() => { Account acc = this.ConTerminal.Accounts.FirstOrDefault(a => a.AccClasses.FirstOrDefault(c => c.Code == createOrder.Sec.Class.Code) != null); if (acc.Empty()) { return; } Random rnd = new Random(); string TypeSOrder = ""; string[] DopParam = { "TRANS_ID", rnd.Next(1, 1000000).ToString() }; string condition = ((int)ConditionStopOrder.MoreOrEqual).ToString(); switch (type) { case StopOrderType.StopLimit: TypeSOrder = "SIMPLE_STOP_ORDER"; if (createOrder.Direction == OrderDirection.Buy) { condition = ((int)ConditionStopOrder.MoreOrEqual).ToString(); } else { condition = ((int)ConditionStopOrder.LessOrEqual).ToString(); } var dateExpiry = createOrder.DateExpiry.ToString_YYYYMMDD(); DopParam = DopParam.Concat(new string[] { "CONDITION", condition, "EXPIRY_DATE", (dateExpiry.Empty() ? "TODAY" : dateExpiry), "STOPPRICE", Math.Round(createOrder.ConditionPrice, (int)createOrder.Sec.Scale).ToString(), }).ToArray(); break; case StopOrderType.LinkOrder: TypeSOrder = "WITH_LINKED_LIMIT_ORDER"; if (createOrder.Direction == OrderDirection.Buy) { condition = ((int)ConditionStopOrder.MoreOrEqual).ToString(); } else { condition = ((int)ConditionStopOrder.LessOrEqual).ToString(); } DopParam = DopParam.Concat(new string[] { "CONDITION", condition, "EXPIRY_DATE", "TODAY", "STOPPRICE", Math.Round(createOrder.ConditionPrice, (int)createOrder.Sec.Scale).ToString(), "LINKED_ORDER_PRICE", Math.Round(createOrder.LinkOrderPrice, (int)createOrder.Sec.Scale).ToString(), "KILL_IF_LINKED_ORDER_PARTLY_FILLED", "NO" }).ToArray(); break; case StopOrderType.TakeProfit: TypeSOrder = "TAKE_PROFIT_STOP_ORDER"; if (createOrder.Direction == OrderDirection.Buy) { condition = ((int)ConditionStopOrder.LessOrEqual).ToString(); } else { condition = ((int)ConditionStopOrder.MoreOrEqual).ToString(); } DopParam = DopParam.Concat(new string[] { "CONDITION", condition, "EXPIRY_DATE", "TODAY", "OFFSET", Math.Round(createOrder.Offset, (int)createOrder.Sec.Scale).ToString(), "OFFSET_UNITS", "PRICE_UNITS", "SPREAD", Math.Round(createOrder.Spread, (int)createOrder.Sec.Scale).ToString(), "SPREAD_UNITS", "PRICE_UNITS", "STOPPRICE", Math.Round(createOrder.ConditionPrice, (int)createOrder.Sec.Scale).ToString(), }).ToArray(); break; case StopOrderType.TakeProfitStopLimit: TypeSOrder = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER"; DopParam = DopParam.Concat(new string[] { "OFFSET", Math.Round(createOrder.Offset, (int)createOrder.Sec.Scale).ToString(), "OFFSET_UNITS", "PRICE_UNITS", "SPREAD", Math.Round(createOrder.Spread, (int)createOrder.Sec.Scale).ToString(), "SPREAD_UNITS", "PRICE_UNITS", "STOPPRICE", Math.Round(createOrder.ConditionPrice, (int)createOrder.Sec.Scale).ToString(), "STOPPRICE2", Math.Round(createOrder.ConditionPrice2, (int)createOrder.Sec.Scale).ToString(), "IS_ACTIVE_IN_TIME", "NO" }).ToArray(); break; } ; string[] Params = { "ACTION", "NEW_STOP_ORDER", "CLASSCODE", createOrder.Sec.Class.Code, "SECCODE", createOrder.Sec.Code, "OPERATION", createOrder.Direction == OrderDirection.Buy ? "B" : "S", "TYPE", "L", "PRICE", Math.Round(createOrder.Price, (int)createOrder.Sec.Scale).ToString(), "QUANTITY", createOrder.Volume.ToString(), "ACCOUNT", acc.AccID, "STOP_ORDER_KIND", TypeSOrder, }; Params = Params.Concat(DopParam).ToArray(); this.SendTransaction(Params); }); }); return(0); }
/// <summary> /// Create stop-order /// </summary> /// <param name="accountID">Account id</param> /// <param name="time">Date and time</param> /// <param name="insID">Instrum id</param> /// <param name="bs">Buy or sell</param> /// <param name="st">StopLoss or TakeProfit</param> /// <param name="endTime">End time or null</param> /// <param name="alertPrice">Alert price</param> /// <param name="price">Order price or null</param> /// <param name="lotCount">Lots count</param> /// <param name="status">Stop order status</param> /// <param name="completeTime">Complete date and time</param> /// <param name="stopOrderNo">Global stop-order number</param> /// <returns>New stop-order</returns> public StopOrder CreateStopOrder(int accountID, DateTime time, int insID, BuySell bs, StopOrderType st, DateTime?endTime, decimal alertPrice, decimal?price, int lotCount, StopOrderStatus status, DateTime?completeTime, long stopOrderNo) { StopOrder stopOrder = new StopOrder() { AccountID = accountID, Time = time, InsID = insID, BuySell = bs, StopType = st, EndTime = endTime, AlertPrice = alertPrice, Price = price, LotCount = lotCount, Status = status, CompleteTime = completeTime, StopOrderNo = stopOrderNo }; using (var db = new DaContext(_options)) { db.StopOrder.Add(stopOrder); db.SaveChanges(); } return(stopOrder); }
public StopOrder CreateStopOrder(int accountID, DateTime time, int insID, BuySell bs, StopOrderType st, DateTime?endTime, decimal alertPrice, decimal?price, int lotCount, StopOrderStatus status, DateTime?completeTime, long stopOrderNo) { StopOrder so = new StopOrder() { StopOrderID = _nextStopOrderID++, AccountID = accountID, Time = time, InsID = insID, BuySell = bs, StopType = st, EndTime = endTime, AlertPrice = alertPrice, Price = price, LotCount = lotCount, Status = status, CompleteTime = completeTime, StopOrderNo = stopOrderNo }; _id_stopOrders.Add(so.StopOrderID, so); return(so); }