鼎元C++期货量化/程序化教程【如何设计与调用一个技术指标(以经典的均线指标为例)】
- UID
- 2
- 积分
- 2892487
- 威望
- 1396275 布
- 龙e币
- 1496212 刀
- 在线时间
- 13313 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
鼎元C++期货量化/程序化教程【如何设计与调用一个技术指标(以经典的均线指标为例)】
第一部分:在头文件中声明一个变量:(以均线为例,取名为:avg,为防止取名与C++系统计算基础函数冲突,建议不要用经典的数学计算英文命名;均线周期取名为:num。均线数值可能有小数所以类型我用double类型,均线周期都是整数,所以我就int(整数)类似,这是计算均线函数。我想在平时使用过程中给它取名ma,这样方便大家都知道它是哪个指标。)- private:
- int num;
- double avg , ma;
复制代码 为了其它人能方便的知道这些变量各中什么用处,我把名称分到各自的分类中:- private:
- //公式指标(function)变量设计(开始)******************************************
- double avg(string period, string inst, int num);
- double highest(string period, string inst, int num);
- double lowerest(string period, string inst, int num);
- double avg1(string period, string inst, int num, int ref);
- double highest1(string period, string inst, int num, int ref);
- double lowerest1(string period, string inst, int num, int ref);
- //公式指标(function)变量设计(结束)******************************************
- private:
- //交易界面策略参数设置相关的变量设计(开始)*******************************
- int jxzq, jyfx, num, hd, yxpc, jg, fx, ss, tm, dbfx, cscc, tb;
- double jx, zg, zd, ma,ma1;
- string entrymodel;
- //交易界面策略参数设置相关的变量设计(结束)*******************************
- };
复制代码 第二部分:均线计算思路:将从现在K线的收盘价往前加num个周期总和然后除以num就能得到平均值了。要用到for循环语句;- double test::avg(string period, string inst, int num)
- {
- double d = 0;
- int n = 0;
- map<string, TKVALUE>::reverse_iterator it;
- for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
- {
- d += it->second.dClose;
- n++;
- if (n >= num)break;
- }
- return d / num;
- }
复制代码 经过num轮的取值后就可以通过总和除以周期num 获得平均值了。下面我们将在策略里面引用它。
第三部分:如何在策略与调用这个均线函数;
要调用均线avg函数,在策略程式码中我们要先调用K线数据,然后将这些数据调入函数,然后计算出均线。
调用可以在:
初建化时【InitParm()】模块、点击“运行”时【OnRun() 】模块、tick数据传入时【OnMarketData】及新bar产生时【OnBarOpen】中。因为申请调用K线数据只需要申请一次就行了,后面一直可用,所以可以在程式码最靠前的地方申请,也就是初始化时。- RsqBar(sPeriod, sInst); //申请调用bar数据
- ma = avg(sPeriod, sInst, jxzq); //调用数据,jxzg就是可参考MC中的均线常用变量length。
复制代码 这样就求得了特定周期,特定品种的bar线的length周期的均线值了。 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|