: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

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

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

核心策略程式码部分:
  1. //核心策略设计开始............................................................................................................................
  2. void test::OnMarketData(CThostFtdcDepthMarketDataField* t)
  3. {
  4.         if (state != "run")return;
  5.         mapMd[t->InstrumentID] = *t;
  6.         string sss = t->UpdateTime;
  7.         if (sss == "20:59:00" || sss == "08:59:00")return;
  8.         if (t->InstrumentID != sInst)return;
  9.         //if (t->InstrumentID != dyt && t->InstrumentID != det)return;
  10.         if (mapMd[dyt].BidPrice1 == 0 || mapMd[dyt].AskPrice1 == 0 || mapMd[det].BidPrice1 == 0 || mapMd[det].AskPrice1 == 0)return;
  11.         if (yfd)return;
  12.         sss = t->UpdateTime;
  13.         if (sss == "20:59:00" || sss == "08:59:00")return;
  14.         if (bsfx == "0")
  15.         {
  16.                 jc = mapMd[dyt].AskPrice1 - mapMd[det].BidPrice1;
  17.         }
  18.         else if (bsfx == "1")
  19.         {
  20.                 jc = mapMd[dyt].BidPrice1 - mapMd[det].AskPrice1;
  21.         }
  22.         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))
  23.         {
  24.                 if (bsfx == "0")
  25.                 {
  26.                         if (ocfx == "0")
  27.                         {
  28.                                 dytcj = false; detcj = false;
  29.                                 map<string, double>::iterator it;
  30.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  31.                                 {
  32.                                         int ss = (int)floor(it->second * sl);
  33.                                         OrderInsert(it->first, dyt, '0', '0', ss, mapMd[dyt].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
  34.                                         OrderInsert(it->first, det, '1', '0', ss, mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick, "", "");
  35.                                         yfd = true;
  36.                                         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);

  37.                                         maps[num] = s;
  38.                                         num++;
  39.                                         InsertLog(it->first + "    达到套利价差交易条件买入开仓,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[det].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
  40.                                 }
  41.                         }
  42.                         else if (ocfx == "1")
  43.                         {
  44.                                 dytcj = false; detcj = false;
  45.                                 map<string, double>::iterator it;
  46.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  47.                                 {
  48.                                         int ss = (int)floor(it->second * sl);
  49.                                         OrderInsert(it->first, dyt, '0', '1', ss, mapMd[dyt].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
  50.                                         OrderInsert(it->first, det, '1', '1', ss, mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick, "", "");
  51.                                         yfd = true;
  52.                                         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);

  53.                                         maps[num] = s;
  54.                                         num++;
  55.                                         InsertLog(it->first + "    达到套利价差交易条件买入平仓,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
  56.                                 }
  57.                         }
  58.                         else if (ocfx == "3")
  59.                         {
  60.                                 dytcj = false; detcj = false;
  61.                                 map<string, double>::iterator it;
  62.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  63.                                 {
  64.                                         int ss = (int)floor(it->second * sl);
  65.                                         OrderInsert(it->first, dyt, '0', '3', ss, mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick, "", "");
  66.                                         OrderInsert(it->first, det, '1', '3', ss, mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick, "", "");
  67.                                         yfd = true;
  68.                                         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);

  69.                                         maps[num] = s;
  70.                                         num++;
  71.                                         InsertLog(it->first + "    达到套利价差交易条件买入平今,第一腿价格    " + to_string(mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
  72.                                 }
  73.                         }
  74.                         else if (ocfx == "4")
  75.                         {
  76.                                 dytcj = false; detcj = false;
  77.                                 map<string, double>::iterator it;
  78.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  79.                                 {
  80.                                         int ss = (int)floor(it->second * sl);
  81.                                         OrderInsert(it->first, dyt, '0', '4', ss, mapMd[dyt].AskPrice1 + hd * mapInstrument[dyt].PriceTick, "", "");
  82.                                         OrderInsert(it->first, det, '1', '4', ss, mapMd[det].BidPrice1 - hd * mapInstrument[det].PriceTick, "", "");
  83.                                         yfd = true;
  84.                                         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);

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

  90.                 }
  91.                 else if (bsfx == "1")
  92.                 {
  93.                         if (ocfx == "0")
  94.                         {
  95.                                 dytcj = false; detcj = false;
  96.                                 map<string, double>::iterator it;
  97.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  98.                                 {
  99.                                         int ss = (int)floor(it->second * sl);
  100.                                         OrderInsert(it->first, dyt, '1', '0', ss, mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick, "", "");
  101.                                         OrderInsert(it->first, det, '0', '0', ss, mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
  102.                                         yfd = true;
  103.                                         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);
  104.                                         maps[num] = s;
  105.                                         num++;
  106.                                         InsertLog(it->first + "    达到套利价差交易条件卖出开仓,第一腿价格    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
  107.                                 }
  108.                         }
  109.                         else if (ocfx == "1")
  110.                         {
  111.                                 dytcj = false; detcj = false;
  112.                                 map<string, double>::iterator it;
  113.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  114.                                 {
  115.                                         int ss = (int)floor(it->second * sl);
  116.                                         OrderInsert(it->first, dyt, '1', '1', ss, mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick, "", "");
  117.                                         OrderInsert(it->first, det, '0', '1', ss, mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
  118.                                         yfd = true;
  119.                                         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);
  120.                                         maps[num] = s;
  121.                                         num++;
  122.                                         InsertLog(it->first + "    达到套利价差交易条件卖出平仓,第一腿价格    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
  123.                                 }
  124.                         }
  125.                         else if (ocfx == "3")
  126.                         {
  127.                                 dytcj = false; detcj = false;
  128.                                 map<string, double>::iterator it;
  129.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  130.                                 {
  131.                                         int ss = (int)floor(it->second * sl);
  132.                                         OrderInsert(it->first, dyt, '1', '3', ss, mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick, "", "");
  133.                                         OrderInsert(it->first, det, '0', '3', ss, mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
  134.                                         yfd = true;
  135.                                         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);

  136.                                         maps[num] = s;
  137.                                         num++;
  138.                                         InsertLog(it->first + "    达到套利价差交易条件,第一腿价格卖出平今    " + to_string(mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick) + "    第二蹆价格    " + to_string(mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick) + "   对手价差  " + to_string(jc));
  139.                                 }
  140.                         }
  141.                         else if (ocfx == "4")
  142.                         {
  143.                                 dytcj = false; detcj = false;
  144.                                 map<string, double>::iterator it;
  145.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  146.                                 {
  147.                                         int ss = (int)floor(it->second * sl);
  148.                                         OrderInsert(it->first, dyt, '1', '4', ss, mapMd[dyt].BidPrice1 - hd * mapInstrument[dyt].PriceTick, "", "");
  149.                                         OrderInsert(it->first, det, '0', '4', ss, mapMd[det].AskPrice1 + hd * mapInstrument[det].PriceTick, "", "");
  150.                                         yfd = true;
  151.                                         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);

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

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表