← К каталогу
Исходный код · ID 4494

Volatility-Adjusted Momentum Decay Line

volatilityadjustedmomentumdecay.mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

VAMD — индикатор MetaTrader 5, рассчитывающий линию затухания моментума с корректировкой на волатильность. Он нормализует моментум цены относительно текущего значения ATR, а затем применяет экспоненциальное сглаживание, скорость которого масштабируется соотношением текущего ATR к его среднему значению. Благодаря этому скорость возврата к нулю адаптируется к текущему режиму волатильности вместо фиксированного временного константа.

Индикатор отрисовывает одну линию в отдельном окне с цветовой индикацией: синий цвет соответствует положительным значениям, красный — отрицательным. Для расчётов используются три буфера: линия затухания, цветовой индекс и нормализованный моментум.

В качестве базы для оценки волатильности применяется простое скользящее среднее ATR, а текущий моментум вычисляется как разница цен закрытия за заданный период lookback. Параметры decay rate ограничиваются нижней и верхней границами, задаваемыми пользователем.

Инициализация включает валидацию входных периодов и decay-параметров, создание handle ATR и расчёт минимального количества баров для корректной работы. При некорректных настройках индикатор возвращает ошибку инициализации.

Настройки программы

НастройкаОписание
InpMomentumPeriod Период моментума — количество баров для расчёта разницы цен закрытия.
InpATRPeriod Период расчёта ATR — единицы волатильности для текущего бара.
InpATRAvgPeriod Период усреднения ATR, используемый для расчёта базовой линии волатильности (скользящее среднее ATR).
InpBaseDecay Базовая скорость затухания в диапазоне от 0.0 до 1.0, определяющая начальную скорость возврата линии к нулю.
InpMaxDecay Верхний предел скорости затухания в диапазоне от 0.0 до 1.0, ограничивающий максимальную скорость возврата линии к нулю.
Получить полный код

Поиск по коду файла

#property version   "1.00"
#property description "Volatility-Adjusted Momentum Decay Line: a momentum reading that "
#property description "relaxes back toward zero at a speed scaled by the current ATR "
#property description "relative to its own moving average, so decay speed adapts to the "
#property description "prevailing volatility regime instead of using a fixed time constant."

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   1
#property indicator_level1  0.0
#property indicator_levelstyle STYLE_DOT
#property indicator_levelcolor clrGray

#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrDodgerBlue, clrOrangeRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
#property indicator_label1  "VAMD Decay Line"

input int    InpMomentumPeriod = 10;    // Momentum lookback (bars)
input int    InpATRPeriod      = 14;    // ATR period (volatility unit)
input int    InpATRAvgPeriod   = 50;    // ATR averaging period (volatility baseline)
input double InpBaseDecay      = 0.15;  // Base decay rate (0.0 - 1.0)
input double InpMaxDecay       = 0.90;  // Maximum decay rate cap (0.0 - 1.0)

double DecayLineBuffer[];
double ColorBuffer[];
double NormMomentumBuffer[];

int atr_handle = INVALID_HANDLE;
int min_bars   = 0;

int OnInit()
  {
      // код доступен только после оплаты
   }
   if(InpMomentumPeriod < 1 || InpATRPeriod < 1 || InpATRAvgPeriod < 1)
     {
      Print("VAMD: invalid input period, must be >= 1");
      return(INIT_PARAMETERS_INCORRECT);
     }
   if(InpBaseDecay <= 0.0 || InpBaseDecay > 1.0 || InpMaxDecay <= 0.0 || InpMaxDecay > 1.0 || InpMaxDecay < InpBaseDecay)
     {
      Print("VAMD: decay rates must satisfy 0 < BaseDecay <= MaxDecay <= 1");
      return(INIT_PARAMETERS_INCORRECT);
     }

   SetIndexBuffer(0, DecayLineBuffer, INDICATOR_DATA);
   SetIndexBuffer(1, ColorBuffer, INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2, NormMomentumBuffer, INDICATOR_CALCULATIONS);

   ArraySetAsSeries(DecayLineBuffer, false);
   ArraySetAsSeries(ColorBuffer, false);
   ArraySetAsSeries(NormMomentumBuffer, false);

   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);

   atr_handle = iATR(_Symbol, _Period, InpATRPeriod);
   if(atr_handle == INVALID_HANDLE)
     {
      Print("VAMD: failed to create ATR handle, error ", GetLastError());
      return(INIT_FAILED);
     }

   min_bars = InpATRPeriod + InpATRAvgPeriod + InpMomentumPeriod + 10;

   IndicatorSetString(INDICATOR_SHORTNAME, "VAMD(" + IntegerToString(InpMomentumPeriod) + "," +
                       IntegerToString(InpATRPeriod) + "," + Intege

Показано первые 50% кода (символов: 3868)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
386,80₽ ≈ $4.73