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

C++程序化/量化学习视频教程系列 第040节:鼎元C++量化之【tick进出场模块|bar进出场模块设计与逻辑】【C++量化开发进出场模块系列】

C++程序化/量化学习视频教程系列 第040节:鼎元C++量化之【tick进出场模块|bar进出场模块设计与逻辑】【C++量化开发进出场模块系列】

C++程序化/量化学习视频教程系列 第040节:鼎元C++量化之【tick进出场模块|bar进出场模块设计与逻辑】【C++量化开发进出场模块系列】



C++程序化学习视频教程系列安排如下:
第一楼:教学视频。一般控制在15分钟左右;
第二椄:视频课程中使用的程式源码。
第三楼:视频教学中需要用到的一些文档或资源。
第四楼:其它的一些边角料,特别是一些经典程序化策略的回测类的部分会放到下面楼层里面。

参与模式如下:
1、希望参与到编写策略与调试方面的工作通过上面的联系方式联系管理员咨询即可。记的加群,有问题第一时间交流,也可以在论坛指定版发贴交流,专用版地址:http://www.qhlt.cn/forum-244-1.html
2、有意申请试用及绑定期货账户跑实盘网友可以联系管理员,以及开通的方式。
3、基于C++策略交易软件具有:1、软件小(50兆不到);2、效率高(C++语言);3、功能精(专注于策略);4、对服务噐或电脑兼容性好(WIN系统)等优势,特别适合长期跑程序化的客户朋友,特别是有稳定交易模式客户更适合使用C++构建的交易系统。
4、最全的C++期货程序化(量化)教程、视频、源码、课件、资源汇总贴【C++期货程序化/量化研究必备资源贴!】:http://www.qhlt.cn/thread-160231-1-1.html
5、鼎元C++量化程式码技术指标源码C++版模板【建议在test.h和test.cpp中同步至最新,方便统一调用和使用,一次编辑多次使用!】:http://www.qhlt.cn/thread-160230-1-1.html
6、如何使用鼎元C++量化软件以及需要准备的些什么?[C++量化入门必读!]:http://www.qhlt.cn/thread-160415-1-1.html

联系方式:
C++微信群:  QQ群: 管理员微信:;管理员QQ:

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   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

tick模块进出场模块设计:

1、【void test::OnMarketData(CThostFtdcDepthMarketDataField* t)】模块

2、必要配置设置
  1.         if (state != "run")return; //非运行状态返回
  2.         if (t->OpenInterest < 1)return; //持仓小于1返回
  3.         if (t->InstrumentID != sInst)return;//行情数据品种与选择交易品种不一致返回(多为写错品种代码)
复制代码
3、【行情数据map】及时间设置
  1. mapMd[t->InstrumentID] = *t;
  2.         string sss = t->UpdateTime; //刷新时间
  3.         //交易委托时间控制模块(大陆国内期货市场交易时间,09:00-10:15,10:30-11:30,13:30-15:00,21:00-23:00)非交易时间不发委托
  4.         if( (sss >= "00:00:00" && sss <= "09:00:00") || (sss >= "10:15:00" && sss <= "10:30:00") || (sss >= "11:30:00" && sss <= "13:30:00") || (sss >= "15:00:00" && sss <= "21:00:00") || (sss >= "23:00:00" && sss <= "23:59:59"))return; //非交易时间返回
复制代码
4、进场设计模块:
  1. // 最新tick价格大于均线且持仓为0则进场做多
  2.         if (t->LastPrice > ma && fx == 0)
  3.         {
  4.                 fx = 1;
  5.                 ss = dbfx;
  6.                 map<string, double>::iterator it;
  7.                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  8.                 {
  9.                         int sl = (int)(ss*it->second);
  10.                         OrderInsert(it->first, sInst, '0', '0', sl, t->AskPrice1 + hd * mapInstrument[sInst].PriceTick, "", "");//买入开仓语句
  11.                         //输出至交易界面LOG日志里面
  12.                         string s = it->first + "突破入场价格多单达到入场条件买入开仓" + to_string(sl) + "手,价格 " + to_string(t->AskPrice1 + hd * mapInstrument[sInst].PriceTick) + "基础手数 " + to_string(ss) + "均线值" + to_string(ma);
  13.                         maps[num] = s;
  14.                         num++;
  15.                 }
  16.                 if (num != 0) shuchurizhi();
  17.                 tm = 0;
  18.                 xieruzhuangtai();
  19.         }
  20. //最新价格小于均线且持仓为0则进场做空
  21.         if (t->LastPrice < ma && fx == 0)
  22.         {
  23.                 fx = -1;
  24.                 ss = dbfx;
  25.                 map<string, double>::iterator it;
  26.                 for(it = mapSub.begin(); it != mapSub.end();it++)
  27.                 {
  28.                         int sl = (int)(ss * it->second);
  29.                         OrderInsert(it->first, sInst, '1', '0', sl, t->BidPrice1 - hd * mapInstrument[sInst].PriceTick, "", ""); //卖出开仓语句
  30.                         //输出至交易界面LOG日志里面
  31.                         string s = it->first + "突破入场价格空单达到入场条件卖出开仓" + to_string(sl) + "手,价格 " + to_string(t->BidPrice1 - hd * mapInstrument[sInst].PriceTick) + "基础手数" + to_string(ss) + "均线值" + to_string(ma);
  32.                         maps[num] = s;
  33.                         num++;
  34.                 }
  35.                 if (num != 0)shuchurizhi();
  36.                 tm = 0;
  37.                 xieruzhuangtai();
  38.         }
