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

鼎元C++期货量化/程序化教程【highest、lowest的计算方法及调用方法】

鼎元C++期货量化/程序化教程【highest、lowest的计算方法及调用方法】

第一部分,在头文件test.h中声明highest、lowest变量:
  1.         
  2. double highest(string period, string inst, int num);
  3. double lowerest(string period, string inst, int num);
复制代码
第二部分,在源文件test.cpp中设计计算公式:
  1. double test::highest(string period, string inst, int num)
  2. {
  3.         double d = 0;
  4.         int n = 0;
  5.         map<string, TKVALUE>::reverse_iterator it;
  6.         for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
  7.         {
  8.                 if (d < it->second.dHigh)d = it->second.dHigh;
  9.                 n++;
  10.                 if (n >= num)break;
  11.         }
  12.         return d;
  13. }
复制代码
  1. double test::lowerest(string period, string inst, int num)
  2. {
  3.         double d = 0;
  4.         int n = 0;
  5.         map<string, TKVALUE>::reverse_iterator it;
  6.         for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
  7.         {
  8.                 if (d == 0)d = it->second.dLow;
  9.                 if (d > it->second.dLow)d = it->second.dLow;
  10.                 n++;
  11.                 if (n >= num)break;
  12.         }
  13.         return d;
  14. }
复制代码

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

优化与升级:之前的highest与lowest都是仅对于最高价和最低价的比较与引用,今天升级与优化一下,可以回溯与调用(open,high,low,close四个价格中的任一个来做最高和最低的调用)

lowest优化版:

一、头文件中声明
  1. double lowest2(string period, string inst, int bartypt, int num);
复制代码
二、源文件中的公式计算部分:
  1. //最低价lowest计算公式开始,bartype(1:open ,2high,3low,4close)
  2. double test::lowest2(string period, string inst, int bartype, int num)
  3. {
  4.         double d = 0;
  5.         int n = 0;
  6.         int bart =3;

  7.         map<string, TKVALUE>::reverse_iterator it;
  8.         for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
  9.         {
  10.                 if (bartype == 1) bart = it->second.dOpen;
  11.                 if (bartype == 2) bart = it->second.dHigh;
  12.                 if (bartype == 3) bart = it->second.dLow;
  13.                 if (bartype == 4) bart = it->second.dClose;
  14.                 if (d == 0)d = bart;
  15.                 if (d > bart)d = bart;
  16.                 n++;
  17.                 if (n >= num)break;
  18.         }
  19.         return d;
  20. }
  21. //最低价lowest计算公式结束,bartype(1:open ,2high,3low,4close)
复制代码
三、说明:
  1. lowest2(string period, string inst, int bartype, int num)
复制代码
1、period:在交易界面设计的运行合约的周期;
2、inst:交易界面设计的运行的品种合约;
3、bartype:调用的bar的要素,1是open价,2是最高价,3是最低价,4是收盘价。
4、num:想回溯的周期。

范例:
  1. RsqBar(sPeriod, sInst);
  2. lowest2(sPeriod, sInst, 1,2);
复制代码
调用前2bar的开盘价中最低的那个值。类似MC中的
  1. lowest(open,2)
复制代码
  1. RsqBar(sPeriod, sInst);
  2. lowest2(sPeriod, sInst, 3,5);
复制代码
调用前5个bar中最低价中最低的那个价格。类似MC中的
  1. lowest(low,5)
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

highest优化版:

一、头文件声明:
  1. double highest2(string period, string inst, int bartypt, int num); //最高价highest函数变量
复制代码
二、源文件计算公式:
  1. //最高价highest计算公式开始,bartype(1:open ,2high,3low,4close)
  2. double test::highest2(string period, string inst, int bartype, int num)
  3. {
  4.         double d = 0;
  5.         int n = 0;
  6.         int bart = 2;

  7.         map<string, TKVALUE>::reverse_iterator it;
  8.         for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
  9.         {
  10.                 if (bartype == 1) bart = it->second.dOpen;
  11.                 if (bartype == 2) bart = it->second.dHigh;
  12.                 if (bartype == 3) bart = it->second.dLow;
  13.                 if (bartype == 4) bart = it->second.dClose;
  14.                 if (d == 0)d = bart;
  15.                 if (d < bart)d = bart;
  16.                 n++;
  17.                 if (n >= num)break;
  18.         }
  19.         return d;
  20. }
  21. //最高价highest计算公式结束,bartype(1:open ,2high,3low,4close)
复制代码
三、调用范例:
  1. RsqBar(sPeriod, sInst);
  2. highest2(sPeriod, sInst, 1,2);
复制代码
调用前2bar的开盘价中最高的那个值。类似MC中的
  1. highest(open,2)
复制代码
如何访问权限为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的数据跟上一根bar的高低价,类似在MC中做突破时要用highest(high,N)[1]或lowest(low,N)[1]  这样才能成功实现我们的策略思路。

下面我将更新如何获取上一根bar的最高或最低以用来做策略。

上一bar最高:

一、头文件声明变量:
  1.   
  2.        double highest1(string period, string inst, int num, int ref);//回溯前N个bar的最高价
复制代码
二、源文件计算公式:
  1. //回溯上N个bar的最高价开始
  2. double test::highest1(string period, string inst, int num, int ref)
  3. {
  4.         double d = 0;
  5.         int n = 0;
  6.         int r = 0;
  7.         map<string, TKVALUE>::reverse_iterator it;
  8.         for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
  9.         {
  10.                 r++;
  11.                 if (r <= ref)continue;
  12.                 if (d < it->second.dHigh)d = it->second.dHigh;
  13.                 n++;
  14.                 if (n >= num)break;
  15.         }
  16.         return d;
  17. }
  18. //回溯上N个bar的最高价结束
复制代码
上一bar最低:

一、头文件声明变量:
  1.        
  2. double lowest1(string period, string inst, int num,int ref);回溯前N个bar的最低价
复制代码
二、源文件计算公式函数:
  1. //回溯上N个bar的最低价开始
  2. double test::lowest1(string period, string inst, int num, int ref)
  3. {
  4.         double d = 0;
  5.         int n = 0;
  6.         int r = 0;
  7.         map<string, TKVALUE>::reverse_iterator it;
  8.         for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
  9.         {
  10.                 r++;
  11.                 if (r <= ref)continue;
  12.                 if (d == 0)d = it->second.dLow;
  13.                 if (d > it->second.dLow)d = it->second.dLow;
  14.                 n++;
  15.                 if (n >= num)break;
  16.         }
  17.         return d;
  18. }
  19. //回溯上N个bar的最低价结束
复制代码
三、调用方法
  1.         rangeh = highest1(sPeriod, sInst, jxzq,1); //N周期区间最高价
  2.         rangel = lowest1(sPeriod, sInst, jxzq,1); //N周期区间最低价
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表