
The Multi-Cloud Momentum EMA Strategy is a trend following system that combines the Ichimoku Cloud with an Exponential Moving Average (EMA). This strategy identifies market trend direction by analyzing price position relative to the cloud, implementing volume filters, and utilizing the EMA technical indicator to generate buy and sell signals. It also incorporates a dynamic stop-loss mechanism for risk control, making it a relatively complete trading system.
The strategy is based on the following core principles:
Ichimoku Cloud Analysis:
Volume Confirmation:
EMA Indicator Filter:
Stop Loss Settings:
Strategy execution flow: 1. Calculate Ichimoku Cloud indicators (Tenkan-sen, Kijun-sen, Senkou Span A, Senkou Span B) 2. Calculate 44-period EMA and volume conditions 3. Determine buy/sell opportunities based on price position relative to the cloud, volume conditions, and optional EMA filter 4. Enter positions when conditions are met and set stop loss 5. Exit current positions when price breaks through the EMA
Multiple Indicator Confirmation: Combines multiple technical indicators including Ichimoku Cloud, volume, and EMA, improving signal reliability and reducing false signal risk.
Flexible Condition Configuration: The strategy allows users to customize whether EMA filter conditions need to be met, providing adaptability for different market environments.
Complete Risk Management: Through percentage-based stop loss settings, it provides clear risk control parameters to protect capital.
Trend Capture Capability: The Ichimoku Cloud itself is an excellent trend assessment tool, and combined with EMA confirmation, it enhances the strategy’s ability to capture medium to long-term trends.
Liquidity Consideration: Through the volume filter, it ensures trading only when the market has sufficient liquidity, avoiding uncertainties in low liquidity environments.
Clear Entry and Exit Logic: The strategy has clear entry (cloud breakthrough + volume) and exit (EMA breakthrough or stop loss) conditions, making the trading decision process transparent.
Poor Performance in Ranging Markets: As a trend following strategy, it may frequently generate false signals in sideways or range-bound markets, leading to consecutive losses. Solution: Add a volatility filter to pause trading in low volatility environments.
Lag Risk: The Ichimoku Cloud indicator has a certain lag, especially with the leading span set to 26 periods of displacement, which may lead to suboptimal entry timing. Solution: Consider adjusting displacement parameters or incorporating more sensitive short-term indicators as supplements.
Stop Loss Trigger Frequency: In highly volatile markets, the 2% stop loss setting may be too tight, causing frequent triggers. Solution: Dynamically adjust the stop loss percentage based on the volatility characteristics of the trading instrument.
Parameter Sensitivity: Strategy effectiveness is relatively sensitive to parameter settings (such as EMA period, Ichimoku Cloud parameters), and different market environments may require different parameters. Solution: Conduct parameter optimization tests to find more robust parameter combinations.
Lack of Profit Targets: The strategy defines clear stop losses but does not set profit targets, which may lead to losing existing profits during retracements. Solution: Add trailing stop loss or profit target parameters.
Dynamic Parameter Adjustment:
Add Market Environment Filters:
Optimize Profit-Taking Mechanism:
Phased Entry and Exit:
Add Reversal Confirmation Indicators:
The Multi-Cloud Momentum EMA Strategy is a trend following system that comprehensively utilizes the Ichimoku Cloud, EMA, and volume filters. Through the combination of multiple technical indicators, this strategy can effectively identify trends and provide clear entry and exit signals. At the same time, the built-in stop loss mechanism provides assurance for risk control.
The core advantage of the strategy lies in its comprehensive consideration of key trading factors including price position, trend direction, volume, and dynamic stop loss, constructing a relatively complete trading decision framework. However, as a trend following system, this strategy may not perform well in ranging markets, and parameter settings have a certain sensitivity.
By implementing the suggested optimization directions, especially dynamic parameter adjustment, market environment filtering, and optimized profit-taking mechanisms, this strategy has the potential to achieve more stable performance across different market environments. Ultimately, this strategy provides trend-following traders with a structured technical analysis framework, helping them capture trend opportunities while controlling risk.
/*backtest
start: 2024-08-04 00:00:00
end: 2025-08-02 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Ichimoku Cloud Buy & Sell w/ Custom EMA & Volume Filters", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === INPUTS ===
conversionPeriods = input.int(9, title="Tenkan-sen Periods")
basePeriods = input.int(26, title="Kijun-sen Periods")
displacement = input.int(26, title="Cloud Displacement")
laggingSpan = input.int(52, title="Senkou Span B Periods")
emaPeriod = input.int(44, title="EMA Length for Exit", minval=1)
avgVolLen = input.int(10, title="Average Volume Length for Filter")
useStopLoss = input.bool(true, title="Use Stop Loss for Exits")
stopLossPerc = input.float(2.0, title="Stop Loss (%)", minval=0.1, step=0.1)
requireAboveEMA = input.bool(true, title="Only Buy Above EMA?")
requireBelowEMA = input.bool(true, title="Only Sell Below EMA?")
// === ICHIMOKU CALCULATIONS ===
tenkan = (ta.highest(high, conversionPeriods) + ta.lowest(low, conversionPeriods)) / 2
kijun = (ta.highest(high, basePeriods) + ta.lowest(low, basePeriods)) / 2
senkouA = (tenkan + kijun) / 2
senkouB = (ta.highest(high, laggingSpan) + ta.lowest(low, laggingSpan)) / 2
senkouA_now = senkouA[displacement]
senkouB_now = senkouB[displacement]
// === EMA CALC ===
emaVal = ta.ema(close, emaPeriod)
// === VOLUME CONDITION ===
avgVol = ta.sma(volume[1], avgVolLen) // Excludes current candle's volume
volCondition = volume > avgVol
// === BUY CONDITION ===
buyCondition = (close > senkouA_now and close > senkouB_now and volCondition and (not requireAboveEMA or close > emaVal))
if buyCondition
stopLevel = useStopLoss ? close * (1 - stopLossPerc / 100) : na
strategy.entry("Buy", strategy.long)
if useStopLoss
strategy.exit("Buy SL", from_entry="Buy", stop=stopLevel)
// === SELL CONDITION ===
sellCondition = (close < senkouA_now and close < senkouB_now and volCondition and (not requireBelowEMA or close < emaVal))
if sellCondition
stopLevelSell = useStopLoss ? close * (1 + stopLossPerc / 100) : na
strategy.entry("Sell", strategy.short)
if useStopLoss
strategy.exit("Sell SL", from_entry="Sell", stop=stopLevelSell)
// === EXIT CONDITIONS ===
exitBuy = close < emaVal // Exit long if close < EMA
if exitBuy
strategy.close("Buy")
exitSell = close > emaVal // Exit short if close > EMA
if exitSell
strategy.close("Sell")
// === PLOTS ===
plot(emaVal, color=color.yellow, linewidth=2, title="EMA")
plot(senkouA, color=color.green, title="Senkou Span A", offset=displacement)
plot(senkouB, color=color.red, title="Senkou Span B", offset=displacement)