class CZigZag
Класс CZigZag — реализация ZigZag-индикатора для определения swing-экстремумов цены.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «czigzag.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Файл czigzag.mqh представляет собой библиотеку исходного кода для MetaTrader 4, содержащую класс CZigZag. Класс реализует ZigZag-индикатор, который выявляет значимые локальные максимумы и минимумы ценовых данных, сохраняя результаты в двух внутренних буферах для сигналов покупки и продажи.
Конструктор позволяет задать максимальное количество обрабатываемых баров и таймфрейм. Метод Refresh выполняет пересчёт буферов на основе текущих ценовых данных указанного символа, а метод GetArrow возвращает тип стрелки (ARROW_BUY, ARROW_SELL или ARROW_NONE) для конкретного бара.
Расчёты опираются на стандартные функции MQL4 (iLow, iHigh, iLowest, iHighest) и настраиваются через параметры глубины, отклонения и обратного шага. Результаты хранятся в индикаторных буферах, доступных для визуализации или дальнейшего анализа из советников и индикаторов.
| Настройка | Описание |
|---|---|
| __zigzag | ZigZag settings — Текстовый параметр, используемый как заголовок раздела настроек ZigZag в панели параметров. |
| ExtDepth | ExtDepth — Глубина поиска экстремумов цены — количество баров для определения локальных минимумов и максимумов (целое число, по умолчанию 60). |
| ExtDeviation | ExtDeviation — Допустимое отклонение в пунктах для подтверждения экстремума (целое число, по умолчанию 5). |
| ExtBackstep | ExtBackstep — Количество баров для обратной проверки при фильтрации экстремумов (целое число, по умолчанию 3). |
Классов: 1 · методов: 2 · конструкторов: 1 · деструкторов: 1 · отдельных функций: 0
class CZigZag
Класс CZigZag — реализация ZigZag-индикатора для определения swing-экстремумов цены.
CZigZag(int maxBars, int timePeriod)
Конструктор класса CZigZag с параметрами максимального количества баров и таймфрейма.
~CZigZag()
Деструктор класса CZigZag — освобождение памяти буферов.
void Refresh(string symbol, int startBar)
Метод Refresh — пересчёт ZigZag-буферов для указанного символа и начального бара.
ARROW_TYPE GetArrow(int zigZagBar)
Метод GetArrow — получение типа стрелки (покупка, продажа или отсутствие) для указанного бара.
#property strict
extern string __zigzag = " ------- ZigZag settings------------";
extern int ExtDepth = 60;
extern int ExtDeviation = 5;
extern int ExtBackstep = 3;
enum ARROW_TYPE
{
ARROW_NONE,
ARROW_BUY,
ARROW_SELL
};
class CZigZag
{
private:
double _zigZagBufferBuy[];
double _zigZagBufferSell[];
int _maxBars;
int _period;
public:
int _extDepth;
int _extDeviation;
int _extBackstep;
CZigZag(int maxBars = 500, int timePeriod = 0)
{
_extDepth = ExtDepth;
_extDeviation = ExtDeviation;
_extBackstep = ExtBackstep;
_maxBars = maxBars;
_period = timePeriod;
ArrayResize(_zigZagBufferBuy , _maxBars + 5, 0);
ArrayResize(_zigZagBufferSell, _maxBars + 5, 0);
}
~CZigZag()
{
ArrayFree(_zigZagBufferBuy);
ArrayFree(_zigZagBufferSell);
}
void Refresh(string symbol, int startBar = 0)
{
int shift, back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
lastlow = 0;
lasthigh = 0;
double symbolPoint=MarketInfo(symbol, MODE_POINT);
ArrayInitialize(_zigZagBufferBuy, 0);
ArrayInitialize(_zigZagBufferSell, 0);
for(shift = _maxBars - _extDepth; shift >= 0; shift--)
{
val = iLow(symbol, _period, iLowest(symbol, _period, MODE_LOW, _extDepth, shift + startBar));
if(val == lastlow)
{
val = 0.0;
}
else
{
lastlow = val;
if (( iLow(symbol, _period, shift+startBar) - val) > (_extDeviation * symbolPoint))
{
val = 0.0;
}
else
{
for(back = 1; back <= _extBackstep; back++)
{
res = _zigZagBufferBuy[shift + back];
if ((res != 0) && (res > val)) _zigZagBufferBuy[shift + back] = 0.0;
}
}
}
_zigZagBufferBuy[shift] = val;
val = iHigh(symbol, _period, iHighest(symbol, _period,MODE_HIGH,_extDepth, shift + startBar));
if (val == lasthigh)
{
Показано первые 50% кода (символов: 2682)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.