Exemplo n.º 1
0
        public static EnumOpenClose CheckOpenClose(Order order)
        {
            string        text      = order.Text;
            EnumOpenClose OpenClose = EnumOpenClose.OPEN;

            if (text.StartsWith("{") && text.EndsWith("}"))
            {
                TextParameter parameter = JsonConvert.DeserializeObject <TextParameter>(text);
                switch (parameter.Type)
                {
                case EnumGroupType.COMMON:
                {
                    TextCommon t = JsonConvert.DeserializeObject <TextCommon>(text);
                    OpenClose = t.OpenClose;
                }
                break;

                case EnumGroupType.QUOTE:
                {
                    TextQuote t = JsonConvert.DeserializeObject <TextQuote>(text);
                    OpenClose = t.OpenClose;
                }
                break;
                }
            }

            return(OpenClose);
        }
Exemplo n.º 2
0
        public override void Init(TextCommon t)
        {
            base.Init(t);

            TextQuote q = t as TextQuote;

            QuoteID  = q.QuoteID;
            StayTime = q.StayTime;
        }
Exemplo n.º 3
0
        public override void Add(SingleOrder order, TextCommon t)
        {
            if (Index >= GetLegNum())
            {
                return;
            }

            Leg[Index] = new MultiOrderLeg {
                Order = order, OpenClose = t.OpenClose
            };
            ++Index;
        }
Exemplo n.º 4
0
        public static EnumOpenClose CheckOpenClose(Order order)
        {
            string        text      = order.Text;
            EnumOpenClose OpenClose = EnumOpenClose.OPEN;

            if (text.StartsWith("{") && text.EndsWith("}"))
            {
                TextCommon parameter = JsonConvert.DeserializeObject <TextCommon>(text);
                OpenClose = parameter.OpenClose;
            }

            return(OpenClose);
        }
Exemplo n.º 5
0
        public override void OnStrategyStart()
        {
            base.OnStrategyStart();

            TargetOrderBook = new OrderBook_BothSide_Size();
            TargetOrderBook.Sell.PriceHelper = base.PriceHelper;
            TargetOrderBook.Buy.PriceHelper  = base.PriceHelper;
            TextParameterAsk = new TextCommon()
            {
                OpenClose = EnumOpenClose.OPEN
            };
            TextParameterBid = new TextCommon()
            {
                OpenClose = EnumOpenClose.OPEN
            };
        }
Exemplo n.º 6
0
 public override void Add(SingleOrder order, TextCommon t)
 {
     if (order.Side == Side.Buy)
     {
         Buy = new MultiOrderLeg()
         {
             Order = order, OpenClose = t.OpenClose
         };
     }
     else
     {
         Sell = new MultiOrderLeg()
         {
             Order = order, OpenClose = t.OpenClose
         };
     }
 }
Exemplo n.º 7
0
        public override void OnStrategyStart()
        {
            TimeHelper    = new TimeHelper(Instrument.Symbol);
            PriceHelper   = new PriceHelper(Instrument.TickSize);
            TextParameter = new TextCommon()
            {
                OpenClose = EnumOpenClose.OPEN
            };
            CloseTodayHelper = new CloseTodayHelper(EnumExchangeID.SHFE);

            DualPosition = new DualPosition();
            DualPosition.Sell.PriceHelper = PriceHelper;
            DualPosition.Buy.PriceHelper  = PriceHelper;
            DualPosition.CloseTodayHelper = CloseTodayHelper;

            // 测试代码
            //TargetPosition = 3;
            DualPosition.Long.Qty  = 0;
            DualPosition.Short.Qty = 0;
        }
Exemplo n.º 8
0
 public override void Add(SingleOrder order, TextCommon t)
 {
     Leg = new MultiOrderLeg {
         Order = order, OpenClose = t.OpenClose
     };
 }
Exemplo n.º 9
0
 public override void Init(TextCommon t)
 {
     base.Init(t);
     Leg = null;
 }
Exemplo n.º 10
0
 public virtual void Add(SingleOrder order, TextCommon t)
 {
 }
Exemplo n.º 11
0
 public virtual void Init(TextCommon t)
 {
     TextRequest = t;
 }
