鼎元C++期货量化/程序化教程【ATR的计算方法及调用方法】
- UID
- 2
- 积分
- 2892557
- 威望
- 1396310 布
- 龙e币
- 1496247 刀
- 在线时间
- 13313 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
鼎元C++期货量化/程序化教程【ATR的计算方法及调用方法】
第一部分,在头文件test.h中声明atr变量:- private:
- double avgtruerange(string period, string inst, int num);
- double atr;
- int length;
复制代码 说明:
1、因为atr可能是有小数部分,所以变量用double 数值。
2、atr是变量名,里面需要有三个参数,一个是K线BAR运行的周期,二是运行的合约,三是atr调用周期参数,即 atr的length.
第二部分,在源文件test.cpp中function计算方法部分:- double test::avgtruerange(string period, string inst, int num)
- {
- double dPreClose = 0;
- int n = 0;
- double sumatr = 0;
- vector<double>vAtr;
- if (mapK[period][inst].size() < num) return 0;
- map<string, TKVALUE >::iterator it;
- for (it = mapK[period][inst].begin(); it != mapK[period][inst].end(); ++it)
- {
- if (dPreClose != 0)
- {
- double d = it->second.dHigh - it->second.dLow;
- double dHC = abs(it->second.dHigh - dPreClose);
- double dLC = abs(it->second.dLow - dPreClose);
- if (d < dHC)d = dHC;
- if (d < dLC)d = dLC;
- vAtr.push_back(d);
- }
- dPreClose = it->second.dClose;
- }
- for (int i = 1; i <= num; i++)
- {
- sumatr += vAtr[vAtr.size() - i];
- InsertLog(to_string(vAtr[vAtr.size() - i]));
- }
- return sumatr / num;
- }
复制代码 说明: |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
- UID
- 2
- 积分
- 2892557
- 威望
- 1396310 布
- 龙e币
- 1496247 刀
- 在线时间
- 13313 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
第三部分:在源文件中调用指标
1、在加载时、tick数据模式下或bar模式下都可以调用,方法如下:- RsqBar(sPeriod, sInst);
- atr = avgtruerange(sPeriod, sInst, length);
复制代码 |
|
|
|
|
|
|
- UID
- 2
- 积分
- 2892557
- 威望
- 1396310 布
- 龙e币
- 1496247 刀
- 在线时间
- 13313 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
计算ATR方法:http://www.qhlt.cn/thread-126161-1-1.html;
计算ATR
由于ATR是基于移动平均线的,你需要为平均线设置周期。大多数交易者使用10到20之间的数值(10个交易日代表2周,而20个交易日代表一个月,大致如此)。14的默认值是一个很好的中间值,对于大多数情况来说应该是不错的。无论你选择什么,只要确保你保持一致。
为了计算ATR,你首先需要计算过去n个时期中每个时期的真实范围(TR),然后计算其平均值。
真实范围是以下3个计算中的最大值(记住,你需要取绝对值,因为价格运动的方向是不相关的)。
从当前高点减去当前低点
从当前高点减去之前的收盘价
从当前低点减去之前的收盘价 |
|
|
|
|
|
|