Нужна оптимизация хеджирование при помощи других валютных пар

MQL5 Experts Strategy optimization

Tâche terminée

Temps d'exécution 7 jours
Commentaires du client
просто супер)

Spécifications

Мне нужна оптимизация стратегий есть код для открытия сделки 3 валютных пар EURUSD, GBPUSD - по 1 лоту, EURGBP- 3 лот. Когда прибыль достигает в 17 долларов закрываются сделки и открываются заново. Вот нужно оптимизировать то есть проверить на исторических данных при каком объёме лотов будет максимальное количество итераций и при каком запросе то есть две на продажу и один на куплю или тому подобнее. Нужно проверить на год ли больше на исторических данных. Если будут вопросы задавайте. Ниже будет рабочий код но он работает в реальном времени мне нужно чтоб он работал на тестере стратегий и на исторических данных.

//------------------------------------------------------------//

#property copyright "Copyright 2023, MetaQuotes Ltd."

#property link      "https://www.mql5.com"

#property version   "1.00"

//+------------------------------------------------------------------+

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

//+------------------------------------------------------------------+

#include <Trade\Trade.mqh>


CTrade trade;

input double target_profit = 17.0; // Целевая прибыль в долларах


double max_profit = 0.0;  // Переменная для хранения максимальной прибыли

double max_drawdown = 0.0; // Переменная для хранения максимальной просадки

int iteration_count = 0;   // Переменная для хранения количества итераций


//+------------------------------------------------------------------+

//| Скрипт для открытия и управления тремя сделками                  |

//+------------------------------------------------------------------+

void OnTick()

{

   static bool positions_opened = false;


   // Открытие позиций, если еще не открыты

   if (!positions_opened && PositionsTotal() == 0)

   {

      OpenThreePositions();

      positions_opened = true;

   }

   

   double total_profit = CheckTotalProfit();

   

   // Выводим отладочные сообщения для отслеживания прибыли

   Print("Текущая общая прибыль: ", total_profit);

   Print("Целевая прибыль: ", target_profit);

   

   // Обновление максимальной прибыли и просадки

   UpdateMaxProfitAndDrawdown(total_profit);

   

   // Вывод текущей максимальной просадки и количества итераций

   Print("Максимальная просадка: ", max_drawdown);

   Print("Количество итераций: ", iteration_count);

   

   // Если достигнута целевая прибыль

   if (total_profit >= target_profit)

   {

      iteration_count++;  // Увеличиваем количество итераций при достижении целевой прибыли

      Print("Достигнута целевая прибыль. Закрываем позиции и открываем новые.");

      CloseAllPositions();

      OpenThreePositions();

   }

}


//+------------------------------------------------------------------+

//| Функция для открытия трех позиций                                |

//+------------------------------------------------------------------+

void OpenThreePositions()

{

   double lot_size = 1;

   

   if (OpenPosition("EURUSD", ORDER_TYPE_SELL, lot_size * 0.7))

      Print("EURUSD позиция открыта.");


   if (OpenPosition("EURGBP", ORDER_TYPE_SELL, lot_size * 3))

      Print("EURGBP позиция открыта.");


   if (OpenPosition("GBPUSD", ORDER_TYPE_SELL, lot_size * 0.7))

      Print("GBPUSD позиция открыта.");


   Print("Три новые позиции открыты.");

}


//+------------------------------------------------------------------+

//| Функция для открытия позиции                                     |

//+------------------------------------------------------------------+

bool OpenPosition(string symbol, ENUM_ORDER_TYPE type, double lot_size)

{

   double price = (type == ORDER_TYPE_BUY) ? SymbolInfoDouble(symbol, SYMBOL_ASK) : SymbolInfoDouble(symbol, SYMBOL_BID);

   

   if (!trade.PositionOpen(symbol, type, lot_size, price, 0, 0, "Позиция открыта скриптом"))

   {

      Print("Ошибка открытия позиции для ", symbol, ". Ошибка: ", GetLastError());

      return false;

   }

   return true;

}


//+------------------------------------------------------------------+

//| Функция для проверки общей прибыли                               |

//+------------------------------------------------------------------+

double CheckTotalProfit()

{

   double total_profit = 0;

   for (int i = 0; i < PositionsTotal(); i++)

   {

      if (PositionSelectByTicket(PositionGetTicket(i)))

      {

         total_profit += PositionGetDouble(POSITION_PROFIT);

      }

   }

   return total_profit;

}


//+------------------------------------------------------------------+

//| Функция для обновления максимальной прибыли и просадки           |

//+------------------------------------------------------------------+

void UpdateMaxProfitAndDrawdown(double current_profit)

{

   // Обновление максимальной прибыли

   if (current_profit > max_profit)

      max_profit = current_profit;

   

   // Вычисление текущей просадки

   double current_drawdown = max_profit - current_profit;

   

   // Обновление максимальной просадки, если текущая больше

   if (current_drawdown > max_drawdown)

      max_drawdown = current_drawdown;

}


//+------------------------------------------------------------------+

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

//+------------------------------------------------------------------+

void CloseAllPositions()

{

   for (int i = PositionsTotal() - 1; i >= 0; i--)

   {

      if (PositionSelectByTicket(PositionGetTicket(i)))

      {

         trade.PositionClose(PositionGetTicket(i));

      }

   }

   Print("Все позиции закрыты.");

}


Répondu

1
Développeur 1
Évaluation
(42)
Projets
43
7%
Arbitrage
0
En retard
0
Gratuit
Publié : 2 articles, 23 codes
2
Développeur 2
Évaluation
(11)
Projets
12
0%
Arbitrage
1
0% / 0%
En retard
0
Gratuit
3
Développeur 3
Évaluation
(1)
Projets
2
0%
Arbitrage
0
En retard
0
Gratuit
Commandes similaires
Разработка простого Expert Advisor для MT5 (тестовый проект с возможностью долгосрочного сотрудничества) Описание: Ищу опытного программиста MQL5 для разработки торгового советника (Expert Advisor) под MetaTrader 5. Это тестовый/пилотный проект: На первом этапе нужно реализовать относительно простой вариант советника (без сложной логики и большого количества индикаторов). Если результат меня устроит и сотрудничество
Нужно создать торговый советник для МТ5 для автоматической торговли золотом, серебром и нефти, газа. Торговля будет происходить на основании данных индикаторов, корреляции данных инструментов. Должна быть панель управления с настройками на английском языке
AO - при пересечении уровня 0 в какую-либо сторону открывать соответствующий ордер. RSI - при пересечении отметки 30 пунктов снизу открывать ордер на покупку, при пересечении отметки 70 пунктов сверху открывать ордер на продажу. Стратегии не зависят друг от друга. Предустановка размеров ТП и СЛ, предустановка уровней ТС
Требуется создать советник на основе разворотных паттернов, используя дополнительные индикаторы такие как скользящее среднее, отклонение от скользящей средней, угол наклона скользящей средней. Возможно будет добавлено что то еще по ходу работы

Informations sur le projet

Budget
30+ USD