
Ichimoku Trading Series: Part 6 of 10 | ← Previous | View Full Series
ATR-Based Risk Management
Instead of fixed pip distances, we use the Average True Range (ATR) to adapt our stops to current market volatility.
Why ATR?
- In volatile markets → wider stops (avoid noise)
- In calm markets → tighter stops (maximize R:R)
- Automatically adapts to the instrument
The Formulas
Stop-Loss Distance
SL_distance = ATR × ATR_MULT_SL
# For long: SL = entry - SL_distance
# For short: SL = entry + SL_distance
Take-Profit Distance
TP_distance = SL_distance × RR_MULT_TP
# For long: TP = entry + TP_distance
# For short: TP = entry - TP_distance
Default Parameters
ATR_LEN = 14 # ATR lookback period
ATR_MULT_SL = 2.0 # SL = ATR × 2
ATR_MULT_TP = 4.0 # TP = ATR × 4 (gives 2R)
With these defaults:
- Risk-Reward Ratio = 4 / 2 = 2R
- Win only 33% of the time to break even
- Our 53-69% win rate means consistent profits
Optimization Insights
From backtesting results:
| ATR Multiplier | Best RR Ratio | Returns |
|---|---|---|
| 1.0 (tight) | 2.5-2.9 | Highest |
| 1.5 (medium) | 1.5-2.0 | Good |
| 2.0 (wide) | 1.0-1.5 | Moderate |
Key Finding: Tight stops with high R:R work best!
“The best set of parameters is decreasing like this. Either you have a high stop-loss distance and a low risk-reward ratio, or you have a low ATR multiplier or stop-loss distance and a high risk-reward ratio — which actually is working the best for this strategy.”
Why Tight Stops Work Here
Because we are entering at cloud bounces (retracements):
“We are squeezing our entry position to the retracement to the minimum of the retracement when we are dipping within inside of the cloud and just getting out of it. So this is why you do not need a very wide stop-loss distance.”
Code Implementation
# Risk settings
ATR_LEN = 14
ATR_MULT_SL = 1.5 # Tight stop-loss
ATR_MULT_TP = 3.0 # Higher R:R (2R)
# In strategy:
sl_dist = atr * self.atr_mult_sl
tp_dist = sl_dist * self.rr_mult_tp
if signal == 1: # Long entry
sl = close - sl_dist
tp = close + tp_dist
self.buy(size=0.99, sl=sl, tp=tp)
elif signal == -1: # Short entry
sl = close + sl_dist
tp = close - tp_dist
self.sell(size=0.99, sl=sl, tp=tp)
