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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.