龙听期货论坛's Archiver

龙听 发表于 2024-9-26 15:59

鼎元C++程序化交易系统教程【套利模板核心策略程式码部分】

核心策略程式码部分:[code]//核心策略设计开始............................................................................................................................
void test::OnMarketData(CThostFtdcDepthMarketDataField* t)
{
        if (state != "run")return;
        mapMd[t->InstrumentID] = *t;
        string sss = t->UpdateTime;
        if (sss == "20:59:00" || sss == "08:59:00")return;
        if (t->InstrumentID != sInst)return;
        //if (t->InstrumentID != dyt && t->InstrumentID != det)return;
        if (mapMd[dyt].BidPrice1 == 0 || mapMd[dyt].AskPrice1 == 0 || mapMd[det].BidPrice1 == 0 || mapMd[det].AskPrice1 == 0)return;
        if (yfd)return;
        sss = t->UpdateTime;
        if (sss == "20:59:00" || sss == "08:59:00")return;
        if (bsfx == "0")
        {
                jc = mapMd[dyt].AskPrice1 - mapMd[det].BidPrice1;
        }
        else if (bsfx == "1")
        {
                jc = mapMd[dyt].BidPrice1 - mapMd[det].AskPrice1;
        }
        if ((tjjcfx == "1" && jc >= tjjc && mapMd[dyt].AskVolume1 > gdl && mapMd[det].BidVolume1 > gdl) || (tjjcfx == "-1" && jc <= tjjc && mapMd[dyt].BidVolume1 > gdl && mapMd[det].AskVolume1 > gdl))
        {
                if (bsfx == "0")
                {
                        if (ocfx == "0")
                        {
                                dytcj = false; detcj = false;
                                map<string, double>::iterator it;
                                for (it = mapSub.begin(); it != mapSub.end(); it++)
                                {
                                        int ss = (int)floor(it->second * sl);
                                        OrderInsert(it->first, dyt, '0', '0', ss, mapMd[dyt].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
                                        OrderInsert(it->first, det, '1', '0', ss, mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick, "", "");
                                        yfd = true;
                                        string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->first + "    达到套利价差交易条件买入开仓,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[det].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc);

                                        maps[num] = s;
                                        num++;
                                        InsertLog(it->first + "    达到套利价差交易条件买入开仓,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[det].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
                                }
                        }
                        else if (ocfx == "1")
                        {
                                dytcj = false; detcj = false;
                                map<string, double>::iterator it;
                                for (it = mapSub.begin(); it != mapSub.end(); it++)
                                {
                                        int ss = (int)floor(it->second * sl);
                                        OrderInsert(it->first, dyt, '0', '1', ss, mapMd[dyt].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
                                        OrderInsert(it->first, det, '1', '1', ss, mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick, "", "");
                                        yfd = true;
                                        string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->first + "    达到套利价差交易条件买入平仓,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc);

                                        maps[num] = s;
                                        num++;
                                        InsertLog(it->first + "    达到套利价差交易条件买入平仓,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
                                }
                        }
                        else if (ocfx == "3")
                        {
                                dytcj = false; detcj = false;
                                map<string, double>::iterator it;
                                for (it = mapSub.begin(); it != mapSub.end(); it++)
                                {
                                        int ss = (int)floor(it->second * sl);
                                        OrderInsert(it->first, dyt, '0', '3', ss, mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick, "", "");
                                        OrderInsert(it->first, det, '1', '3', ss, mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick, "", "");
                                        yfd = true;
                                        string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->first + "    达到套利价差交易条件买入平今,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc);

                                        maps[num] = s;
                                        num++;
                                        InsertLog(it->first + "    达到套利价差交易条件买入平今,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
                                }
                        }
                        else if (ocfx == "4")
                        {
                                dytcj = false; detcj = false;
                                map<string, double>::iterator it;
                                for (it = mapSub.begin(); it != mapSub.end(); it++)
                                {
                                        int ss = (int)floor(it->second * sl);
                                        OrderInsert(it->first, dyt, '0', '4', ss, mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick, "", "");
                                        OrderInsert(it->first, det, '1', '4', ss, mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick, "", "");
                                        yfd = true;
                                        string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->first + "    达到套利价差交易条件买入平昨,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc);

                                        maps[num] = s;
                                        num++;
                                        InsertLog(it->first + "    达到套利价差交易条件买入平昨,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
                                }
                        }

                }
                else if (bsfx == "1")
                {
                        if (ocfx == "0")
                        {
                                dytcj = false; detcj = false;
                                map<string, double>::iterator it;
                                for (it = mapSub.begin(); it != mapSub.end(); it++)
                                {
                                        int ss = (int)floor(it->second * sl);
                                        OrderInsert(it->first, dyt, '1', '0', ss, mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick, "", "");
                                        OrderInsert(it->first, det, '0', '0', ss, mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
                                        yfd = true;
                                        string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->first + "    达到套利价差交易条件卖出开仓,第一腿价格    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc);
                                        maps[num] = s;
                                        num++;
                                        InsertLog(it->first + "    达到套利价差交易条件卖出开仓,第一腿价格    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
                                }
                        }
                        else if (ocfx == "1")
                        {
                                dytcj = false; detcj = false;
                                map<string, double>::iterator it;
                                for (it = mapSub.begin(); it != mapSub.end(); it++)
                                {
                                        int ss = (int)floor(it->second * sl);
                                        OrderInsert(it->first, dyt, '1', '1', ss, mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick, "", "");
                                        OrderInsert(it->first, det, '0', '1', ss, mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
                                        yfd = true;
                                        string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->first + "    达到套利价差交易条件卖出平仓,第一腿价格    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc);
                                        maps[num] = s;
                                        num++;
                                        InsertLog(it->first + "    达到套利价差交易条件卖出平仓,第一腿价格    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
                                }
                        }
                        else if (ocfx == "3")
                        {
                                dytcj = false; detcj = false;
                                map<string, double>::iterator it;
                                for (it = mapSub.begin(); it != mapSub.end(); it++)
                                {
                                        int ss = (int)floor(it->second * sl);
                                        OrderInsert(it->first, dyt, '1', '3', ss, mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick, "", "");
                                        OrderInsert(it->first, det, '0', '3', ss, mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
                                        yfd = true;
                                        string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->first + "    达到套利价差交易条件,第一腿价格卖出平今    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc);

                                        maps[num] = s;
                                        num++;
                                        InsertLog(it->first + "    达到套利价差交易条件,第一腿价格卖出平今    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
                                }
                        }
                        else if (ocfx == "4")
                        {
                                dytcj = false; detcj = false;
                                map<string, double>::iterator it;
                                for (it = mapSub.begin(); it != mapSub.end(); it++)
                                {
                                        int ss = (int)floor(it->second * sl);
                                        OrderInsert(it->first, dyt, '1', '4', ss, mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick, "", "");
                                        OrderInsert(it->first, det, '0', '4', ss, mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
                                        yfd = true;
                                        string s = t1 + ":" + t2 + ":" + t3 + ":" + t4 + "    " + it->first + "    达到套利价差交易条件,第一腿价格卖出平昨    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc);

                                        maps[num] = s;
                                        num++;
                                        InsertLog(it->first + "    达到套利价差交易条件,第一腿价格卖出平昨    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
                                }
                        }
                }
                if (num != 0)shuchurizhi();
                tm = 0;
        }
}
//核心策略设计结束............................................................................................................................[/code]

页: [1]