реклама
Бургер менюБургер меню

Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 2)

18

return INIT_FAILED;

}

prevFastMA = fastMA[0];

prevSlowMA = slowMA[0];

Print("Советник TrendFollower успешно инициализирован");

return INIT_SUCCEEDED;

}

//+–+

//| Функция деинициализации советника |

//+–+

void OnDeinit(const int reason)

{

// Освобождение хэндлов индикаторов

if(fastMAHandle != INVALID_HANDLE)

IndicatorRelease(fastMAHandle);

if(slowMAHandle != INVALID_HANDLE)

IndicatorRelease(slowMAHandle);

if(adxHandle != INVALID_HANDLE)

IndicatorRelease(adxHandle);

Print("Советник деинициализирован, причина: ", reason);

}

//+–+

//| Функция обработки тиков |

//+–+

void OnTick()

{

// Проверяем, есть ли уже открытые позиции этим советником

if(PositionsTotal() > 0)

{

CheckForClose(); // Проверяем условия для закрытия

ManageTrailingStop(); // Управляем трейлинг-стопом

return;

}

// Проверяем условия для открытия новой позиции

CheckForOpen();

}

//+–+

//| Проверка условий для открытия позиции |

//+–+

void CheckForOpen()

{

// Получаем значения индикаторов на текущем и предыдущем барах

double fastMA[2], slowMA[2], adxValue[2];

if(CopyBuffer(fastMAHandle, 0, 0, 2, fastMA) < 2) return;

if(CopyBuffer(slowMAHandle, 0, 0, 2, slowMA) < 2) return;

// Получаем значение линии ADX (индекс направленного движения)

if(CopyBuffer(adxHandle, 0, 0, 2, adxValue) < 2) return;

// Проверяем условия для BUY (покупки)

// 1. Быстрая MA пересекла медленную MA снизу вверх

// 2. ADX выше порогового значения (сильный тренд)

if(fastMA[1] <= slowMA[1] && fastMA[0] > slowMA[0] && adxValue[0] > ADXThreshold)

{

OpenPosition(ORDER_TYPE_BUY);

}

// Проверяем условия для SELL (продажи)

// 1. Быстрая MA пересекла медленную MA сверху вниз

// 2. ADX выше порогового значения (сильный тренд)

else if(fastMA[1] >= slowMA[1] && fastMA[0] < slowMA[0] && adxValue[0] > ADXThreshold)

{

OpenPosition(ORDER_TYPE_SELL);

}

// Сохраняем текущие значения для следующего сравнения

prevFastMA = fastMA[0];

prevSlowMA = slowMA[0];

}