コード例 #1
0
        private void Send(SPOrderItem item)
        {
            if (item == null)
            {
                return;
            }

            SingleOrder order  = item.Leg[0].Order;
            SingleOrder order2 = item.Leg[1].Order;

            string symbol = item.GetSymbol();
            double price  = order.Price - order2.Price;
            int    qty    = (int)order.OrderQty;

            // 是否要做价格调整?
            byte[] bytes            = { (byte)CTPAPI.ToCTP(item.Leg[0].OpenClose), (byte)CTPAPI.ToCTP(item.Leg[1].OpenClose) };
            string szCombOffsetFlag = System.Text.Encoding.Default.GetString(bytes, 0, bytes.Length);

            byte[] bytes2          = { (byte)HedgeFlagType, (byte)HedgeFlagType };
            string szCombHedgeFlag = System.Text.Encoding.Default.GetString(bytes2, 0, bytes2.Length);

            TThostFtdcDirectionType           Direction           = order.Side == Side.Buy ? TThostFtdcDirectionType.Buy : TThostFtdcDirectionType.Sell;
            TThostFtdcOrderPriceTypeType      OrderPriceType      = TThostFtdcOrderPriceTypeType.LimitPrice;
            TThostFtdcTimeConditionType       TimeCondition       = TThostFtdcTimeConditionType.GFD;
            TThostFtdcContingentConditionType ContingentCondition = TThostFtdcContingentConditionType.Immediately;
            TThostFtdcVolumeConditionType     VolumeCondition     = TThostFtdcVolumeConditionType.AV;

            int nRet = 0;

#if CTP
            nRet = TraderApi.TD_SendOrder(m_pTdApi,
                                          -1,
                                          symbol,
                                          Direction,
                                          szCombOffsetFlag,
                                          szCombHedgeFlag,
                                          qty,
                                          price,
                                          OrderPriceType,
                                          TimeCondition,
                                          ContingentCondition,
                                          0,
                                          VolumeCondition);
#endif
            if (nRet > 0)
            {
                orderMap.CreateNewOrder(string.Format("{0}:{1}:{2}", _RspUserLogin.FrontID, _RspUserLogin.SessionID, nRet), item);
            }
        }
コード例 #2
0
        private void Send(QuoteOrderItem item)
        {
            if (item == null)
            {
                return;
            }

            SingleOrder AskOrder = item.Sell.Order;
            SingleOrder BidOrder = item.Buy.Order;

            string symbol = item.Buy.Order.Symbol;

            double AskPrice  = AskOrder.Price;
            double BidPrice  = BidOrder.Price;
            int    AskVolume = (int)AskOrder.OrderQty;
            int    BidVolume = (int)BidOrder.OrderQty;

            TThostFtdcOffsetFlagType AskOffsetFlag = CTPAPI.ToCTP(item.Sell.OpenClose);
            TThostFtdcOffsetFlagType BidOffsetFlag = CTPAPI.ToCTP(item.Buy.OpenClose);

            TThostFtdcHedgeFlagType AskHedgeFlag = HedgeFlagType;
            TThostFtdcHedgeFlagType BidHedgeFlag = HedgeFlagType;

            int nRet = 0;

#if CTP
            nRet = TraderApi.TD_SendQuote(m_pTdApi,
                                          -1,
                                          symbol,
                                          AskPrice,
                                          BidPrice,
                                          AskVolume,
                                          BidVolume,
                                          AskOffsetFlag,
                                          BidOffsetFlag,
                                          AskHedgeFlag,
                                          BidHedgeFlag);
#endif
            if (nRet > 0)
            {
                orderMap.CreateNewOrder(string.Format("{0}:{1}:{2}", _RspUserLogin.FrontID, _RspUserLogin.SessionID, nRet), item);
            }
        }