复制代码
5、出场设计模块
  1. if (zt == 1 && fdzy == 1 && t->LastPrice < cb + (1 - hlbfb) * fdzyz)
  2.         {
  3.                 zt = 0;
  4.                 map<string, double>::iterator it;
  5.                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  6.                 {
  7.                         int sl = (int)(ss * it->second);
  8.                         if (yxpc == 0)
  9.                         {
  10.                                 closesell1(it->first, sInst, sl, t->LastPrice - hd * mapInstrument[sInst].PriceTick); //多单卖出平仓
  11.                         }
  12.                         else if (yxpc == 1)
  13.                         {
  14.                                 closesell2(it->first, sInst, sl, t->LastPrice - hd * mapInstrument[sInst].PriceTick); // 多单卖出平仓
  15.                         }
  16.                         string s = it->first + "    多单达到回落止盈条件后触发回落止盈条件卖出平仓    " + to_string(sl) + "    手,价格    " + to_string(t->LastPrice - hd * mapInstrument[sInst].PriceTick) + "  回落止盈价格 " + to_string(cb + (1-hlbfb)*fdzyz);
  17.                         maps[num] = s;
  18.                         num++;
  19.                 }
  20.                 if (num != 0)shuchurizhi();
  21.                 tm = 0;
  22.                 xierucanshu();
  23.         }
复制代码
  1. if (zt == -1 && fdzy == -1 && t->LastPrice > cb - (1 - hlbfb) * fdzyz)
  2.         {
  3.                 zt = 0;
  4.                 map<string, double>::iterator it;
  5.                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  6.                 {
  7.                         int sl = (int)(ss * it->second);
  8.                         if (yxpc == 0)
  9.                         {
  10.                                 closebuy1(it->first, sInst, sl, t->LastPrice + hd * mapInstrument[sInst].PriceTick);  //空单买入平仓语句
  11.                         }
  12.                         else if (yxpc == 1)
  13.                         {
  14.                                 closebuy2(it->first, sInst, sl, t->LastPrice + hd * mapInstrument[sInst].PriceTick);  //空单买入平仓语句
  15.                         }

  16.                         string s = it->first + "    空单达到回落止盈条件后触发回落止盈条件买入平仓    " + to_string(ss) + "    手,价格    " + to_string(t->LastPrice + hd * mapInstrument[sInst].PriceTick) + "  回落止盈价格 " + to_string(cb -(1-hlbfb)*fdzyz);
  17.                         maps[num] = s;
  18.                         num++;
  19.                 }
  20.                 if (num != 0)shuchurizhi();
  21.                 tm = 0;
  22.                 xierucanshu();
  23.         }
