How to calculate Volume/ Lot Size exactly
How to calculate Volume/ Lot Size exactly
12 Jul 2024, 12:14
Hi, I am trying to calculate Volume/ Lot Size exactly risking 1% of balance with a 1:1 ratio according to StopLoss in pips. In in theory it would work but the logs gives me another P&L. I guess that something in the function code is wrong or I must consider the spread, comission etc… I attached img where you will see that the profit or loss not is exactly 1% of balance but the chart shows a close value to the 1% (100$). Can someone help me or give me the good function? Thanks
public double CalculateVolume(double StopLossInPips, double Risk)
{
double VolumeGross = (Risk / (0.01 * StopLossInPips)) * InicialBalance;
double Volume = Math.Round(VolumeGross/100000, 2)*100000;
// double Comission = 4 * LotSize;
return Volume;
}
Replies
GonzaloBlanco
12 Jul 2024, 12:45
( Updated at: 13 Jul 2024, 06:46 )
RE: How to calculate Volume/ Lot Size exactly
PanagiotisCharalampous said:
Hi there,
Here you go
private double GetVolume(double sl) { var maxAmountRisked = Account.Equity * (RiskPerTrade / 100); return Symbol.NormalizeVolumeInUnits(maxAmountRisked / (((sl + CommissionCostInPips()) * Symbol.PipValue)), RoundingMode.Down); } private double CommissionCostInPips() { if (!UseCommissions) return 0; // We get the symbol conditions switch (Symbol.CommissionType) { case SymbolCommissionType.QuoteCurrencyPerOneLot: { return (Symbol.Commission * 2 / Symbol.Bid) / Symbol.PipSize; } case SymbolCommissionType.PercentageOfTradingVolume: { return (Symbol.Commission * 100) * 2 / Symbol.PipSize; } case SymbolCommissionType.UsdPerMillionUsdVolume: { return AssetConverter.Convert(Symbol.Commission * 2, "USD", Symbol.QuoteAsset) / 1000000 / Symbol.PipSize; } case SymbolCommissionType.UsdPerOneLot: { return AssetConverter.Convert(Symbol.Commission * 2, "USD", Symbol.QuoteAsset) / Symbol.LotSize / Symbol.PipSize; } default: return 0; } }
But note that the risk will never be exact due to the fact that the volume needs to be rounded to the closest valid value
Best regards,
Ok, thanks, I am going to backtest
@GonzaloBlanco
PanagiotisCharalampous
14 Jul 2024, 06:33
RE: RE: How to calculate Volume/ Lot Size exactly
GonzaloBlanco said:
PanagiotisCharalampous said:
Hi there,
Here you go
private double GetVolume(double sl) { var maxAmountRisked = Account.Equity * (RiskPerTrade / 100); return Symbol.NormalizeVolumeInUnits(maxAmountRisked / (((sl + CommissionCostInPips()) * Symbol.PipValue)), RoundingMode.Down); } private double CommissionCostInPips() { if (!UseCommissions) return 0; // We get the symbol conditions switch (Symbol.CommissionType) { case SymbolCommissionType.QuoteCurrencyPerOneLot: { return (Symbol.Commission * 2 / Symbol.Bid) / Symbol.PipSize; } case SymbolCommissionType.PercentageOfTradingVolume: { return (Symbol.Commission * 100) * 2 / Symbol.PipSize; } case SymbolCommissionType.UsdPerMillionUsdVolume: { return AssetConverter.Convert(Symbol.Commission * 2, "USD", Symbol.QuoteAsset) / 1000000 / Symbol.PipSize; } case SymbolCommissionType.UsdPerOneLot: { return AssetConverter.Convert(Symbol.Commission * 2, "USD", Symbol.QuoteAsset) / Symbol.LotSize / Symbol.PipSize; } default: return 0; } }
But note that the risk will never be exact due to the fact that the volume needs to be rounded to the closest valid value
Best regards,
Ok, thanks, I am going to backtest
Did you read my response carefully?
@PanagiotisCharalampous
PanagiotisCharalampous
12 Jul 2024, 12:36
Hi there,
Here you go
But note that the risk will never be exact due to the fact that the volume needs to be rounded to the closest valid value
Best regards,
@PanagiotisCharalampous