Обсуждение статьи "Автоматизация торговых стратегий на MQL5 (Часть 7): Создание советника по сеточной торговле с динамическим масштабированием лотов"

 

Опубликована статья Автоматизация торговых стратегий на MQL5 (Часть 7): Создание советника по сеточной торговле с динамическим масштабированием лотов:

В настоящей статье мы создадим советник сеточной торговли на MQL5, использующий динамическое масштабирование лотов. Мы расскажем о разработке стратегии, реализации кода и процессе тестирования на истории. Наконец, мы поделимся ключевыми идеями и передовыми практиками по оптимизации автоматической торговой системы.

Сеточная торговля - это систематический подход, который заключается в размещении ордеров на покупку и продажу с заранее определенными ценовыми интервалами, позволяя трейдерам извлекать выгоду из колебаний рынка, не требуя точного прогнозирования тренда. Эта стратегия извлекает выгоду из волатильности рынка, постоянно открывая и закрывая сделки в пределах определенного ценового диапазона. Чтобы повысить его эффективность, мы внедрим динамическое масштабирование лотов, которое позволит корректировать размеры позиций в зависимости от заранее определенных условий, таких как баланс счета, волатильность или результаты предыдущих сделок. Наша система сеточной торговли будет работать со следующими ключевыми компонентами:

  • Структура сетки – Мы определим интервал между ордерами.
  • Правила входа и исполнения – Мы будем определять, когда открывать сеточные сделки, основываясь на фиксированных расстояниях, используя стратегию Индикатор скользящей средней.
  • Динамическое масштабирование лота - Мы реализуем адаптивный механизм определения размера лота, который будет регулировать размеры позиций в зависимости от рыночных условий или предопределенных параметров риска.
  • Управление сделками – мы включим механизмы стоп-лосса, тейк-профита и опциональные механизмы безубыточности для эффективного управления рисками.
  • Стратегия выхода – Мы разработаем логику закрытия позиций, основанную на целевых показателях прибыли, лимитах риска или разворотах тренда.

В двух словах, вот визуализация всего плана стратегии для простоты понимания.

GRID LAYOUT

Сочетая структурированную сетевую систему с адаптивным определением размера лота, мы создадим советника, который максимизирует доходность при эффективном управлении рисками. Далее мы реализуем эти концепции в MQL5.


Автор: Allan Munene Mutiiria

 
//--- Получение цен последних баров для логики торговых сигналов
double low1  = iLow(_Symbol, _Period, 1);
double low2  = iLow(_Symbol, _Period, 2);
double high1 = iHigh(_Symbol, _Period, 1);
double high2 = iHigh(_Symbol, _Period, 2);

эти переменные не используются... почему такой код?

 
testtestmio71 #:

эти переменные не используются... почему такой код?

Это функции для повторного использования.

 
Allan Munene Mutiiria #:
Это функции, которые можно использовать повторно.
в коде ... где вы используете переменную low1?
 
testtestmio71 #:
в коде ... где вы используете переменную low1?

В чем проблема с переменными? Какой-нибудь баг? Это функции, которые можно использовать в любом месте кода.

Если бы я объяснял дальше, я бы сказал, что нужно получить низкие и высокие цены для предыдущего бара и бара до + 1.

void ExecuteInitialTrade(double ask, double bid){
   //--- Сигнал к покупке: минимум предыдущего бара выше MA и бар перед этим ниже MA
   if (iLow(_Symbol, _Period, 1) > maData[1] && iLow(_Symbol, _Period, 2) < maData[1]){
      gridSize = ask - gridSize_Spacing;     //--- Установите триггер сетки ниже текущего запроса
      TakeProfit = ask + takeProfitPts;      //--- Установить TP для BUY
      if(obj_Trade.Buy(LotSize, _Symbol, ask, 0, TakeProfit,"Initial Buy"))
         Print("Initial BUY order executed at ", ask, " with LotSize: ", LotSize);
      else
         Print("Initial BUY order failed at ", ask);
      isTradeAllowed = false;
   }
   //--- Сигнал SELL: максимум предыдущего бара ниже MA и бар перед этим выше MA
   else if(iHigh(_Symbol, _Period, 1) < maData[1] && iHigh(_Symbol, _Period, 2) > maData[1]){
      gridSize = bid + gridSize_Spacing;     //--- Установите триггер сетки выше текущей ставки
      TakeProfit = bid - takeProfitPts;      //--- Установите TP для SELL
      if(obj_Trade.Sell(LotSize, _Symbol, bid, 0, TakeProfit,"Initial Sell"))
         Print("Initial SELL order executed at ", bid, " with LotSize: ", LotSize);
      else
         Print("Initial SELL order failed at ", bid);
      isTradeAllowed = false;
   }
}

Конкретно здесь. Вы можете переключиться на использование функций или удалить их, если они вам не нужны. Это проясняет ситуацию? Спасибо.

 
double low1  = iLow(_Symbol, _Period, 1);

например..... для сигнала на покупку вы использовали переменную iLow, а не Low1.

if (iLow(_Symbol, _Period, 1) > maData[1] && iLow(_Symbol, _Period, 2) < maData[1]){

это только для моего исследования, спасибо!!!

 

Эти четыре строки можно закомментировать

// double low1  = iLow(_Symbol, _Period, 1);
// double low2  = iLow(_Symbol, _Period, 2);
// double high1 = iHigh(_Symbol, _Period, 1);
// double high2 = iHigh(_Symbol, _Period, 2);
 
testtestmio71 #:

Эти четыре строки можно закомментировать

Конечно. Теперь все в порядке?

 

это нормально..... лучший советник .

4 линии сбивают с толку новичка

 
testtestmio71 #:

это нормально..... лучший советник .

4 линии сбивают с толку новичка

Хорошо

 

прекрасная статья - спасибо вам большое... изучаю торговый подход буду ставить с правками у себя на торги на пользовательских символах хэджевых!

проверяю....