示例#1
0
        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;
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#5
0
        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;
            }
        }
示例#6
0
        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));
        }
示例#7
0
        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);
            }
        }
示例#8
0
 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;
 }
示例#9
0
 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;
 }
示例#10
0
        private OpenCloseType OnOrderCancelled(Order order)
        {
            OpenCloseType      OpenClose = OpenCloseHelper.GetOpenClose(order);
            MonoPositionRecord record    = GetPositionRecord(order.Side, OpenClose);

            ++record.CumCancelCnt;

            OnOrderRejected(order);

            return(OpenClose);
        }
示例#11
0
        public static OpenCloseType GetOpenClose(Order order)
        {
            object obj = order.GetOpenClose();

            if (obj == null)
            {
                return(OpenCloseType.Close);
            }
            OpenCloseType OpenClose = (OpenCloseType)obj;

            return(OpenClose);
        }
示例#12
0
 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;
 }
示例#13
0
        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);
         }
 }
示例#15
0
        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);
        }
示例#17
0
        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);
        }
示例#18
0
        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("");
        }
示例#19
0
        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);
        }
示例#21
0
 public static Order SetOpenClose(this Order order, OpenCloseType OpenClose)
 {
     order.GetDictionary(index)[OrderTagType.PositionEffect] = (byte)OpenClose;
     return(order);
 }
示例#22
0
 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());
        }
示例#24
0
 public OrderInfo(string code, double orderTime, OpenCloseType openClose, double price, int qty, OrderSide direction) : this(code, orderTime, openClose, price, qty, direction, OrderType.Market)
 {
 }