C++程序化/量化学习视频教程系列 第056节:鼎元C++量化之如何跨品种/期调用多个数据【应用场景:计算两个品种价差/两个合约价差/建大周期过滤器】
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
C++程序化/量化学习视频教程系列 第056节:鼎元C++量化之如何跨品种/期调用多个数据【应用场景:计算两个品种价差/两个合约价差/建大周期过滤器】
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
视频中核心程式码:- vector<double>pc1, pc2;//建立两个窗口变量,分别存储两个不同合约的收盘价
- vector<double>pcspread;//建立一个容器,存储两个合约的价差
- RsqInstrument(sInst);//调用品种代码
- SubscribeMarketData(sInst); //调用品种数据
- RsqBar(sPeriod, sInst); //调用品种bar数据 注意:speriod ,sinst都是在“策略运行”设置的
- //将默认的“策略运行”面板品种合约周期收盘价存入pc1容器
- int i = 0;
- map<string, TKVALUE>::reverse_iterator it; //建立逆迭代,从右至左将length周期个收盘价存入pc1,pc1是逆序的,越新的数据越在左边。
- for (it = mapK[sPeriod][sInst].rbegin(); it != mapK[sPeriod][sInst].rend(); it++)
- {
- i++;
- InsertLog(sInst + "收盘价打印,从左至左第 " + to_string(i) + " 个bar的收盘价为 " + to_string(it->second.dClose)); //将length个周期的bar收盘价输出
- pc1.push_back(it->second.dClose);//将length个周期的品种sinst合约bar收盘价存入pc1容器
- if (i >= length)break;//计数,运行length次后结束循环,取得length个收盘价(前方先自动+1,所以计数是从1开始。先赋值再判断,所以要用>=length)
- }
- int k = 0;
- //在主程序调用第2个数据(注意下面我调用数据的方法,以后在跨期或跨合约调用中经常用到)
- RsqInstrument("rb2505");
- SubscribeMarketData("rb2505");
- RsqBar("min60", "rb2505");
- map<string, TKVALUE>::reverse_iterator it2;// 建立第2个逆迭代
- for (it2 = mapK["min60"]["rb2505"].rbegin(); it2 != mapK["min60"]["rb2505"].rend(); it2++)
- {
- k++;//先自+1 使得k=1
- InsertLog("rb2505 收盘价打印,从右至左第 " + to_string(k) + " 个bar的收盘价为 " + to_string(it2->second.dClose));//将length个周期rb2505日线bar收盘价输出
- pc2.push_back(it2->second.dClose);//将"rb2505"日线数据存入pc2容器
- if (k >= length)break;
- }
- //计算价差pcspread
- for (size_t d = 0; d < length; d++)
- {
- pcspread.push_back(pc1[d] - pc2[d]);//做两个合约收盘价的价差,注意是pc1[0]-pc2[0]......也是逆序的
- }
- //输出价差至日志面板
- for (size_t j = 0; j < length; j++)
- {
- InsertLog(sInst + " - rb2505 收盘价,价差为 " + to_string(pcspread[j]));//输出仍然为逆序,最新bar的价差先输出
- }
复制代码 |
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
显示效果:
 |
|
|
|
|
|
|
  
- UID
- 2
- 积分
- 2945057
- 威望
- 1422565 布
- 龙e币
- 1522492 刀
- 在线时间
- 13794 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2025-4-24

|
简评:
1、策略在编写过程中很难避免写错程式,所以这就需要有一个检测工作。我会在下面期的视频中跟大家介绍如何检查代码。
2、今天策略中也出现了崩溃的问题,梳理代理发现是这里的问题- RsqInstrument("rb2505");
- SubscribeMarketData("rb2505");
- RsqBar("min60", "rb2505");
- map<string, TKVALUE>::reverse_iterator it2;// 建立第2个逆迭代
- for (it2 = mapK["min60"]["rb2505"].rbegin(); it2 != mapK["min60"]["rb2505"].rend(); it2++)
复制代码 这个it2我错写成了it,也就是上面的一个迭代,导致了错误,只是2这个代码导致我要检查整个程式码。
3、心得就是写策略,编代码需要巨大的耐心。心要细,情绪要稳定。编程感觉就像一个对自己情绪稳定性的一个检测。 |
|
|
|
|
|
|