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

Trabajo finalizado

Plazo de ejecución 7 días
Comentario del Cliente
просто супер)

Tarea técnica

Мне нужна оптимизация стратегий есть код для открытия сделки 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("Все позиции закрыты.");

}


Han respondido

1
Desarrollador 1
Evaluación
(42)
Proyectos
43
7%
Arbitraje
0
Caducado
0
Libre
Ha publicado: 2 artículos, 23 ejemplos
2
Desarrollador 2
Evaluación
(11)
Proyectos
12
0%
Arbitraje
1
0% / 0%
Caducado
0
Libre
3
Desarrollador 3
Evaluación
(1)
Proyectos
2
0%
Arbitraje
0
Caducado
0
Libre
Solicitudes similares
I already have a large working MQL5 Expert Advisor. I am NOT looking for a new EA from scratch. I need an experienced MQL5 developer to audit, debug and improve the existing source code based on real MT5 demo logs. The EA trades XAUUSD on M1 and includes smart entry logic, FastFlow/tick-flow analysis, DMI/ADX, Connors RSI, ROC, EMA, market structure and multi-leg execution. The main task is to identify why many

Información sobre el proyecto

Presupuesto
30+ USD