0bps

Strategy vault / Breakout

Dynamic EMA Breakthrough and Reversal Strategy

This strategy is a trading system based on the 14-period Exponential Moving Average (EMA), combining candlestick pattern analysis and price momentum characteristics. The strategy identifies trading signals by…

Author
ChaoZhang
Complexity
Starter · 67 lines
Parameters
0
Backtest bar
1h · intraday
Tested on
BTC/USDT · futures

IMG

Overview

This strategy is a trading system based on the 14-period Exponential Moving Average (EMA), combining candlestick pattern analysis and price momentum characteristics. The strategy identifies trading signals by analyzing price-EMA crossovers and candlestick formation features (such as body-to-wick ratios) to capture market trend reversal points.

Strategy Principles

The core logic is based on several key elements:

  1. EMA Breakthrough Confirmation: Uses 14-period EMA as dynamic support and resistance levels.
  2. Candlestick Pattern Analysis:
    • Buy conditions require bullish candles (close above open)
    • Sell conditions require bearish candles (close below open)
  3. Price Crossing Validation:
    • Buy signals require at least 50% of the candle body crossing above EMA
    • Sell signals require price to completely break below EMA
  4. Wick Ratio Control:
    • Buy signals limit total wick length to 40% of total candle length
    • Sell signals restrict lower wick to 20% of total candle length

Strategy Advantages

  1. Strict Signal Quality Control: Multiple validation conditions effectively reduce false breakthrough risks
  2. Precise Pattern Recognition: Combines candlestick body and wick ratio analysis for improved signal reliability
  3. Strong Trend Following Capability: Utilizes EMA's dynamic properties to effectively track market trends
  4. Comprehensive Risk Control: Reduces trading risks through strict wick ratio controls
  5. Good Adaptability: Strategy parameters can be flexibly adjusted for different market conditions

Strategy Risks

  1. Sideways Market Risk: May generate frequent false signals in range-bound markets
  2. Lag Risk: Inherent delay in EMA indicator may miss optimal entry points
  3. Gap Risk: Large price gaps may render stop-losses ineffective
  4. Parameter Sensitivity: Different market environments may require parameter adjustments

Strategy Optimization Directions

  1. Implement Volatility Filtering:
    • Add ATR indicator to assess market volatility
    • Increase signal confirmation thresholds during high volatility periods
  2. Multi-timeframe Validation:
    • Add trend confirmation across multiple timeframes
    • Establish multi-timeframe signal consistency validation
  3. Dynamic Parameter Optimization:
    • Dynamically adjust EMA periods based on market volatility
    • Adaptive adjustment of wick ratio thresholds
  4. Position Management Enhancement:
    • Design dynamic position sizing based on market volatility
    • Introduce pyramid position building mechanism

Summary

The strategy builds a comprehensive trading system by integrating EMA, candlestick patterns, and price action analysis. Its strengths lie in strict signal confirmation and comprehensive risk control, though market conditions significantly impact strategy performance. Through the suggested optimization directions, the strategy's stability and adaptability can be further enhanced.

Source Pine Script

/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Buy and Sell Signals with EMA", overlay=true)

// Define the 14-period EMA
ema14 = ta.ema(close, 14)

// --- Buy Conditions ---
ema_length = input.int(14, title="EMA Length")

// Calculate the 14 EMA
ema_14 = ta.ema(close, ema_length)

// Calculate the candle body and wicks
body = close - open
upper_wick = high - close
lower_wick = open - low
total_candle_length = high - low

// Define the condition for the candle to be green (bullish)
is_green_candle = close > open

// Condition for crossing the 14 EMA (previous close was below, current close is above)
crossing_ema = ta.crossover(close, ema_14)

// Condition for at least 50% of the candle's body crossing the 14 EMA
body_crossed_ema = (close - open) * 0.5 <= (close - ema_14) and close > ema_14

// Condition for wick percent being less than or equal to 40% of the total candle length
wick_percent = (upper_wick + lower_wick) / total_candle_length
valid_wick_condition = wick_percent <= 0.4

// Define the buy condition
buy_condition = is_green_candle and crossing_ema and body_crossed_ema and valid_wick_condition

// --- Sell Conditions ---
candleIsRed = close < open
priceBelowEMA = close < ema14
prevLowAboveEMA = low[1] > ema14[1]  // Previous candle's low must be above the EMA
wickTooLarge = (low - math.min(open, close)) / (high - low) <= 0.2  // Lower wick should not exceed 20%

// Sell signal condition
sellSignal = priceBelowEMA and candleIsRed and prevLowAboveEMA and wickTooLarge

// --- Plotting ---
plot(ema14, color=color.blue, linewidth=2, title="14-period EMA") // Plot the 14-period EMA

// Plot the buy signal as an arrow on the chart
plotshape(buy_condition, color=color.green, style=shape.labelup, location=location.belowbar, text="BUY")

// Plot the sell signal as an arrow on the chart
plotshape(sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")

// Optional: Add strategies for backtesting
if (buy_condition)
    strategy.entry("Buy", strategy.long)

if (sellSignal)
    strategy.entry("Sell", strategy.short)

Published by ChaoZhang on the FMZ strategy square · last modified 2024-12-20. 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/Dynamic-EMA-Breakthrough-and-Reversal-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