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

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

18

request.tp = tpPrice;

request.deviation = 10;

request.magic = MagicNumber;

request.comment = GetPatternName(pattern.type);

if(!OrderSend(request, result))

{

Print("Ошибка открытия позиции по паттерну: ", GetLastError());

}

else

{

Print("Позиция открыта по паттерну: ", GetPatternName(pattern.type),

" (", (pattern.direction == 1) ? "Bullish" : "Bearish", ")");

}

}

//+–+

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

//+–+

void TestPatternRecognition()

{

// Эта функция может быть использована для тестирования

// алгоритма распознавания паттернов на исторических данных

Print("Начинаем тестирование распознавания паттернов…");

for(int i = 100; i < Bars(_Symbol, _Period) – 100; i += 10)

{

// Здесь можно добавить код для тестирования на разных участках истории

}

}

```

Дополнительные функции для расширенного распознавания:

```mq5

//+–+

//| Улучшенная функция распознавания паттернов (опционально) |

//+–+

PatternPoints AdvancedPatternScan()

{

PatternPoints result;

result.type = PATTERN_NONE;

// Используем алгоритм поиска экстремумов без ZigZag

// для более точного распознавания

// 1. Ищем swing highs и swing lows

double swingHighs[], swingLows[];

datetime swingHighTimes[], swingLowTimes[];

FindSwingPoints(swingHighs, swingHighTimes, swingLows, swingLowTimes);

// 2. Комбинируем экстремумы в правильном порядке

// 3. Проверяем больше типов паттернов

// 4. Добавляем фильтры по объему и времени

return result;

}

//+–+

//| Поиск точек разворота (swing points) |

//+–+

void FindSwingPoints(double &highs[], datetime &highTimes[],

double &lows[], datetime &lowTimes[],

int lookback = 5)

{

ArrayResize(highs, 0);

ArrayResize(highTimes, 0);

ArrayResize(lows, 0);

ArrayResize(lowTimes, 0);

for(int i = lookback; i < Bars(_Symbol, _Period) – lookback; i++)

{

// Проверяем swing high

bool isSwingHigh = true;

for(int j = 1; j <= lookback; j++)

{