This article describes a trading strategy implemented in Backtrader that uses the Ichimoku Cloud (Kumo) to identify breakout opportunities in trending markets. The strategy combines multiple Ichimoku components to confirm trade signals and employs trailing stops to manage risk and capture profits.
The Ichimoku Cloud Breakout Trading Strategy integrates the following components:
Below is the complete Backtrader code for the strategy:
import backtrader as bt
class IchimokuCloudStrategy(bt.Strategy):
"""
Trades on a confirmed breakout from the Ichimoku Cloud (Kumo).
1. Price breaks out of the Kumo.
2. Tenkan/Kijun cross confirms momentum.
3. Chikou Span confirms the trend.
4. Exit is managed with a trailing stop-loss.
"""
= (
params # Default Ichimoku parameters
'tenkan', 7),
('kijun', 14),
('senkou', 30),
('senkou_lead', 14), # How far forward to plot the cloud
('chikou', 14), # How far back to plot the lagging span
(# Strategy parameters
'trail_percent', 0.02), # Trailing stop loss of 2%
(
)
def __init__(self):
self.order = None
# Add the Ichimoku indicator with its parameters
self.ichimoku = bt.indicators.Ichimoku(
self.datas[0],
=self.p.tenkan,
tenkan=self.p.kijun,
kijun=self.p.senkou,
senkou=self.p.senkou_lead,
senkou_lead=self.p.chikou
chikou
)
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
if order.status in [order.Completed]:
if order.isbuy():
# Place a trailing stop for the long position
self.sell(exectype=bt.Order.StopTrail, trailpercent=self.p.trail_percent)
elif order.issell():
# Place a trailing stop for the short position
self.buy(exectype=bt.Order.StopTrail, trailpercent=self.p.trail_percent)
self.order = None
def next(self):
# Check for pending orders
if self.order:
return
# Check if we are in a position
if not self.position:
# --- Bullish Entry Conditions ---
# 1. Price is above both lines of the Kumo cloud
= (self.data.close[0] > self.ichimoku.senkou_span_a[0] and
is_above_cloud self.data.close[0] > self.ichimoku.senkou_span_b[0])
# 2. Tenkan-sen is above Kijun-sen
= self.ichimoku.tenkan_sen[0] > self.ichimoku.kijun_sen[0]
is_tk_cross_bullish
# 3. Chikou Span is above the price from 14 periods ago
= self.ichimoku.chikou_span[0] > self.data.high[-self.p.chikou]
is_chikou_bullish
if is_above_cloud and is_tk_cross_bullish and is_chikou_bullish:
self.order = self.buy()
# --- Bearish Entry Conditions ---
# 1. Price is below both lines of the Kumo cloud
= (self.data.close[0] < self.ichimoku.senkou_span_a[0] and
is_below_cloud self.data.close[0] < self.ichimoku.senkou_span_b[0])
# 2. Tenkan-sen is below Kijun-sen
= self.ichimoku.tenkan_sen[0] < self.ichimoku.kijun_sen[0]
is_tk_cross_bearish
# 3. Chikou Span is below the price from 14 periods ago
= self.ichimoku.chikou_span[0] < self.data.low[-self.p.chikou]
is_chikou_bearish
if is_below_cloud and is_tk_cross_bearish and is_chikou_bearish:
self.order = self.sell()
The strategy uses the Ichimoku Cloud indicator to identify and confirm breakout trades, with trailing stops for risk management:
Indicators:
Trading Logic (next
):
Order Management
(notify_order
):
## Potential Improvements
tenkan
,
kijun
, senkou
, senkou_lead
,
chikou
, or trail_percent
to optimize for
specific assets or market conditions.This strategy is designed for trending markets where price breakouts from the Ichimoku Cloud signal strong directional moves, suitable for assets like forex, stocks, or cryptocurrencies, and can be backtested to evaluate its effectiveness across various timeframes and assets.