private void AddOpenClose(Order order, double Qty, OpenCloseType OpenClose) { order.Qty = Qty; switch (OpenClose) { case OpenCloseType.Open: order.Open(); order.Portfolio = order.Side == SmartQuant.OrderSide.Buy ? Long : Short; order.Text = "O:" + order.Text;//加了标记,这样在OrderManger中比较直观 break; case OpenCloseType.Close: order.Close(); order.Portfolio = order.Side == SmartQuant.OrderSide.Buy ? Short : Long; order.Text = "C:" + order.Text; break; case OpenCloseType.CloseToday: order.CloseToday(); order.Portfolio = order.Side == SmartQuant.OrderSide.Buy ? Short : Long; order.Text = "T:" + order.Text; break; default: break; } }
private OpenCloseType OnOrderRejected(Order order) { OpenCloseType OpenClose = OpenCloseHelper.GetOpenClose(order); MonoPositionRecord record = GetPositionRecord(order.Side, OpenClose); double LeavesQty = order.LeavesQty; switch (OpenClose) { case OpenCloseType.Open: record.OrderRejectedOpen(LeavesQty); break; case OpenCloseType.Close: record.OrderRejectedClose(LeavesQty); break; case OpenCloseType.CloseToday: record.OrderRejectedCloseToday(LeavesQty); break; default: MessageBox.Show("OrderRejected"); break; } return(OpenClose); }
private void OnPendingNewOrder(Order order) { double Qty = order.Qty; OpenCloseType OpenClose = OpenCloseHelper.GetOpenClose(order); MonoPositionRecord record = GetPositionRecord(order.Side, OpenClose); switch (OpenClose) { case OpenCloseType.Open: record.NewOrderOpen(Qty); break; case OpenCloseType.Close: record.NewOrderClose(Qty); break; case OpenCloseType.CloseToday: record.NewOrderCloseToday(Qty); break; default: MessageBox.Show("PendingNewOrder"); break; } }
public static Order SetOpenClose(this Order order, OpenCloseType openClose) { switch (openClose) { case OpenCloseType.Undefined: break; case OpenCloseType.Open: Open(order); break; case OpenCloseType.Close: Close(order); break; case OpenCloseType.CloseToday: CloseToday(order); break; case OpenCloseType.LockToday: LockToday(order); break; } return(order); }
private void OnOrderFilled(SmartQuant.Order order) { int index = order.Reports.Count - 1; double LastQty = order.Reports[index].LastQty; double LastPrice = order.Reports[index].LastPx; bool IsDone = order.IsDone; OpenCloseType OpenClose = OpenCloseHelper.GetOpenClose(order); MonoPositionRecord record = GetPositionRecord(order.Side, OpenClose); switch (OpenClose) { case OpenCloseType.Open: record.FilledOpen(LastQty, LastPrice); break; case OpenCloseType.Close: record.FilledClose(LastQty, LastPrice); break; case OpenCloseType.CloseToday: record.FilledCloseToday(LastQty, LastPrice); break; default: MessageBox.Show("Filled"); break; } }
private double CalcTradeMoney(String code, double price, int hand, OpenCloseType openCloseType) { TradeFee_Code tradeFee = account.GetTradeFee_Code(code); //交易费用 double handFee = tradeFee.BuyFee; return(hand * (price * tradeFee.HandCount * (tradeFee.DepositPercent / 100) + handFee)); }
protected void AdjustPricePipsByCommission(OpenCloseType openCloseType, ExecuteContext context) { var setting = this.GetHistorySettings(context); if (setting.Item1.CommissionFormula.TakeFeeAsCost()) //Adjust PricePips { decimal commission = setting.Item2.RateCommission * (openCloseType == OpenCloseType.Open ? setting.Item3.CommissionOpen : setting.Item3.CommissionCloseD); _settings.ExecutePrice += (int)Math.Round(commission * (_order.IsBuy == setting.Item1.IsNormal ? 1 : -1), 0, MidpointRounding.AwayFromZero); } }
public OrderInfo(string code, double orderTime, OpenCloseType openClose, double price, int qty, OrderSide direction, OrderType orderType) { this.Instrumentid = code; this.OrderTime = orderTime; this.OpenClose = openClose; this.Price = price; this.Volume = qty; this.Direction = direction; this.Type = orderType; }
public BrokerTrade(Instrument instrument, Exchange exchange, DirectionType direction, long qty, double price, OpenCloseType openClose, DateTime tradeTime) { Instrument = instrument; Exchange = exchange; Direction = direction; Qty = qty; Price = price; OpenClose = openClose; TradeTime = tradeTime; }
private OpenCloseType OnOrderCancelled(Order order) { OpenCloseType OpenClose = OpenCloseHelper.GetOpenClose(order); MonoPositionRecord record = GetPositionRecord(order.Side, OpenClose); ++record.CumCancelCnt; OnOrderRejected(order); return(OpenClose); }
public static OpenCloseType GetOpenClose(Order order) { object obj = order.GetOpenClose(); if (obj == null) { return(OpenCloseType.Close); } OpenCloseType OpenClose = (OpenCloseType)obj; return(OpenClose); }
public Order(BaseStrategy strategy, Instrument inst, DirectionType direction, OpenCloseType openClose, double price, int volume) { Strategy = strategy; Instrument = inst; Direction = direction; OpenClose = openClose; Price = price; OrderTime = DateTime.Now; Qty = volume; QtyLeft = volume; Status = OrderStatus.Normal; }
private static string GetOffsetFlag(OpenCloseType openClose) { switch (openClose) { case OpenCloseType.Close: return(Convert.ToChar(CtpOffsetFlagType.Close).ToString()); case OpenCloseType.CloseToday: return(Convert.ToChar(CtpOffsetFlagType.CloseToday).ToString()); } return(Convert.ToChar(CtpOffsetFlagType.Open).ToString()); }
public void Load(byte[] bytes) { using (var stream = new MemoryStream(bytes)) using (var reader = new BinaryReader(stream)) { OpenClose = (OpenCloseType)reader.ReadByte(); HedgeFlag = (HedgeFlagType)reader.ReadByte(); Side = (OrderSide)reader.ReadByte(); DeviationMode = (OrderDeviationMode)reader.ReadByte(); FailedMethod = (OrderAdjustFailedMethod)reader.ReadByte(); ParentOrderId = reader.ReadInt32(); Market2Limit.LoadForm(reader); DeviationInfo.LoadForm(reader); } }
public MonoPositionRecord GetPositionRecord(SmartQuant.OrderSide Side, OpenCloseType OpenClose) { switch (OpenClose) { case OpenCloseType.Open: return(Side == SmartQuant.OrderSide.Buy ? Long : Short); case OpenCloseType.Close: case OpenCloseType.CloseToday: return(Side == SmartQuant.OrderSide.Buy ? Short : Long); default: MessageBox.Show("GetPositionRecord"); break; } return(null); }
public static SubSide OpenClose2SubSide(this Order order, OpenCloseType OpenClose) { //多头 //Buy 就是开 //Sell 就是平 SubSide 是 Undefined //空头 //Sell 加 SubSide = SellShort 是开仓 //Buy 加 SubSide = BuyCover 是平仓 // 由于使用官方的办法无法指定平今与平昨,所以还是用以前的开平仓的写法 // 区别只是官方维护了双向持仓 if (order.Side == SmartQuant.OrderSide.Buy) { switch (OpenClose) { case OpenCloseType.Open: order.SubSide = SubSide.Undefined; break; case OpenCloseType.Close: case OpenCloseType.CloseToday: order.SubSide = SubSide.BuyCover; break; } } else { switch (OpenClose) { case OpenCloseType.Open: order.SubSide = SubSide.SellShort; break; case OpenCloseType.Close: case OpenCloseType.CloseToday: order.SubSide = SubSide.Undefined; break; } } return(order.SubSide); }
private void DrawTickBar(Graphics g, Point p, ITickBar tickBar, ITickBar lastTickBar, double lastEndPrice) { Color titleColor = ColorUtils.GetColor("#808080"); Color colorNormal = ColorConfig.Color_StockInfo; Color colorRed = ColorConfig.Color_TextUp; Color colorGreen = ColorConfig.Color_TextDown; g.DrawString(GetTimeFormat(tickBar.Time), new Font("宋体", 11, FontStyle.Bold), new SolidBrush(titleColor), p); p.X += 90; g.DrawString(tickBar.Price.ToString(), new Font("宋体", 11, FontStyle.Bold), new SolidBrush(tickBar.Price > lastEndPrice ? colorRed : colorGreen), p); p.X += 40; bool isUp = lastTickBar == null ? true : tickBar.Price >= lastTickBar.Price; g.DrawString(tickBar.Mount.ToString(), new Font("宋体", 11, FontStyle.Bold), new SolidBrush(isUp ? colorRed : colorGreen), p); p.X += 40; g.DrawString(tickBar.Add.ToString(), new Font("宋体", 11, FontStyle.Bold), new SolidBrush(colorNormal), p); p.X += 40; OpenCloseType oct = GetOpenOrClose(tickBar, lastTickBar); g.DrawString(GetOpenCloseTypeName(oct), new Font("宋体", 11, FontStyle.Bold), new SolidBrush(colorNormal), p); }
public string GetOpenCloseTypeName(OpenCloseType oct) { switch (oct) { case OpenCloseType.OpenUp: return("多开"); case OpenCloseType.OpenDown: return("空开"); case OpenCloseType.CloseUp: return("多平"); case OpenCloseType.CloseDown: return("空平"); case OpenCloseType.ChangeHand: return("换手"); } return(""); }
private void OnOrderRejected(Order order, DualPositionRecord record) { // 1.非交易时间 // 2.超出涨跌停 // 3.报单错误 OpenCloseType OpenClose = OpenCloseHelper.GetOpenClose(order); if (OpenClose == OpenCloseType.Open) { // 1.资金不足 // 开仓被拒绝,需要返回原持仓 } else { // 1.可平手数不足 } // 是重试N次还是立即还原呢?就算是立即还原,会由于行情满足会再次进入 // 这种方法还原是否可行? record.TargetPosition = record.CurrentPosition; }
private Order CreateOrder(double qty, OpenCloseType openClose) { var order = Agent.CreateOrder(Order, qty); order.SetOpenClose(openClose); if (openClose == OpenCloseType.Open) { order.TimeInForce = Order.TimeInForce; } else { if (OpenOrder == null) { order.TimeInForce = Order.TimeInForce; } } var info = OrderExtensions.GetOrderInfo(order); info.Processor = this; info.ParentOrderId = Order.Id; info.DeviationInfo = _info.DeviationInfo; info.DeviationMode = _info.DeviationMode; return(order); }
public static Order SetOpenClose(this Order order, OpenCloseType OpenClose) { order.GetDictionary(index)[OrderTagType.PositionEffect] = (byte)OpenClose; return(order); }
public MonoPositionRecord GetPositionRecord(DualPositionRecord record, SmartQuant.OrderSide Side, OpenCloseType OpenClose) { return(record.GetPositionRecord(Side, OpenClose)); }
/// <summary> /// 检查是否满足任务组监控价差条件。 /// </summary> /// <param name="taskGroup">任务组。</param> /// <returns></returns> private PriceSpreadCheckResult CheckPriceSpread(OpenCloseType openCloseType, ArbitrageArgument argument) { USeMarketData nearMarketData = m_quoteDriver.Query(argument.NearInstrument); USeMarketData farMarketData = m_quoteDriver.Query(argument.FarInstrument); decimal nearPrice = 0m; decimal farPrice = 0m; if (openCloseType == OpenCloseType.Open) { nearPrice = GetMarketPrice(nearMarketData, argument.OpenArg.NearOrderPriceType); farPrice = GetMarketPrice(farMarketData, argument.OpenArg.FarOrderPriceType); } else if (openCloseType == OpenCloseType.Close) { nearPrice = GetMarketPrice(nearMarketData, argument.CloseArg.NearOrderPriceType); farPrice = GetMarketPrice(farMarketData, argument.CloseArg.FarOrderPriceType); } else { Debug.Assert(false); return(PriceSpreadCheckResult.CreateNoOrderResult()); } if (nearPrice <= 0 || farPrice <= 0) { return(PriceSpreadCheckResult.CreateNoOrderResult()); } decimal priceSpread = nearPrice - farPrice; if (openCloseType == OpenCloseType.Open) { Debug.Assert(argument.OpenArg != null && argument.OpenArg.OpenCondition != null); if (IsInPriceSpread(argument.OpenArg.OpenCondition, priceSpread)) { PriceSpreadCheckResult result = new PriceSpreadCheckResult(); result.OrderReason = TaskOrderReason.Open; result.PriceSpreadThreshold = argument.OpenArg.OpenCondition.PriceSpreadThreshold; return(result); } } else if (openCloseType == OpenCloseType.Close) { Debug.Assert(argument.CloseArg != null && argument.CloseArg.CloseCondition != null); if (argument.CloseArg != null && argument.CloseArg.CloseCondition != null) { if (IsInPriceSpread(argument.CloseArg.CloseCondition, priceSpread)) { PriceSpreadCheckResult result = new PriceSpreadCheckResult(); result.OrderReason = TaskOrderReason.Close; result.PriceSpreadThreshold = argument.CloseArg.CloseCondition.PriceSpreadThreshold; return(result); } } if (argument.StopLossArg != null && argument.StopLossArg.StopLossCondition != null) { if (IsInPriceSpread(argument.StopLossArg.StopLossCondition, priceSpread)) { PriceSpreadCheckResult result = new PriceSpreadCheckResult(); result.OrderReason = TaskOrderReason.StopLoss; result.PriceSpreadThreshold = argument.StopLossArg.StopLossCondition.PriceSpreadThreshold; return(result); } } } return(PriceSpreadCheckResult.CreateNoOrderResult()); }
public OrderInfo(string code, double orderTime, OpenCloseType openClose, double price, int qty, OrderSide direction) : this(code, orderTime, openClose, price, qty, direction, OrderType.Market) { }