Exemplo n.º 12
0
        private void Send(NewOrderSingle order)
        {
            if (!_bTdConnected)
            {
                EmitError(-1, -1, "交易服务器没有连接,无法报单");
                tdlog.Error("交易服务器没有连接,无法报单");
                return;
            }

            // 表示特殊的Json格式
            if (order.Text.StartsWith("{") && order.Text.EndsWith("}"))
            {
                TextParameter parameter = JsonConvert.DeserializeObject <TextParameter>(order.Text);
                switch (parameter.Type)
                {
                case EnumGroupType.COMMON:
                {
                    TextCommon      t    = JsonConvert.DeserializeObject <TextCommon>(order.Text);
                    CommonOrderItem item = CommonOrderCombiner.Add(order as SingleOrder, t);
                    Send(item);
                }
                break;

                case EnumGroupType.QUOTE:
                {
                    TextQuote      t    = JsonConvert.DeserializeObject <TextQuote>(order.Text);
                    QuoteOrderItem item = QuoteOrderCombiner.Add(order as SingleOrder, t);
                }
                break;

                case EnumGroupType.SP:
                {
                    TextSP      t    = JsonConvert.DeserializeObject <TextSP>(order.Text);
                    SPOrderItem item = SPOrderCombiner.Add(order as SingleOrder, t);
                    Send(item);
                }
                break;

                case EnumGroupType.SPC:
                {
                    TextSPC      t    = JsonConvert.DeserializeObject <TextSPC>(order.Text);
                    SPCOrderItem item = SPCOrderCombiner.Add(order as SingleOrder, t);
                    Send(item);
                }
                break;

                case EnumGroupType.SPD:
                {
                    TextSPD      t    = JsonConvert.DeserializeObject <TextSPD>(order.Text);
                    SPDOrderItem item = SPDOrderCombiner.Add(order as SingleOrder, t);
                    Send(item);
                }
                break;
                }
            }
            else
            {
                // 无法识别的格式,直接发送报单,只开仓
                TextCommon t = new TextCommon()
                {
                    Type      = EnumGroupType.COMMON,
                    OpenClose = EnumOpenClose.OPEN
                };
                CommonOrderItem item = CommonOrderCombiner.Add(order as SingleOrder, t);
                Send(item);
            }
        }
Exemplo n.º 13
0
 public override void Init(TextCommon t)
 {
     base.Init(t);
     Index = 0;
 }
Exemplo n.º 14
0
        // 这里假设已经挂的单子已经是按最优数量进行处理过,目标是直接挂单
        // 目前对前两层做智能开平,后面的全用开仓单
        // 因为后面的使用平仓单,还要处理复杂的大量开挂单的问题。
        // 实际上不能太深,因为深了占用资金
        public int 单边全面补单(OrderBook_OneSide_Order buy1, OrderBook_OneSide_Size buy2)
        {
            int cnt = 0;
            List <CopyOrder> list = new List <CopyOrder>();

            // 方向不对,不可能补单
            if (buy1.Side != buy2.Side)
            {
                return(cnt);
            }

            TextCommon     tp        = buy1.Side == OrderSide.Buy ? TextParameterBid : TextParameterAsk;
            PositionRecord LongShort = buy1.Side == OrderSide.Buy ? base.DualPosition.Short : base.DualPosition.Long;

            lock (this)
            {
                int l = 0;
                // 由于在别的地方做了撤单,在这buy2中的数量是大于等于buy1的
                foreach (var b2 in buy2.GridList)
                {
                    ++l;
                    int    level = b2.Key;
                    double size  = b2.Value;

                    // 要补单的数量
                    double leave = size - buy1.SizeByLevel(level);
                    if (leave <= 0)
                    {
                        continue;
                    }

                    double price = PriceHelper.GetPriceByLevel(level);
                    cnt += (int)leave;

                    // 超过两层的全用开仓
                    if (l > AlwaysOpenIfDepthGreatThan)
                    {
                        tp.OpenClose = EnumOpenClose.OPEN;
                        tp.Text      = string.Format("{0}层,开仓补单", l);
                    }
                    else
                    {
                        // 计算开平
                        double q = CloseTodayHelper.GetCloseAndQty(LongShort, out tp.OpenClose);
                        if (q < leave)
                        {
                            tp.OpenClose = EnumOpenClose.OPEN;
                            tp.Text      = string.Format("开仓:可平量{0}<{1}", q, leave);
                        }
                        else
                        {
                            tp.Text = string.Format("平仓:可平量{0}>={1}", q, leave);
                        }
                    }


                    // 入场下单
                    // 在模拟下,这个地方有可能导致成交回报lock
                    //SendLimitOrder(buy2.Side, leave, price, tp.ToString());

                    list.Add(new CopyOrder()
                    {
                        Side  = buy2.Side,
                        Qty   = leave,
                        Price = price,
                        Text  = tp.ToString(),
                    });
                }
            }

            foreach (var o in list)
            {
                SendLimitOrder(o.Side, o.Qty, o.Price, o.Text);
            }

            return(cnt);
        }