Как рассчитать ATR как в Pine Script - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно рассчитать ATR так же, как в Pine Script, коде торгового представления.Я говорю о индикаторе Average True Range в техническом анализе акций или валют.В документации в 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.Может кто-нибудь лучше объяснить, пожалуйста, как рассчитывается ATR в Pine Script, надеюсь, с примером.На данный момент я использовал 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);
  }
//+------------------------------------------------------------------+

1 Ответ

0 голосов
/ 02 апреля 2019

Это реализация ATR в Pine Script

//@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))
...