Strategy vault / Trend following
Dual EMA Stochastic Trend Following Trading Strategy
This strategy is a trend-following trading system based on dual EMAs and the Stochastic indicator. It combines moving averages to determine market trends while using the Stochastic indicator to capture crossover…

Overview
This strategy is a trend-following trading system based on dual EMAs and the Stochastic indicator. It combines moving averages to determine market trends while using the Stochastic indicator to capture crossover signals in overbought/oversold areas, with dynamic stop-loss and take-profit levels for risk management. This approach ensures both signal reliability and effective risk-reward management for each trade.
Strategy Principles
The strategy relies on several core elements:
- Uses 50 and 150-period EMAs to determine market trend direction
- Employs Stochastic indicator (14,3,3) to identify overbought/oversold areas
- Looks for Stochastic crossover signals in trend direction
- Sets dynamic stop-loss based on recent price action
- Uses 1:2 risk-reward ratio for take-profit levels
Buy conditions require:
- Close price above both 50 and 150 EMAs
- 50 EMA above 150 EMA
- Stochastic K value below 30 and K line crosses above D line
Sell conditions are opposite:
- Close price below both 50 and 150 EMAs
- 50 EMA below 150 EMA
- Stochastic K value above 70 and K line crosses below D line
Strategy Advantages
- Multiple confirmation mechanism improves reliability
- Trend confirmation through EMA system
- False signal filtering using Stochastic
- Multiple conditions required for signal generation
- Comprehensive risk management system
- Dynamic stop-loss based on recent support/resistance
- Fixed risk-reward ratio optimizes expected returns
- Trend confirmation reduces false breakout risks
- High adaptability
- Applicable to multiple timeframes
- Parameters adjustable to market characteristics
- Suitable for high-volatility markets
Strategy Risks
- Poor performance in ranging markets
- Frequent EMA crossovers leading to false signals
- Recommended for clear trend periods only
- Can be improved with trend filters
- Stop-loss placement risks
- Too tight may result in frequent stops
- Too loose may lead to large losses
- Needs adjustment based on market volatility
- Lag risks
- EMA system has inherent lag
- May miss trend initiation points
- Entry timing requires careful consideration
Strategy Optimization Directions
- Add trend strength filtering
- Incorporate ADX indicator for trend strength
- Set minimum trend strength threshold
- Avoid trading in weak trends
- Optimize Stochastic parameters
- Adjust parameters based on market characteristics
- Consider adaptive parameters
- Add additional technical indicators for confirmation
- Improve stop-loss/take-profit mechanism
- Consider trailing stops
- Dynamic adjustment based on volatility
- Optimize risk-reward ratio settings
Summary
This is a complete strategy system combining trend following and momentum trading. Through the combination of EMA system and Stochastic indicator, it ensures trades align with the main trend while entering at appropriate price levels. Additionally, the strategy includes comprehensive risk management mechanisms, using dynamic stop-losses and fixed risk-reward ratios to control risk. While there are some inherent limitations, the strategy's overall performance can be further improved through the suggested optimizations. In practical application, traders are advised to adjust parameters according to specific market characteristics and their own risk preferences.
Source Pine Script
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-11 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © quadawosanya
//@version=5
//indicator("My script")
//@version=5
strategy("EMA-Stochastic Strategy", overlay=true)
// EMA settings
ema50 = ta.ema(close, 50)
ema150 = ta.ema(close, 150)
// Stochastic settings
kLength = 14
dLength = 3
smoothK = 3
stochK = ta.sma(ta.stoch(close, high, low, kLength), smoothK)
stochD = ta.sma(stochK, dLength)
// Parameters for Stop Loss and Take Profit
var float stopLossLevel = na
var float takeProfitLevel = na
// Buy condition
buySignal = (close > ema50 and close > ema150) and (ema50 > ema150) and (stochK < 30 and ta.crossover(stochK, stochD))
// Sell condition
sellSignal = (close < ema50 and close < ema150) and (ema50 < ema150) and (stochK > 70 and ta.crossunder(stochK, stochD))
// Previous low for Stop Loss for Buy
lowBeforeBuy = ta.lowest(low, 5)
// Previous high for Stop Loss for Sell
highBeforeSell = ta.highest(high, 5)
// Entry and exit logic
if (buySignal)
stopLossLevel := lowBeforeBuy
risk = close - stopLossLevel
takeProfitLevel := close + 2 * risk
strategy.entry("Buy", strategy.long)
strategy.exit("Take Profit/Stop Loss", "Buy", stop=stopLossLevel, limit=takeProfitLevel)
if (sellSignal)
stopLossLevel := highBeforeSell
risk = stopLossLevel - close
takeProfitLevel := close - 2 * risk
strategy.entry("Sell", strategy.short)
strategy.exit("Take Profit/Stop Loss", "Sell", stop=stopLossLevel, limit=takeProfitLevel)
// Plotting EMAs
plot(ema50, color=color.blue, title="50 EMA")
plot(ema150, color=color.red, title="150 EMA")
// Visualize Buy and Sell signals
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Visualize Stop Loss and Take Profit levels
plot(stopLossLevel, color=color.red, style=plot.style_line, linewidth=2, title="Stop Loss")
plot(takeProfitLevel, color=color.green, style=plot.style_line, linewidth=2, title="Take Profit")
plot(close)
Published by ChaoZhang on the FMZ strategy square · last modified 2024-12-13. 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.
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Dual-EMA-Stochastic-Trend-Following-Trading-Strategy.md- npx agenkit install engineering-kit in your project
- Paste the command into your agent and approve each phase
- 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
- EMA AROON ASHPine Script · Trend following · 3m
- EMA SMA Multi Indicator Comprehensive Trend Following StrategyPine Script · Trend following · 1h
- Multi Factor Trend Price Action Strategy with Dynamic Risk Management SystemPine Script · Trend following · 2h
- Multi Indicator Dynamic Trend Following Strategy Based on EMA and SMAPine Script · Trend following · 1d
- Trend Tracking and Short term Trading Strategy Based on ADX IndicatorPine Script · Trend following · 1d
- Multi Period Trend Confirmation Dynamic Risk Control Quantitative Trading StrategyPine Script · Trend following · 1h