0bps

Strategy vault / Breakout

Price Deviation from Daily Average Trading Strategy

This trading strategy generates trading signals based on an indicator called Ichimoku Kinko Hyo. Ichimoku Kinko Hyo literally translates to "one glance equilibrium chart". It combines the advantages of moving…

Author
ChaoZhang
Complexity
Intermediate · 79 lines
Parameters
7
Backtest bar
1d · swing
Tested on
BTC/USDT · futures

IMG

Overview

This trading strategy generates trading signals based on an indicator called Ichimoku Kinko Hyo. Ichimoku Kinko Hyo literally translates to "one glance equilibrium chart". It combines the advantages of moving averages and band indicators to identify both trend direction and support/resistance levels, thus considered a comprehensive indicator.

The strategy utilizes Ichimoku's component lines to determine trend direction and strength. Trading signals are generated when the price breaks through the top or bottom of the Cloud. Also, the strategy takes advantage of "edge-to-edge" entry opportunities unique to Ichimoku system.

Strategy Logic

The strategy employs five lines from the Ichimoku Kinko Hyo system:

  1. Tenkan Line: 9-period average of highest high and lowest low
  2. Kijun Line: 26-period average of highest high and lowest low
  3. Senkou Span A: average of Tenkan Line and Kijun Line
  4. Senkou Span B: 52-period average of highest high and lowest low
  5. Chikou Line: 26-period lagging moving average of close

The Cloud is the area between Senkou Span A and Senkou Span B, representing the current trend range generally.

Trading signals are generated based on the following scenarios:

  1. Price breaking above the top of the Cloud: long signal
  2. Price breaking below the bottom of the Cloud: short signal
  3. Price entering the Cloud from below: long edge-to-edge opportunity
  4. Price entering the Cloud from above: short edge-to-edge opportunity

In addition, the strategy uses Tenkan/Kijun cross to determine take profit and stop loss levels.

Advantages

The biggest strength of this strategy lies in Ichimoku's ability to determine trend direction and support/resistance levels.

  1. The Cloud identifies major trend direction, avoiding trading against the trend.
  2. The component lines spot support/resistance levels to locate breakout opportunities.
  3. Edge-to-edge entry provides more profit potential.

Also, the strategy incorporates Tenkan/Kijun cross for partial profit taking and risk control.

Risks and Management

The main risk comes from potential gaps in Ichimoku lines causing false breakout.

Solutions include optimizing parameters to narrow down line intervals, or adding filters to avoid trading in ranging zones.

Optimization

Several aspects of the strategy can be improved:

  1. Optimize Ichimoku parameters and adjust moving average periods to suit more symbols and timeframes.

  2. Incorporate volume confirmation to avoid gaps causing false signals.

  3. Add other indicators such as MACD, RSI for extra trend and oscillator filters.

  4. Enhance stop loss and take profit rules, e.g. trailing stop, position sizing etc.

Summary

In summary, this Ichimoku system identifies trend direction and trading chances with the Cloud and component lines. The advantages lie in clear trend determination and accurate entry signals. Further improvements on parameters and filters can lower false signals for better strategy performance.

Parameters

NameDefaultWhat it controls
v_input_int_120Conversion Line Periods
v_input_int_260Base Line Periods
v_input_int_3120Lagging Span 2 Periods
v_input_int_430Displacement
v_input_bool_1trueLong Entry
v_input_bool_2trueShort Entry
v_input_bool_3trueE2E Entry

Source Pine Script

/*backtest
start: 2022-12-08 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Ichimoku Cloud", shorttitle="Ichimoku", overlay=true)

previous_close = close[1]

conversionPeriods = input.int(20, minval=1, title="Conversion Line Periods"),
basePeriods = input.int(60, minval=1, title="Base Line Periods")
laggingSpan2Periods = input.int(120, minval=1, title="Lagging Span 2 Periods"),
displacement = input.int(30, minval=1, title="Displacement")

long_entry = input.bool(true, title="Long Entry")
short_entry = input.bool(true, title="Short Entry")
e2e_entry = input.bool(true, title="E2E Entry")

donchian(len) => math.avg(ta.lowest(len), ta.highest(len))

tenkan = donchian(conversionPeriods)
kijun = donchian(basePeriods)
spanA = math.avg(tenkan, kijun)
spanB = donchian(laggingSpan2Periods)

plot(tenkan, color=#0496ff, title="Conversion Line")
plot(kijun, color=#991515, title="Base Line")
plot(close, offset = -displacement, color=#459915, title="Lagging Span")

p1 = plot(spanA, offset = displacement, color=#459915, title="Lead 1")
p2 = plot(spanB, offset = displacement, color=#991515, title="Lead 2")
fill(p1, p2, color = spanA > spanB ? #459915 : #991515)

ss_high = math.max(spanA[displacement - 1], spanB[displacement - 1])
ss_low = math.min(spanA[displacement - 1], spanB[displacement - 1])

// Entry/Exit Signals
tk_cross_bull = tenkan > kijun
tk_cross_bear = tenkan < kijun
kumo_twist_bull = ta.mom(close, displacement) > 0
kumo_twist_bear = ta.mom(close, displacement) < 0

price_above_kumo = close > ss_high
price_below_kumo = close < ss_low

price_enters_kumo_top = previous_close > ss_high[1] and close < ss_high
price_enters_kumo_bottom = previous_close < ss_low[1] and close > ss_low

bullish = tk_cross_bull and kumo_twist_bull and price_above_kumo
bearish = tk_cross_bear and kumo_twist_bear and price_below_kumo

bullishe2e = price_enters_kumo_bottom // and tk_cross_bull
bearishe2e = price_enters_kumo_top // and tk_cross_bear

price_touches_kumo_top = ta.cross(close, ss_high)
price_touches_kumo_bottom = ta.cross(close, ss_low)

strategy.entry("Long", strategy.long, when=bullish and long_entry)
strategy.close("Long", when=tk_cross_bear)
strategy.close("Long", when=price_enters_kumo_top)

strategy.entry("Long e2e", strategy.long, when=bullishe2e and e2e_entry)
strategy.close("Long e2e", when=price_touches_kumo_top)
strategy.close("Long e2e", when=price_below_kumo, qty_percent = 100)
// strategy.close("Long e2e", when=ta.cross(close, kijun), qty_percent = 50)

strategy.entry("Short", strategy.short, when=bearish and short_entry)
strategy.close("Short", when=tk_cross_bull)
strategy.close("Short", when=price_enters_kumo_bottom)

strategy.entry("Short e2e", strategy.short, when=bearishe2e and e2e_entry)
strategy.close("Short e2e", when=price_touches_kumo_bottom)
strategy.close("Short e2e", when=price_above_kumo, qty_percent = 100)
// strategy.close("Long e2e", when=ta.cross(close, kijun), qty_percent = 50)

Published by ChaoZhang on the FMZ strategy square · last modified 2023-12-15. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.

Build this with AgenKit

A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.

in Claude Code, Cursor, Codex & 4 more
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Price-Deviation-from-Daily-Average-Trading-Strategy.md
  1. npx agenkit install engineering-kit in your project
  2. Paste the command into your agent and approve each phase
  3. Get tests, backtest, risk controls and a paper-trading switch

Understand it first

Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.

Related specs

esc

Try , , or .

↑↓ move↵ open