示例#1
0
        /// <summary>
        /// 秒表方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer_Tick(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();

            CTPDLL.getSettlementInfo(m_ctpID, sb);
            if (sb.Length > 0)
            {
                rtbSettlement.Text = sb.ToString();
            }
        }
示例#2
0
 /// <summary>
 /// 查询方法
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnQuery_Click(object sender, EventArgs e)
 {
     if (cbSetDate.Checked)
     {
         CTPDLL.reqQrySettlementInfo(m_ctpID, CTPDLL.generateReqID(m_ctpID), dtpDate.Value.ToString("yyyyMMdd"));
     }
     else
     {
         CTPDLL.reqQrySettlementInfo(m_ctpID, CTPDLL.generateReqID(m_ctpID), "");
     }
 }
示例#3
0
        /// <summary>
        /// 平仓
        /// </summary>
        /// <param name="investorPosition">持仓</param>
        /// <param name="code">代码</param>
        /// <param name="direction">方向</param>
        /// <param name="close">最新价</param>
        /// <param name="openPrice">开仓价</param>
        /// <param name="state">state=0为手动平仓,其余为自动</param>
        public static void askOrBidClose(InvestorPosition investorPosition, String code, String direction, double close, double openPrice, int state)
        {
            //如果持仓为0,则不检查
            if (investorPosition.m_position == 0)
            {
                return;
            }
            //获取对应的行情数据
            SecurityLatestData latestData = null;

            lock (m_latestDatas) {
                if (m_latestDatas.ContainsKey(code))
                {
                    latestData = m_latestDatas[code];
                }
            }
            if (latestData != null)
            {
                //获取的码表
                Security security = null;
                lock (m_securities) {
                    if (m_securities.ContainsKey(investorPosition.m_code))
                    {
                        security = m_securities[investorPosition.m_code];
                    }
                }
                if (security != null)
                {
                    bool canTrade = true;
                    //检查冷却时间,一次平仓10秒后才能再次平仓
                    if (state != 0)
                    {
                        lock (m_cd2) {
                            if (m_cd2.ContainsKey(investorPosition.m_code))
                            {
                                if (m_cd2[investorPosition.m_code] > 0)
                                {
                                    canTrade = false;
                                }
                            }
                        }
                    }
                    //获取昨仓
                    int ydPosition = investorPosition.m_ydPosition;
                    //获取今仓
                    int todayPosition = investorPosition.m_position - ydPosition;
                    if (canTrade)
                    {
                        bool isSh = security.m_exchangeID == "SHFE";
                        //买开仓情况下
                        if (direction == "买")
                        {
                            //上期所处理方法
                            if (isSh)
                            {
                                //平昨
                                if (ydPosition > 0)
                                {
                                    CTPDLL.askClose(m_ctpID, CTPDLL.generateReqID(m_ctpID), investorPosition.m_code, security.m_exchangeID, 0, ydPosition, '3', "");
                                }
                                //平今
                                if (todayPosition > 0)
                                {
                                    CTPDLL.askCloseToday(m_ctpID, CTPDLL.generateReqID(m_ctpID), investorPosition.m_code, security.m_exchangeID, 0, todayPosition, '3', "");
                                }
                            }
                            //其他交易所处理方法
                            else
                            {
                                CTPDLL.askClose(m_ctpID, CTPDLL.generateReqID(m_ctpID), investorPosition.m_code, security.m_exchangeID, 0, investorPosition.m_position, '3', "");
                            }
                            //打印日志
                            if (state == 1)
                            {
                                FCStrEx.writeLog(String.Format("自动止盈,开仓价{0},当前价{1},买平仓,代码{2},价格{3},数量{4}\r\n",
                                                               openPrice, close, investorPosition.m_code, latestData.m_bidPrice1, investorPosition.m_position));
                            }
                            else if (state == 2)
                            {
                                FCStrEx.writeLog(String.Format("自动止损,开仓价{0},当前价{1},买平仓,代码{2},价格{3},数量{4}\r\n",
                                                               openPrice, close, investorPosition.m_code, latestData.m_bidPrice1, investorPosition.m_position));
                            }
                            //开仓冷却时间+10
                            lock (m_cd1) {
                                if (m_cd1.ContainsKey(investorPosition.m_code))
                                {
                                    m_cd1[investorPosition.m_code] += 10;
                                }
                                else
                                {
                                    m_cd1[investorPosition.m_code] = 10;
                                }
                            }
                            //平仓冷却时间重置
                            lock (m_cd2) {
                                m_cd2[investorPosition.m_code] = 10;
                            }
                        }
                        //卖开仓情况下
                        else if (direction == "卖")
                        {
                            //上期所处理方法
                            if (isSh)
                            {
                                //平昨
                                if (ydPosition > 0)
                                {
                                    CTPDLL.bidClose(m_ctpID, CTPDLL.generateReqID(m_ctpID), investorPosition.m_code, security.m_exchangeID, 0, ydPosition, '3', "");
                                }
                                //平今
                                if (todayPosition > 0)
                                {
                                    CTPDLL.bidCloseToday(m_ctpID, CTPDLL.generateReqID(m_ctpID), investorPosition.m_code, security.m_exchangeID, 0, todayPosition, '3', "");
                                }
                            }
                            //其他交易所处理方法
                            else
                            {
                                CTPDLL.bidClose(m_ctpID, CTPDLL.generateReqID(m_ctpID), investorPosition.m_code, security.m_exchangeID, 0, investorPosition.m_position, '3', "");
                            }
                            //打印日志
                            if (state == 1)
                            {
                                FCStrEx.writeLog(String.Format("自动止盈,开仓价{0},当前价{1},卖平仓,代码{2},价格{3},数量{4}\r\n",
                                                               openPrice, close, investorPosition.m_code, latestData.m_bidPrice1, investorPosition.m_position));
                            }
                            else if (state == 2)
                            {
                                FCStrEx.writeLog(String.Format("自动止损,开仓价{0},当前价{1},卖平仓,代码{2},价格{3},数量{4}\r\n",
                                                               openPrice, close, investorPosition.m_code, latestData.m_bidPrice1, investorPosition.m_position));
                            }
                            //开仓冷却时间+10
                            lock (m_cd1) {
                                if (m_cd1.ContainsKey(investorPosition.m_code))
                                {
                                    m_cd1[investorPosition.m_code] += 10;
                                }
                                else
                                {
                                    m_cd1[investorPosition.m_code] = 10;
                                }
                            }
                            //平仓冷却时间重置
                            lock (m_cd2) {
                                m_cd2[investorPosition.m_code] = 10;
                            }
                        }
                    }
                }
            }
        }
