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.
The strategy relies on several core elements:
Buy conditions require:
Sell conditions are opposite:
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.
/*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)