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

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
ОБЩЕЕ ОПИСАНИЕ Создание автоматизированной торговой системы (торгового робота) для терминала QUIK на языке Lua, предназначенной для внутридневной торговли биржевыми инструментами в течение торговой сессии. Ключевой сценарий использования: Трейдер утром запускает терминал и скрипт, выбирает настройки (режим торговли, наборы паттернов от 3 до 10), после чего робот автономно ведет торговлю до завершения торговой
Добрый день. Нужно написать советника: - Хеджирование ( открытия двух сделок одновременно buy, sell) - Buy например в плюсе, то СЛ в безубыток с тралом и пирамидингом (набор объема в buy) - Sell в минусе, то двигается стоп в безубыток buy с набором объема в sell -Трал ордера когда их как минимум 4 в одну сторону (Настраиваемое) -П ирамидинг ордеров через каждые 10 п, усреднение на том же уровне где и открытие ордера

Información sobre el proyecto

Presupuesto
30+ USD