**Форекс советник на основе индикатора зигзаг**
**Входные параметры:**
* **ZigzagDepth:** Глубина отката зигзага (в процентах)
* **ZigzagDeviation:** Отклонение зигзага (в пунктах)
* **StopLoss:** Стоп-лосс (в пунктах)
* **TakeProfit:** Тейк-профит (в пунктах)
* **Lots:** Размер лота
* **MagicNumber:** Волшебное число
**Логика советника:**
Советник анализирует график цены на основе индикатора зигзаг и генерирует торговые сигналы при следующих условиях:
**Сделка на покупку:**
* Образовался последующий максимум зигзага, превышающий предыдущий максимум.
* Цена находится выше последнего минимума зигзага.
**Сделка на продажу:**
* Образовался последующий минимум зигзага, ниже предыдущего минимума.
* Цена находится ниже последнего максимума зигзага.
**Размещение ордера:**
* Советник открывает сделку на покупку, если выполняются условия для сделки на покупку.
* Советник открывает сделку на продажу, если выполняются условия для сделки на продажу.
* Размеры лота, стоп-лосса и тейк-профита берутся из входных параметров.
**Управление ордером:**
* Стоп-лосс и тейк-профит устанавливаются при размещении ордера.
* Советник не осуществляет управление ордером и не перемещает стоп-лосс или тейк-профит.
* Ордер закрывается при достижении тейк-профита или стоп-лосса.
**Пример кода:**
«`mql4
#property indicator_chart_window
#property indicator_separate_window
// Входные параметры
input int ZigzagDepth=11;
input double ZigzagDeviation=5;
input int StopLoss=10;
input int TakeProfit=20;
input double Lots=0.1;
input int MagicNumber=12345;
// Индикатор зигзаг
Zigzag zigzag;
int OnInit()
{
// Инициализировать индикатор зигзаг
zigzag.SetDepth(ZigzagDepth);
zigzag.SetDeviation(ZigzagDeviation);
zigzag.Init();
return(INIT_SUCCEEDED);
}
int OnTick()
{
// Проверить на наличие нового бара
if(!IsNewBar())
return(0);
// Получить данные индикатора зигзаг
double zigzagHigh[], zigzagLow[];
zigzag.Values(HIGH,ArraySize(zigzagHigh),zigzagHigh);
zigzag.Values(LOW,ArraySize(zigzagLow),zigzagLow);
// Проверить условия для сделок на покупку и продажу
bool buySignal=false, sellSignal=false;
if(zigzagHigh[0]>zigzagHigh[1])
{
if(Ask>zigzagLow[1])
buySignal=true;
}
if(zigzagLow[0]