mirror of
https://github.com/raa251/Liquidity_Predator.git
synced 2026-07-06 13:42:02 +00:00
40 lines
No EOL
1.3 KiB
MQL5
40 lines
No EOL
1.3 KiB
MQL5
double M_CalculateLotSize(double riskPercent, double stopLossPoints, double Percentage, ENUM_ORDER_TYPE orderType)
|
|
{
|
|
// --- Safety checks
|
|
if(riskPercent <= 0 || stopLossPoints <= 0)
|
|
return 0.0;
|
|
|
|
// --- Account & symbol info
|
|
double balance = AccountInfoDouble(ACCOUNT_BALANCE);
|
|
double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
|
|
double tick_value = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
|
|
|
|
double minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
|
|
double maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
|
|
double lotStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
|
|
|
|
// --- Money to risk
|
|
double riskMoney = balance * riskPercent / 100.0;
|
|
|
|
double lot = riskMoney / stopLossPoints;
|
|
|
|
// --- Loss per Lot
|
|
double CalcedLoss = fLossPerLot * lot;
|
|
riskMoney = riskMoney - CalcedLoss;
|
|
lot = riskMoney / stopLossPoints;
|
|
|
|
double MaxLotMargin = M_CalcMaxLotMargin(orderType);
|
|
|
|
lot = MathMin(lot, MaxLotMargin);
|
|
|
|
// Scale lot
|
|
lot = lot * (Percentage / 100);
|
|
|
|
// --- Normalize to lot step
|
|
lot = MathFloor(lot / lotStep) * lotStep;
|
|
|
|
// --- Clamp to symbol limits
|
|
lot = MathMax(minLot, MathMin(lot, maxLot * stGVL.nNumberOfPositions)); // * Number of positions because afterwards it is split up
|
|
|
|
return NormalizeDouble(lot, 2);
|
|
} |