Размера лота в зависимости от риска
Здесь мы рассмотрим способ расчета размера лота в mql4 и mql5 так, чтобы при закрытии сделки по стоп-лоссу, получался убыток, который будет заранее указываться во входных параметрах советника.
Вначале зададим этот самый входной параметр. В нём мы будем указывать процент от депозита (баланса торгового счета), которым мы готовы рискнуть, в случае если сделка закроется с убытком по стоп-лоссу.
input double RiskPercent = 1.00; // Риск в % от депозита
Например, если баланс счета составляет 1000 USD, и в настройках задан риск 1%, то при закрытии сделки по стоп-лоссу будет получен убыток -10 долларов.
Далее сама функция расчета лота от риска:
//+------------------------------------------------------------------+
//| Расчитывает размер лота по риску от размера стоп-лосса |
//+------------------------------------------------------------------+
double GetVolumeByRisk(double price_open, double price_stoploss)
{
// Текущий баланс
double balance = AccountInfoDouble(ACCOUNT_BALANCE);
// Сумма средств, которые рискуем потерять
double balance_risk = balance * RiskPercent / 100;
// Размер минимального изменения цены в пунктах за один тик
double tick_size = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE);
// Стоимость тика для прибыльной позиции
double tick_value = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE);
// Размер стоп-лосса в пунктах цены
double stoploss_size = MathAbs(price_open - price_stoploss);
// Сумма риска в зависимости от размера стоп-лоссса
double stoploss_risk = stoploss_size / tick_size * tick_value;
// Искомый результат - размер лота в зависимости от риска и размера стоп-лосса
double volume = balance_risk / stoploss_risk ;
// Нормализация размера лота
volume = NormalizeLots(volume);
// Возвращаем готовый к использованию размер лота
return volume;
}
Функция принимает цену открытия будущей сделки - price_open
и цену уровня стоп-лосс - price_stoploss
. Если размер стоп-лосса в пунктах известен заранее, например, указывается во входных параметрах робота для Metatrader, то можно изменить функцию GetVolumeByRisk
, убрав параметр price_stoploss
, и в теле функции использовать указанное ранее значение стоп-лосса в пунктах умноженное на _Point
, вместо переменной stoploss_size
.
А так как цена уровня стоп-лосс может быть не только фиксированной, но и, например, может рассчитываться по ценам фракталов или других индикаторов, то мы используем данный вариант функции с параметром price_stoploss
и расчетом количества пунктов стоп-лосса в теле функции.
MQL функция GetVolumeByRisk работает как есть в обоих версиях торгового терминала: в МТ4 и МТ5.
Функция NormalizeLots
подробно рассмотрена в этой статье.