Position Sizing
Position sizing — hitung ukuran posisi optimal berdasarkan risk tolerance.
Mengapa Position Sizing Penting?
Position sizing adalah faktor paling penting dalam risk management:
Risk = Position Size × Distance to Stop Loss
Position sizing yang tepat memastikan:
- Konsistensi — risiko sama per trade.
- Survival — akun tidak blow up dari satu trade.
- Growth — akun tumbuh seiring waktu.
Metode
1. Fixed Lot
Ukuran lot tetap untuk setiap trade:
public class FixedLotSizer
{
public decimal CalculateLotSize(PositionParams p)
{
return 0.5m; // Selalu 0.5 lot
}
}
Pro: Simpel, predictable. Con: Tidak adaptif terhadap volatilitas atau ukuran akun.
2. Fixed Percentage
% tetap dari equity per trade:
public class FixedPercentageSizer
{
public decimal CalculateLotSize(PositionParams p)
{
var riskAmount = p.AccountEquity * (p.RiskPercent / 100);
var lotSize = riskAmount / (p.StopLossPips * p.PipValue);
return Math.Round(lotSize, 2);
}
}
Pro: Amount risk konstan sebagai % equity. Con: Lot size bervariasi, bisa terlalu besar di akun kecil.
3. Kelly Criterion
Optimal sizing berdasarkan edge:
public class KellySizer
{
public decimal CalculateLotSize(PositionParams p)
{
var kelly = (p.WinRate * p.AvgWin) - (p.LossRate * p.AvgLoss);
kelly /= p.AvgWin;
var fraction = kelly / 2; // Half-Kelly untuk conservative
return p.MaxLot * fraction;
}
}
Pro: Mathematically optimal untuk long-run growth. Con: Volatile, bisa oversized di akun kecil.
4. Volatility-Based
Sesuaikan dengan ATR (Average True Range):
public class VolatilitySizer
{
public decimal CalculateLotSize(PositionParams p)
{
var atr = p.GetAtr(14);
var riskPips = atr * 2; // 2 ATR stop
var riskAmount = p.AccountEquity * (p.RiskPercent / 100);
var lotSize = riskAmount / (riskPips * p.PipValue);
return Math.Min(lotSize, p.MaxLot);
}
}
Pro: Adaptif terhadap kondisi pasar. Con: Lebih kompleks.
5. Monte Carlo Simulation
Simulasi untuk find optimal sizing:
public class MonteCarloSizer
{
public decimal CalculateLotSize(PositionParams p)
{
var results = new List<decimal>();
for (int i = 0; i < 10000; i++)
{
results.Add(SimulateTrades(p, 100));
}
// Return sizing yang memaksimalkan sharpe
return FindOptimalSizing(results);
}
}
Konfigurasi
Global Settings
{
"positionSizing": {
"defaultMethod": "fixed-percentage",
"riskPercent": 1.0,
"maxLot": 10.0,
"minLot": 0.01
}
}
Per-Strategy
{
"strategy": {
"name": "Trend Follower",
"sizing": {
"method": "volatility",
"atrMultiplier": 2.0,
"riskPercent": 1.5
}
}
}
Dashboard
Halaman Position Sizing menampilkan:
- Current method — metode yang aktif.
- Risk analysis — risk per trade dan aggregate.
- Size recommendations — suggested size untuk trade saat ini.
- Historical performance — performa berdasarkan sizing method.
- Monte Carlo simulation — hasil simulasi.
Best Practices
- Start conservative — 1% risk per trade untuk mulai.
- Adjust based on performance — naikkan jika win rate tinggi.
- Consider costs — slippage dan spread mempengaruhi sizing optimal.
- Review regularly — backtest different methods.
- Combine with stop loss — sizing tanpa stop loss = disaster.