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

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

18

}

//+–+

//| Timer function для подсчета скорости тиков |

//+–+

void OnTimer()

{

datetime currentTime = TimeCurrent();

double timeDiff = currentTime – lastTickTime;

if(timeDiff > 0)

{

tickSpeed = tickCounter / timeDiff;

tickCounter = 0;

lastTickTime = currentTime;

}

}

//+–+

//| Функция генерации сигнала на покупку |

//+–+

bool GenerateBuySignal(MqlTick &tick, long &volumeArray[])

{

// Сигнал по скользящим средним

bool maSignal = fastMA[0] > slowMA[0] && fastMA[1] <= slowMA[1];

// Сигнал по моменту

bool momentumSignal = momentum[0] > 100 && momentum[1] <= 100;

// Проверка объема

bool volumeSignal = volumeArray[0] > Volume_Threshold;

// Проверка цены (микро-паттерны)

bool pricePattern = CheckBullishMicroPattern();

// Комбинированный сигнал

return (maSignal && momentumSignal && volumeSignal && pricePattern);

}

//+–+

//| Функция генерации сигнала на продажу |

//+–+

bool GenerateSellSignal(MqlTick &tick, long &volumeArray[])

{

// Сигнал по скользящим средним

bool maSignal = fastMA[0] < slowMA[0] && fastMA[1] >= slowMA[1];

// Сигнал по моменту

bool momentumSignal = momentum[0] < 100 && momentum[1] >= 100;

// Проверка объема

bool volumeSignal = volumeArray[0] > Volume_Threshold;

// Проверка цены (микро-паттерны)

bool pricePattern = CheckBearishMicroPattern();

// Комбинированный сигнал

return (maSignal && momentumSignal && volumeSignal && pricePattern);

}

//+–+

//| Проверка бычьего микро-паттерна |

//+–+

bool CheckBullishMicroPattern()

{

// Пример: проверка последовательности из 3 последних тиков

MqlRates rates[];

ArraySetAsSeries(rates, true);

if(CopyRates(_Symbol, PERIOD_M1, 0, 5, rates) < 5) return false;

// Паттерн: снижение-снижение-рост (поглощение)

bool pattern1 = rates[3].close < rates[3].open && // Медвежья свеча

rates[2].close < rates[2].open && // Медвежья свеча

rates[1].close > rates[1].open && // Бычья свеча

rates[1].close > rates[2].close; // Закрытие выше предыдущего закрытия

// Паттерн: молот или доджи после снижения

bool pattern2 = rates[2].close < rates[2].open && // Медвежья свеча

(rates[1].high – rates[1].low) > 3 * (rates[1].close – rates[1].open) && // Длинная тень

rates[1].close > rates[1].open; // Закрытие выше открытия