/// <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(); } }
/// <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), ""); } }
/// <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; } } } } } }
/// <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; }
/// <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; } } } } }