vwdd_oscillator.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «vwdd_oscillator.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор VWDD Oscillator для MetaTrader 5 рассчитывает объёмно-взвешенную дельту по каждому бару и аккумулирует её в нормализованный осциллятор, выявляя классические бычьи и медвежьи расхождения между движением цены и дельтой объёма.
На каждом баре вычисляется прокси-дельта на основе положения закрытия внутри диапазона high-low, умноженная на объём (тиковый или реальный). Накопленная дельта нормализуется через стандартное отклонение и сглаживается для формирования итогового значения осциллятора.
Отображение состоит из двухтональной гистограммы (синий/красный в зависимости от знака) и стрелок расхождений. Расхождение подтверждается при наличии разворота цены и осциллятора с заданным запаздыванием, что позволяет фильтровать ложные сигналы.
Настройки программы
| Настройка | Описание |
|---|---|
| InpDeltaPeriod | Количество баров для накопления кумулятивной дельты объёма |
| InpNormPeriod | Количество баров для расчёта стандартного отклонения при нормализации осциллятора |
| InpSmoothPeriod | Период сглаживания осциллятора (количество баров) |
| InpVolumeType | Источник объёма: тиковый объём или реальный объём (если предоставляется брокером/потоком) |
| InpDivLookback | Количество баров с каждой стороны для подтверждения свечи разворота (фланговый анализ) |
| InpDivSearchRange | Максимальное количество баров для поиска предыдущего свинга |
| InpShowArrows | Включает отображение стрелок расхождений на графике |
| InpArrowOffset | Вертикальное смещение стрелок расхождения от линии осциллятора (в единицах осциллятора) |
Поиск по коду файла
#property version "1.00"
#property description "Volume-Weighted Delta Divergence Oscillator: builds a "
#property description "bar-by-bar volume delta proxy, accumulates it into a "
#property description "normalized oscillator, and flags regular bullish/bearish "
#property description "divergence between price swings and the delta."
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_plots 3
#property indicator_type1 DRAW_COLOR_HISTOGRAM
#property indicator_color1 clrDodgerBlue,clrCrimson
#property indicator_width1 2
#property indicator_label1 "VWDD Oscillator"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrLime
#property indicator_width2 2
#property indicator_label2 "Bullish Divergence"
#property indicator_type3 DRAW_ARROW
#property indicator_color3 clrOrangeRed
#property indicator_width3 2
#property indicator_label3 "Bearish Divergence"
#property indicator_level1 0.0
#property indicator_levelstyle STYLE_DOT
#property indicator_levelcolor clrGray
enum ENUM_VWDD_VOLUME
{
VWDD_VOL_TICK = 0, // Tick volume
VWDD_VOL_REAL = 1 // Real volume (if supplied by broker/feed)
};
input int InpDeltaPeriod = 20; // Cumulative delta window (bars)
input int InpNormPeriod = 50; // Std-dev normalization lookback (bars)
input int InpSmoothPeriod = 5; // Oscillator smoothing period (bars)
input ENUM_VWDD_VOLUME InpVolumeType = VWDD_VOL_TICK; // Volume source
input int InpDivLookback = 10; // Swing confirmation bars (each side)
input int InpDivSearchRange = 100; // Max bars searched for a prior swing
input bool InpShowArrows = true; // Show divergence arrows
input double InpArrowOffset = 0.30; // Arrow vertical offset (oscillator units)
double OscBuffer[]; // plot 0 - final smoothed oscillator (visible)
double OscColorBuffer[]; // plot 0 - color index (visible)
double ArrowUpBuffer[]; // plot 1 - bullish divergence arrow (visible)
double ArrowDownBuffer[]; // plot 2 - bearish divergence arrow (visible)
double DeltaBuffer[]; // calc - raw per-bar volume delta
double CumDeltaBuffer[]; // calc - rolling cumulative delta
double RawOscBuffer[]; // calc - normalized oscillator before smoothing
int OnInit()
{
// код доступен только после оплаты
}
double CalcStdDev(const double &arr[],const int idx,const int period)
{
double mean=0.0;
for(int k=idx;k>=idx-period+1;k--)
mean+=arr[k];
mean/=period;
double var=0.0;
for(int k=idx;k>=idx-period+1;k--)
{
double d=arr[k]-mean;
var+=d*d;
}
var/=period;
return(MathSqrt(var));
}
bool IsSwingHigh(const double &high[],const int idx,const int lookback,const int total)
{
if(idx-lookback<0 || idx+lookback>total-1)
return(false);
double h=high[idx];
Показано первые 50% кода (символов: 6199)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.