Lot sizing by risk percentage
Computes the exact volume so that a hit stop-loss costs a precise amount, via SYMBOL_TRADE_TICK_VALUE and SYMBOL_TRADE_TICK_SIZE — works on Forex, indices and metals.
Prerequisites
MetaTrader 5, MQL5
MQL5
double LotForRisk(string symbol, double riskMoney, double slPoints)
{
double tickValue = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE);
double tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
double point = SymbolInfoDouble(symbol, SYMBOL_POINT);
if(tickValue <= 0.0 || tickSize <= 0.0 || slPoints <= 0.0)
return 0.0;
// Perte en devise du compte pour 1 lot si le SL est touché
double lossPerLot = slPoints * point / tickSize * tickValue;
if(lossPerLot <= 0.0)
return 0.0;
return NormalizeLot(symbol, riskMoney / lossPerLot);
}
// Exemple : risquer 1% de l'équité sur un SL de 250 points
double risk = AccountInfoDouble(ACCOUNT_EQUITY) * 0.01;
double lot = LotForRisk(_Symbol, risk, 250.0);Result
2026.06.10 10:02:14.873 RiskSizer (EURUSD,H1) Equité 10000.00 USD -> risque 1% = 100.00 USD 2026.06.10 10:02:14.874 RiskSizer (EURUSD,H1) SL 250 pts | tick_value 1.00 | tick_size 0.00001 -> perte/lot 250.00 USD 2026.06.10 10:02:14.874 RiskSizer (EURUSD,H1) Lot calculé 0.40 -> normalisé 0.40 (min 0.01 / step 0.01) 2026.06.10 10:02:14.875 RiskSizer (EURUSD,H1) Si SL touché : perte = 100.00 USD soit 1.00% de l'équité — OK
Risk ManagementLot SizingTick ValueExpert Advisor