Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 13)
}
//+–+
//| 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; // Закрытие выше открытия