复制代码
6、尝试行情关于价格的要素:
  1. ///深度行情
  2. struct CThostFtdcDepthMarketDataField
  3. {
  4.         ///交易日
  5.         TThostFtdcDateType        TradingDay;
  6.         ///合约代码
  7.         TThostFtdcInstrumentIDType        InstrumentID;
  8.         ///交易所代码
  9.         TThostFtdcExchangeIDType        ExchangeID;
  10.         ///合约在交易所的代码
  11.         TThostFtdcExchangeInstIDType        ExchangeInstID;
  12.         ///最新价
  13.         TThostFtdcPriceType        LastPrice;
  14.         ///上次结算价
  15.         TThostFtdcPriceType        PreSettlementPrice;
  16.         ///昨收盘
  17.         TThostFtdcPriceType        PreClosePrice;
  18.         ///昨持仓量
  19.         TThostFtdcLargeVolumeType        PreOpenInterest;
  20.         ///今开盘
  21.         TThostFtdcPriceType        OpenPrice;
  22.         ///最高价
  23.         TThostFtdcPriceType        HighestPrice;
  24.         ///最低价
  25.         TThostFtdcPriceType        LowestPrice;
  26.         ///数量
  27.         TThostFtdcVolumeType        Volume;
  28.         ///成交金额
  29.         TThostFtdcMoneyType        Turnover;
  30.         ///持仓量
  31.         TThostFtdcLargeVolumeType        OpenInterest;
  32.         ///今收盘
  33.         TThostFtdcPriceType        ClosePrice;
  34.         ///本次结算价
  35.         TThostFtdcPriceType        SettlementPrice;
  36.         ///涨停板价
  37.         TThostFtdcPriceType        UpperLimitPrice;
  38.         ///跌停板价
  39.         TThostFtdcPriceType        LowerLimitPrice;
  40.         ///昨虚实度
  41.         TThostFtdcRatioType        PreDelta;
  42.         ///今虚实度
  43.         TThostFtdcRatioType        CurrDelta;
  44.         ///最后修改时间
  45.         TThostFtdcTimeType        UpdateTime;
  46.         ///最后修改毫秒
  47.         TThostFtdcMillisecType        UpdateMillisec;
  48.         ///申买价一
  49.         TThostFtdcPriceType        BidPrice1;
  50.         ///申买量一
  51.         TThostFtdcVolumeType        BidVolume1;
  52.         ///申卖价一
  53.         TThostFtdcPriceType        AskPrice1;
  54.         ///申卖量一
  55.         TThostFtdcVolumeType        AskVolume1;
  56.         ///申买价二
  57.         TThostFtdcPriceType        BidPrice2;
  58.         ///申买量二
  59.         TThostFtdcVolumeType        BidVolume2;
  60.         ///申卖价二
  61.         TThostFtdcPriceType        AskPrice2;
  62.         ///申卖量二
  63.         TThostFtdcVolumeType        AskVolume2;
  64.         ///申买价三
  65.         TThostFtdcPriceType        BidPrice3;
  66.         ///申买量三
  67.         TThostFtdcVolumeType        BidVolume3;
  68.         ///申卖价三
  69.         TThostFtdcPriceType        AskPrice3;
  70.         ///申卖量三
  71.         TThostFtdcVolumeType        AskVolume3;
  72.         ///申买价四
  73.         TThostFtdcPriceType        BidPrice4;
  74.         ///申买量四
  75.         TThostFtdcVolumeType        BidVolume4;
  76.         ///申卖价四
  77.         TThostFtdcPriceType        AskPrice4;
  78.         ///申卖量四
  79.         TThostFtdcVolumeType        AskVolume4;
  80.         ///申买价五
  81.         TThostFtdcPriceType        BidPrice5;
  82.         ///申买量五
  83.         TThostFtdcVolumeType        BidVolume5;
  84.         ///申卖价五
  85.         TThostFtdcPriceType        AskPrice5;
  86.         ///申卖量五
  87.         TThostFtdcVolumeType        AskVolume5;
  88.         ///当日均价
  89.         TThostFtdcPriceType        AveragePrice;
  90.         ///业务日期
  91.         TThostFtdcDateType        ActionDay;
  92. };
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

bar模块进出场模块设计:

1、【void test::OnBarOpen(TKVALUE t)】

2、bar进出必要参数配置
  1.         if (state != "run")return;
  2.         if (t.InstrumentID != sInst)return;
  3.         mapK[sPeriod][sInst][t.sDate + t.sDayNight + t.sTime] = t;
复制代码
3、调用指标或变量
  1.         ma = average(sPeriod, sInst, length); //每个bar产生的时候都计算一次.[指标运行不包含正在形成的bar].
复制代码
4、进场模块设计
  1. if (jyfx>-1 &&  ( dzqjx+dzqmacd>=1 ||(dzqjx==0 && dzqmacd==0) )   && xzqjx+xzqmacd>=2 )
  2.                         {
  3.                                 zt = 1;
  4.                                 sfzy = 0;
  5.                                 fdzy = 0;
  6.                                 fdzyz = 0;
  7.                                 map<string, double>::iterator it;
  8.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  9.                                 {
  10.                                         int sl = (int)(ss * it->second);
  11.                                         OrderInsert(it->first, sInst, '0', '0', sl, t.dClose + hd * mapInstrument[sInst].PriceTick, "", "");  //买入开仓语句
  12.                                         string s = it->first +s4+ "    多单达到入场条件买入开仓    " + to_string(sl) + "    手,价格    " + to_string(t.dClose + hd * mapInstrument[sInst].PriceTick) + "    " + sInst;
  13.                                         maps[num] = s;
  14.                                         num++;
  15.                                 }
  16.                                 cb = t.dClose + hd * mapInstrument[sInst].PriceTick;
  17.                                 if (num != 0)shuchurizhi();
  18.                                 tm = 0;
  19.                                 xierucanshu();
  20.                         }       
  21.        
  22.                         if ( jyfx<1 && (dzqjx+dzqmacd<=-1 ||(dzqjx==0 &&  dzqmacd==0) )&& xzqjx+xzqmacd<=-2 )
  23.                         {
  24.                                 zt = -1;
  25.                                 sfzy = 0;
  26.                                 fdzy = 0;
  27.                                 fdzyz = 0;
  28.                                 map<string, double>::iterator it;
  29.                                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  30.                                 {
  31.                                         int sl = (int)(ss * it->second);
  32.                                         OrderInsert(it->first, sInst, '1', '0', sl, t.dClose - hd * mapInstrument[sInst].PriceTick, "", "");  //卖出开仓语句
  33.                                         string s = it->first +s4+ "    空单达到入场条件卖出开仓    " + to_string(sl) + "    手,价格    " + to_string(t.dClose - hd * mapInstrument[sInst].PriceTick) + "    " + sInst;
  34.                                         maps[num] = s;
  35.                                         num++;

  36.                                 }
  37.                                 cb = t.dClose + hd * mapInstrument[sInst].PriceTick;
  38.                                 if (num != 0)shuchurizhi();
  39.                                 tm = 0;
  40.                                 xierucanshu();
  41.                         }
