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

Termos de Referência

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

}


Respondido

1
Desenvolvedor 1
Classificação
(28)
Projetos
30
10%
Arbitragem
0
Expirado
0
Livre
2
Desenvolvedor 2
Classificação
(7)
Projetos
7
0%
Arbitragem
0
Expirado
0
Trabalhando
3
Desenvolvedor 3
Classificação
Projetos
1
0%
Arbitragem
0
Expirado
0
Livre
Pedidos semelhantes
**Техническое задание (ТЗ) для торгового робота на платформе Pocket Option** Здравствуйте! Мне нужен торговый робот для работы на платформе **Pocket Option** (бинарные опционы). Основная задача робота – открывать сделки по стратегии **мартингейл**. В случае неудачной сделки робот должен увеличивать сумму следующей ставки в **2,5 раза**, пока не будет достигнута прибыль. Однако, мне нужен робот с более «умным»

Informações sobre o projeto

Orçamento
30+ USD
Desenvolvedor
27 USD