Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Universal Pip Value and Dynamic Lot Calculator Class for MQL5 - библиотека для MetaTrader 5
- Просмотров:
- 17
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
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
HUD для MT5 с калькулятором риска в режиме реального времени и контролем размера лота. Рассчитывает точный размер лота на основе баланса счета, целевого процента риска и динамического стоп-лосса по ATR с предупреждением о минимальном превышении размера лота.
RJO Daily Pivot Levels Classic and Fibonacci for MT5
Индикатор «Daily Pivot Points» для MetaTrader 5 с использованием классического метода и метода Фибоначчи. Отображает точки PP, R1–R3 и S1–S3 на основе предыдущей закрывшейся дневной свечи.
YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя
Скрипт рисует уровни Рудолфа Акселя
YURAZ_MCCH
Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.