示例#4
0
 /// <summary>
 /// 查询结算信息
 /// </summary>
 /// <param name="ctpID"></param>
 /// <param name="tradingDay"></param>
 public void QuerySettlementInfo(int ctpID, String tradingDay)
 {
     CTPDLL.reqQrySettlementInfo(ctpID, CTPDLL.generateReqID(m_ctpID), tradingDay);
     m_ctpID = ctpID;
 }
示例#5
0
 /// <summary>
 /// 触发开仓
 /// </summary>
 /// <param name="data">最新数据</param>
 public static void doOpen(SecurityLatestData data)
 {
     //执行买开仓
     if (data.m_state1 == 1 && data.m_state2 == 1)
     {
         //判断是否有持仓
         bool hasTrade = inTrade(data.m_code);
         if (!hasTrade)
         {
             String key = data.m_code + "买";
             //判断冷却时间
             bool canTrade = true;
             lock (Strategy1.m_cd1) {
                 if (Strategy1.m_cd1.ContainsKey(data.m_code))
                 {
                     if (Strategy1.m_cd1[data.m_code] > 0)
                     {
                         canTrade = false;
                     }
                 }
             }
             if (canTrade)
             {
                 //获取默认交易手数
                 int tradeVol = 1;
                 if (m_tradeVolumes.ContainsKey(key))
                 {
                     tradeVol = m_tradeVolumes[key];
                 }
                 //打印日志
                 FCStrEx.writeLog(String.Format("创近20日新高,均线上翘,买开仓,代码{0},价格{1},数量{2}\r\n",
                                                data.m_code, data.m_askPrice1, tradeVol));
                 Security security = null;
                 lock (m_securities) {
                     if (m_securities.ContainsKey(data.m_code))
                     {
                         security = m_securities[data.m_code];
                     }
                 }
                 //买开仓
                 CTPDLL.bidOpen(Strategy1.m_ctpID, CTPDLL.generateReqID(Strategy1.m_ctpID), data.m_code, security.m_exchangeID, data.m_askPrice1, tradeVol, '3', "");
                 //刷新开仓冷却时间
                 lock (Strategy1.m_cd1) {
                     Strategy1.m_cd1[data.m_code] = 60;
                 }
             }
         }
     }
     //执行卖开仓
     if (data.m_state3 == 1 && data.m_state4 == 1)
     {
         //判断是否有持仓
         bool hasTrade = inTrade(data.m_code);
         if (!hasTrade)
         {
             String key = data.m_code + "卖";
             //判断冷却时间
             bool canTrade = true;
             lock (Strategy1.m_cd1) {
                 if (Strategy1.m_cd1.ContainsKey(data.m_code))
                 {
                     if (Strategy1.m_cd1[data.m_code] > 0)
                     {
                         canTrade = false;
                     }
                 }
             }
             if (canTrade)
             {
                 //获取默认交易手数
                 int tradeVol = 1;
                 if (m_tradeVolumes.ContainsKey(key))
                 {
                     tradeVol = m_tradeVolumes[key];
                 }
                 //打印日志
                 FCStrEx.writeLog(String.Format("创近20日新低,均线下翘,卖开仓,代码{0},价格{1},数量{2}\r\n",
                                                data.m_code, data.m_askPrice1, tradeVol));
                 Security security = null;
                 lock (m_securities) {
                     if (m_securities.ContainsKey(data.m_code))
                     {
                         security = m_securities[data.m_code];
                     }
                 }
                 //卖开仓
                 CTPDLL.askOpen(Strategy1.m_ctpID, CTPDLL.generateReqID(Strategy1.m_ctpID), data.m_code, security.m_exchangeID, data.m_bidPrice1, tradeVol, '3', "");
                 //刷新开仓冷却时间
                 lock (Strategy1.m_cd1) {
                     Strategy1.m_cd1[data.m_code] = 60;
                 }
             }
         }
     }
 }