Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - библиотека для MetaTrader 5

Просмотров:
17
Рейтинг:
(2)
Опубликован:
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

CRiskCalculator — это объектно-ориентированная библиотека заголовков MQL5, предназначенная для управления рисками и расчета объемов в советниках и торговых инструментах . Она рассчитывает денежную стоимость пункта и точные размеры лотов на основе заданной суммы риска по счету и расстояния до стоп-лосса в пунктах .

Распространённой проблемой в автоматической торговле является расчёт размера позиции по кросс-валютным парам (например, при торговле GBPJPY на счёте в евро) . Данный класс решает эту задачу, сочетая встроенные свойства символов MetaTrader 5 с резервной системой конвертации для кросс-валютных пар .

Основные особенности

  • Расчёт с использованием двух механизмов: в качестве основного метода расчёта используются встроенные свойства брокера ( SYMBOL_TRADE_TICK_VALUE и SYMBOL_TRADE_TICK_SIZE ) . Если эти параметры недоступны или не инициализированы брокером, система автоматически переключается на ручное извлечение базовой и котировочной валют и запросы курсов конвертации .

  • Нормализация параметров брокера: автоматически ограничивает рассчитанные объемы значениями SYMBOL_VOLUME_MIN и SYMBOL_VOLUME_MAX и выравнивает их по шагу SYMBOL_VOLUME_STEP, чтобы избежать ошибок отклонения со стороны брокера (таких как TRADE_RETCODE_INVALID_VOLUME) .

  • Чистый объектно-ориентированный дизайн: инкапсулирован в классе CRiskCalculator без загрязнения глобальной области видимости, что упрощает его интеграцию в существующие проекты советников или пользовательских индикаторов .

  • Автонастройка: автоматически определяет базовую валюту текущего счёта (ACCOUNT_CURRENCY) при инициализации .

Пример интеграции

Чтобы использовать этот класс в вашем советнике или скрипте, поместите файл CRiskCalculator.mqh в каталог MQL5/Include/ и создайте экземпляр объекта :

#include <CRiskCalculator.mqh>

// Вспомогательная функция для отображения панели с высоким контрастом на графике
void DrawChartPanel(const string &lines[])
  {
   int x = 20, y = 30;
   int width = 280, lineHeight = 18;
   int height = (ArraySize(lines) * lineHeight) + 20;

   // 1. Создать фоновый прямоугольник (отображается на белых, чёрных или пользовательских диаграммах)
   string bgName = "RiskCalc_BG";
   if(ObjectFind(0, bgName) < 0)
      ObjectCreate(0, bgName, OBJ_RECTANGLE_LABEL, 0, 0, 0);

   ObjectSetInteger(0, bgName, OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, bgName, OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, bgName, OBJPROP_YDISTANCE, y);
   ObjectSetInteger(0, bgName, OBJPROP_XSIZE, width);
   ObjectSetInteger(0, bgName, OBJPROP_YSIZE, height);
   ObjectSetInteger(0, bgName, OBJPROP_BGCOLOR, clrDarkSlateGray);
   ObjectSetInteger(0, bgName, OBJPROP_BORDER_COLOR, clrDodgerBlue);
   ObjectSetInteger(0, bgName, OBJPROP_BORDER_TYPE, BORDER_FLAT);
   ObjectSetInteger(0, bgName, OBJPROP_SELECTABLE, false);

   // 2. Отображение текстовых строк внутри панели
   for(int i = 0; i < ArraySize(lines); i++)
     {
      string lblName = "RiskCalc_Lbl_" + IntegerToString(i);
      if(ObjectFind(0, lblName) < 0)
         ObjectCreate(0, lblName, OBJ_LABEL, 0, 0, 0);

      ObjectSetInteger(0, lblName, OBJPROP_CORNER, CORNER_LEFT_UPPER);
      ObjectSetInteger(0, lblName, OBJPROP_XDISTANCE, x + 12);
      ObjectSetInteger(0, lblName, OBJPROP_YDISTANCE, y + 10 + (i * lineHeight));
      ObjectSetString(0, lblName, OBJPROP_TEXT, lines[i]);
      ObjectSetString(0, lblName, OBJPROP_FONT, "Segoe UI");
      ObjectSetInteger(0, lblName, OBJPROP_FONTSIZE, 9);
      ObjectSetInteger(0, lblName, OBJPROP_COLOR, (i == 0) ? clrYellow : clrWhite);
      ObjectSetInteger(0, lblName, OBJPROP_SELECTABLE, false);
     }

   ChartRedraw(0);
  }

void OnStart()
  {
   // Создать экземпляр калькулятора риска
   CRiskCalculator riskCalc;

   string symbol     = _Symbol;
   double riskAmount = 100.0; // Целевой уровень риска в валюте счета
   double slPips     = 25.0;  // Расстояние стоп-лосса в пунктах

   // Вычислить параметры
   double lotSize      = riskCalc.CalculateLotSize(symbol, riskAmount, slPips);
   double pipValPerLot = riskCalc.GetPipValuePerLot(symbol);

   // Подготовить строки вывода
   string info[6];
   info[0] = "=== RISK & POSITION CALCULATOR ===";
   info[1] = "Symbol: " + symbol;
   info[2] = "Account Currency: " + AccountInfoString(ACCOUNT_CURRENCY);
   info[3] = "Target Risk: $" + DoubleToString(riskAmount, 2);
   info[4] = "Calculated Lot Size: " + DoubleToString(lotSize, 2) + " lots";
   info[5] = "Pip Value (1 Lot): " + DoubleToString(pipValPerLot, 2);

   // Отобразить панель графического интерфейса на графике
   DrawChartPanel(info);
  }
Пример на графике

Справочник по классу

Метод Тип возвращаемого значения Описание
GetPipValuePerLot(string symbol) double

Возвращает денежную стоимость 1 пункта для 1 стандартного лота в валюте счета .

GetPipValue(string symbol, double volume) double

Возвращает общую денежную стоимость 1 пункта для указанного объема .

CalculateLotSize(string symbol, double riskAmount, double slPips) double

Рассчитывает и нормализует размер лота с учётом целевого денежного риска и стоп-лосса в пунктах .


Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/77130

Gueta Position Sizer: Risk and Lot Guard HUD Gueta Position Sizer: Risk and Lot Guard HUD

HUD для MT5 с калькулятором риска в режиме реального времени и контролем размера лота. Рассчитывает точный размер лота на основе баланса счета, целевого процента риска и динамического стоп-лосса по ATR с предупреждением о минимальном превышении размера лота.

RJO Daily Pivot Levels  Classic and  Fibonacci for MT5 RJO Daily Pivot Levels Classic and Fibonacci for MT5

Индикатор «Daily Pivot Points» для MetaTrader 5 с использованием классического метода и метода Фибоначчи. Отображает точки PP, R1–R3 и S1–S3 на основе предыдущей закрывшейся дневной свечи.

YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя

Скрипт рисует уровни Рудолфа Акселя

YURAZ_MCCH YURAZ_MCCH

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.