鼎元C++期货量化/程序化教程【ATR的计算方法及调用方法】
第一部分,在头文件test.h中声明atr变量:[code]private:
double avgtruerange(string period, string inst, int num);
double atr;
int length;
[/code]说明:
1、因为atr可能是有小数部分,所以变量用double 数值。
2、atr是变量名,里面需要有三个参数,一个是K线BAR运行的周期,二是运行的合约,三是atr调用周期参数,即 atr的length.
第二部分,在源文件test.cpp中function计算方法部分:[code]
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;
}[/code]说明: 第三部分:在源文件中调用指标
1、在加载时、tick数据模式下或bar模式下都可以调用,方法如下:[code]RsqBar(sPeriod, sInst);
atr = avgtruerange(sPeriod, sInst, length);[/code] 计算ATR方法:[url=http://www.qhlt.cn/thread-126161-1-1.html]http://www.qhlt.cn/thread-126161-1-1.html[/url];
计算ATR
由于ATR是基于移动平均线的,你需要为平均线设置周期。大多数交易者使用10到20之间的数值(10个交易日代表2周,而20个交易日代表一个月,大致如此)。14的默认值是一个很好的中间值,对于大多数情况来说应该是不错的。无论你选择什么,只要确保你保持一致。
为了计算ATR,你首先需要计算过去n个时期中每个时期的真实范围(TR),然后计算其平均值。
真实范围是以下3个计算中的最大值(记住,你需要取绝对值,因为价格运动的方向是不相关的)。
从当前高点减去当前低点
从当前高点减去之前的收盘价
从当前低点减去之前的收盘价
页:
[1]