コード例 #3
0
        private void Send(CommonOrderItem item)
        {
            if (item == null)
            {
                return;
            }

            SingleOrder order = item.Leg.Order;

            string apiSymbol;
            string apiExchange;
            double apiTickSize;
            string altSymbol;

#if CTP
            GetInstrumentInfoForCTP(order.Instrument, out apiSymbol, out apiExchange, out apiTickSize);
            altSymbol = apiSymbol;
#elif CTPZQ
            GetInstrumentInfoForCTPZQ(order.Instrument, out apiSymbol, out apiExchange, out apiTickSize, out altSymbol);
#endif
            double price = order.Price;
            int    qty   = (int)order.OrderQty;

            //市价修正,如果不连接行情,此修正不执行,得策略层处理
            CThostFtdcDepthMarketDataField DepthMarket;
            //如果取出来了,并且为有效的,涨跌停价将不为0
            _dictDepthMarketData.TryGetValue(altSymbol, out DepthMarket);

            //市价单模拟
            if (OrdType.Market == order.OrdType)
            {
                //按买卖调整价格
                if (order.Side == Side.Buy)
                {
                    price = DepthMarket.LastPrice + LastPricePlusNTicks * apiTickSize;
                }
                else
                {
                    price = DepthMarket.LastPrice - LastPricePlusNTicks * apiTickSize;
                }
            }

            price = FixPrice(price, order.Side, apiTickSize, DepthMarket.LowerLimitPrice, DepthMarket.UpperLimitPrice);

            // 是否要做价格调整?
            byte[] bytes            = { (byte)CTPAPI.ToCTP(item.Leg.OpenClose) };
            string szCombOffsetFlag = System.Text.Encoding.Default.GetString(bytes, 0, bytes.Length);

            byte[] bytes2          = { (byte)HedgeFlagType };
            string szCombHedgeFlag = System.Text.Encoding.Default.GetString(bytes2, 0, bytes2.Length);

            TThostFtdcDirectionType           Direction           = order.Side == Side.Buy ? TThostFtdcDirectionType.Buy : TThostFtdcDirectionType.Sell;
            TThostFtdcOrderPriceTypeType      OrderPriceType      = TThostFtdcOrderPriceTypeType.LimitPrice;
            TThostFtdcTimeConditionType       TimeCondition       = TThostFtdcTimeConditionType.GFD;
            TThostFtdcContingentConditionType ContingentCondition = TThostFtdcContingentConditionType.Immediately;
            TThostFtdcVolumeConditionType     VolumeCondition     = TThostFtdcVolumeConditionType.AV;


#if CTP
            bool bSupportMarketOrder = SupportMarketOrder.Contains(apiExchange);
#elif CTPZQ
            bool bSupportMarketOrder = true;
#endif

            switch (order.TimeInForce)
            {
            case TimeInForce.IOC:
                TimeCondition   = TThostFtdcTimeConditionType.IOC;
                VolumeCondition = TThostFtdcVolumeConditionType.AV;
                break;

            case TimeInForce.FOK:
                TimeCondition   = TThostFtdcTimeConditionType.IOC;
                VolumeCondition = TThostFtdcVolumeConditionType.CV;
                break;

            default:
                break;
            }

            int nRet = 0;

            switch (order.OrdType)
            {
            case OrdType.Limit:
                break;

            case OrdType.Market:
                if (SwitchMakertOrderToLimitOrder || !bSupportMarketOrder)
                {
                }
                else
                {
                    price          = 0;
                    OrderPriceType = TThostFtdcOrderPriceTypeType.AnyPrice;
                    TimeCondition  = TThostFtdcTimeConditionType.IOC;
                }
                break;

            default:
                tdlog.Warn("没有实现{0}", order.OrdType);
                return;
            }

#if CTP
            nRet = TraderApi.TD_SendOrder(m_pTdApi,
                                          apiSymbol,
                                          Direction,
                                          szCombOffsetFlag,
                                          szCombHedgeFlag,
                                          qty,
                                          price,
                                          OrderPriceType,
                                          TimeCondition,
                                          ContingentCondition,
                                          order.StopPx,
                                          VolumeCondition);
#elif CTPZQ
            nRet = TraderApi.TD_SendOrder(m_pTdApi,
                                          apiSymbol,
                                          apiExchange,
                                          Direction,
                                          szCombOffsetFlag,
                                          szCombHedgeFlag,
                                          qty,
                                          string.Format("{0}", price),
                                          OrderPriceType,
                                          TimeCondition,
                                          ContingentCondition,
                                          order.StopPx,
                                          VolumeCondition);
#endif
            if (nRet > 0)
            {
                orderMap.CreateNewOrder(string.Format("{0}:{1}:{2}", _RspUserLogin.FrontID, _RspUserLogin.SessionID, nRet), item);
            }
        }