我需要以与交易视图代码Pine Script中相同的方式计算ATR。我说的是股票或外汇技术分析中的平均真实区间指标。 在Pine Script的文档中说的是这样计算的:
plot(rma(close, 15))
// same on pine, but much less efficient
pine_rma(x, y) =>
alpha = y
sum = 0.0
sum := (x + (alpha - 1) * nz(sum[1])) / alpha
plot(pine_rma(close, 15))
RETURNS
Exponential moving average of x with alpha = 1 / y.
我尝试了与MQL5文档中相同的方法,并且该策略的结果根本不相似,ATR出了点问题。计算真实范围很简单,我知道问题在于如何计算此RMA(滚动平均线?)。它说的是按照原始RSI指标计算的。有人可以更好地解释一下如何在Pine Script中计算ATR,希望有一个例子。目前,与文档中一样,我将EMA与alpha = 1 / ATR_Period一起使用,但似乎并不相同。 贝娄是新ATR的代码,基本上与MT5中的默认代码相同,我只更改了最后一部分,即计算出的位置。 谢谢您的帮助!
//--- the main loop of calculations
for(i=limit;i<rates_total && !IsStopped();i++)
{
ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
ExtATRBuffer[i]=(ExtTRBuffer[i] - ExtATRBuffer[i-1]) * (1 / ATR_Period) +ExtATRBuffer[i-1] ; // Here I calculated the EMA of the True Range
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
答案 0 :(得分:0)
这是Pine Script中的ATR实现
//@version=3
study(title="Average True Range", shorttitle="ATR", overlay=false)
pine_rma(x, y) =>
alpha = y
sum = 0.0
sum := (x + (alpha - 1) * nz(sum[1])) / alpha
true_range() =>
max(high - low, max(abs(high - close[1]), abs(low - close[1])))
plot(pine_rma(true_range(), 14), color=red)
//plot(atr(14))
答案 1 :(得分:0)
答案 2 :(得分:0)
引用迈克尔的话,我才意识到实施意味着实践
<块引用>(tr1+tr2+...tr_n)/n
其中 n
表示回溯期。所以这意味着 atr(periods)
表示 average
的 tr
在每个条形中沿着 n
周期。 Michal 在 pinescript 中这样做,因为 pinescripte 中的所有内容都是一个系列,需要递归破解过去的总和。
看看重构后的相同代码,你就会明白我在说什么:
/@version=3
study(title="Average True Range", shorttitle="ATR", overlay=false)
averageTrueRange(tr, periods) =>
sum = 0.0
sum := (tr + (periods - 1) * nz(sum[1])) / periods
currentTrueRange() =>
max(high - low, max(abs(high - close[1]), abs(low - close[1])))
plot(averageTrueRange(currentTrueRange(), 15))