复制代码
5、出场模块设计
  1. //(1)最新bar价格小于均线价格,且持仓多单则进行多单卖出模块(sell model)
  2.         if (mapMd[sInst].LastPrice < ma && fx == 1)
  3.         {
  4.                 fx = 0;
  5.                 map<string, double>::iterator it;
  6.                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  7.                 {
  8.                         int sl = (int)(ss * it->second);
  9.                         if (yxpc == 0)
  10.                         {
  11.                                 closesell1(it->first, sInst, sl, mapMd[sInst].AskPrice1 - hd * mapInstrument[sInst].PriceTick);//卖出平仓,优先平昨
  12.                         }
  13.                         else if (yxpc == 1)
  14.                         {
  15.                                 closesell2(it->first, sInst, sl, mapMd[sInst].AskPrice1 - hd * mapInstrument[sInst].PriceTick); //卖出平仓,优先平今
  16.                         }
  17.                         string s = it->first + "多单跌破均线达到出场条件卖出平仓 " + to_string(sl) + " 手,价格 " + to_string(mapMd[sInst].AskPrice1 - hd * mapInstrument[sInst].PriceTick) + "基础手数 " + to_string(ss) + "均线值" + to_string(ma);
  18.                         maps[num] = s;
  19.                         num++;
  20.                 }
  21.                 if (num != 0)shuchurizhi();
  22.                 tm = 0;
  23.                 xieruzhuangtai();
  24.         }
  25. //(2)最新bar价格大于均线价格,且持仓空单则进行买入平仓空单模块(covertobuy model)
  26.         if (mapMd[sInst].LastPrice > ma && fx == -1)
  27.         {
  28.                 fx = 0;
  29.                 map<string, double>::iterator it;
  30.                 for (it = mapSub.begin(); it != mapSub.end(); it++)
  31.                 {
  32.                         int sl = (int)(ss * it->second);
  33.                         if (yxpc == 0)
  34.                         {
  35.                                 closebuy1(it->first, sInst, sl, mapMd[sInst].BidPrice1 + hd * mapInstrument[sInst].PriceTick);//买入平仓语句.优先平昨
  36.                         }
  37.                         else if (yxpc == 1)
  38.                         {
  39.                                 closebuy2(it->first, sInst, sl, mapMd[sInst].BidPrice1 + hd * mapInstrument[sInst].PriceTick);//买入平仓语句,优先平今
  40.                         }
  41.                         string s = it->first + " 空单涨破均线达到出场条件买入平仓 " + to_string(sl) + " 手,价格 " + to_string(mapMd[sInst].BidPrice1 + hd * mapInstrument[sInst].PriceTick) + "基础手数" + to_string(ss) + "均线值" + to_string(ma);
  42.                         maps[num] = s;
  43.                         num++;
  44.                 }
  45.                 if (num != 0)shuchurizhi();
  46.                 tm = 0;
  47.                 xieruzhuangtai();
  48.         }
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

重要说明:

1、调用最新价格,在tick行情模式下直接【t->LastPrice】即可,而在bar行情模式下需【mapMd[sInst].LastPrice】

2、除了用最新价lastpriceq外还可以使用bidprice或askprice。区别如下:



按照价格大小从上往下排列,中间以上的为卖方要价askprice,中间以下的为买方出价bidprice。

所以在写卖出类委托时要用bidprice来才保证成交率;同样在写买入类的策略时记的要用askprice以保证成交率。
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

  1.         ///申买价一
  2.         TThostFtdcPriceType        BidPrice1;
  3.         ///申卖价一
  4.         TThostFtdcPriceType        AskPrice1;
复制代码
用bidprice或askprice时建议用这两个,因为他们离最新价最近。
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表