ZigZag Oscillator
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «zigzag_oscillator (mtf)(1).mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
ZigZag Oscillator — это пользовательский индикатор для MetaTrader 5, отображаемый в отдельном окне. Он строит аналитическую осцилляционную модель на основе метода ZigZag, используя четыре гистограммных буфера для отображения бычьих и медвежьих компонентов движения цены.
Индикатор поддерживает многотаймфреймный режим, позволяя выбирать любой из стандартных таймфреймов (от M1 до MN) или более высокие таймфреймы. В этом режиме доступна интерполяция значений для более гладкого отображения.
Расчёт осциллятора основан на поиске экстремумов цены с заданными параметрами глубины и отклонения, после чего вычисляется процентное отклонение цены от последнего экстремума ZigZag. Результат представлен в виде четырёх цветных гистограмм.
Настройки программы
| Настройка | Описание |
|---|---|
| inpTimeFrame | Таймфрейм, на котором выполняется расчёт индикатора. Поддерживаются стандартные таймфреймы от M1 до MN, а также более высокие таймфреймы. |
| Depth | Минимальное количество баров между локальными экстремумами при построении ZigZag. |
| Deviation | Допустимое отклонение в пунктах для подтверждения найденного экстремума цены. |
| Backstep | Количество баров для обратного просмотра при корректировке найденных экстремумов ZigZag. |
| Limit_HistoBars | Количество последних баров, используемых для расчёта гистограммы осциллятора. |
| Interpolate | Включает интерполяцию значений индикатора между барами при работе в многотаймфреймном режиме. |
Поиск по коду файла
#property description "ZigZag Oscillator"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 clrLime
#property indicator_width1 3
#property indicator_color2 clrDarkGreen
#property indicator_width2 3
#property indicator_color3 clrRed
#property indicator_width3 3
#property indicator_color4 clrMaroon
#property indicator_width4 3
#property indicator_levelstyle STYLE_DOT
#property indicator_levelcolor clrWhite
#property indicator_levelwidth 1
enum enTimeFrames
{
tf_cu = 0, // Current time frame
tf_m1 = PERIOD_M1, // 1 minute
tf_m5 = PERIOD_M5, // 5 minutes
tf_m15 = PERIOD_M15, // 15 minutes
tf_m30 = PERIOD_M30, // 30 minutes
tf_h1 = PERIOD_H1, // 1 hour
tf_h4 = PERIOD_H4, // 4 hours
tf_d1 = PERIOD_D1, // Daily
tf_w1 = PERIOD_W1, // Weekly
tf_mn1 = PERIOD_MN1, // Monthly
tf_n1 = -1, // First higher time frame
tf_n2 = -2, // Second higher time frame
tf_n3 = -3 // Third higher time frame
};
input enTimeFrames inpTimeFrame = tf_cu; // Time frame to use
extern int Depth = 12;
extern int Deviation = 5;
extern int Backstep = 3;
extern int Limit_HistoBars = 400;
input bool Interpolate = true; // Interpolated in mtf mode
double HH[],HL[],LL[],LH[],diff[],count[];
double ZZ[];
double HIGH[];
double LOW[];
int ExtLevel=3;
struct sGlobalStruct
{
string indiFileName;
int indiTimeFrame;
};
sGlobalStruct glo;
#define _mtfCall(_buff,_ind) iCustom(_Symbol,glo.indiTimeFrame,glo.indiFileName,tf_cu,Depth,Deviation,Backstep,Limit_HistoBars,_buff,_ind)
int init(){
// код доступен только после оплаты
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
// код доступен только после оплаты
}
int i,limit=fmin(rates_total-prev_calculated+1,rates_total-1); count[0] = limit;
if (glo.indiTimeFrame!=_Period)
{
limit = (int)fmax(limit,fmin(rates_total-1,_mtfCall(8,0)*glo.indiTimeFrame/_Period));
for(i=limit; i>=0 && !_StopFlag; i--)
{
int y = iBarShift(_Symbol,glo.indiTimeFrame,time[i]);
HH[i] = _mtfCall(0,y);
HL[i] = _mtfCall(1,y);
LL[i] = _mtfCall(2,y);
LH[i] = _mtfCall(3,y);
diff[i] = _mtfCall(4,y);
if (!Interpolate || (i>0 && y==iBarShift(_Symbol,glo.indiTimeFrame,time[i-1]))) continue;
#define _interpolate(buff) buff[i+k] = buff[i]+(buff[i+n]-buff[i])*k/n
int n,k; datetime btime = iTime(_Symbol,glo.indiTimeFrame,y);
for(n = 1; (i+n)<rates_total && time[i+n] >= btime; n++) continue;
for(k = 1; k<n && (i+n)<rates_total && (i+k)<rates_total; k++)
{
_interpolate(diff);
if (HH[i]!=EMPTY_VALUE) HH[i+k]= _interpolate(diff);
if (HL[i]!=EMPTY_VALUE) HL[i+k]= _interpolate(diff);
if (LL[i]!=EMPTY_VALUE) LL[i+k]= _interpolate(diff);
if (LH[i]!=EMPTY_VALUE) LH[i+k]= _interpolate(diff);
}
}
return(rates_total);
}
int counterZ,whatlookfor=0;
int back,pos,lasthighpos=0,lastlowpos=0;
double extremum;
double curloПоказано первые 50% кода (символов: 5911)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.