Strategy vault / Trend following
Dynamic Take Profit Stop Loss EMA Crossover Quantitative Trading Strategy
This strategy is a quantitative trading system based on moving average crossovers combined with dynamic take-profit and stop-loss mechanisms. The core of the strategy uses the crossover of 10-period and 26-period…
Overview
This strategy is a quantitative trading system based on moving average crossovers combined with dynamic take-profit and stop-loss mechanisms. The core of the strategy uses the crossover of 10-period and 26-period Exponential Moving Averages (EMA) to identify market trends and executes trades during retracements. The system employs fixed take-profit and stop-loss levels to protect capital through strict risk management. This strategy is particularly suitable for high-volatility trading instruments, as they often provide clearer market reversal signals and greater profit potential.
Strategy Principles
The strategy utilizes two EMAs with different periods as core indicators: a short-term 10-period EMA and a long-term 26-period EMA. A buy signal is generated when the short-term EMA crosses above the long-term EMA, indicating an uptrend; a sell signal is generated when the short-term EMA crosses below the long-term EMA, indicating a downtrend. The system enters trades during price retracements after trend confirmation, with 30 points take-profit and 15 points stop-loss levels for risk control. The strategy employs a single-signal mechanism, allowing only one directional trade at a time, which helps reduce system complexity and improve reliability.
Strategy Advantages
- Clear Signals: Uses EMA crossovers as trading signals, providing simple and clear rules that are easy to execute and monitor
- Controlled Risk: Employs fixed take-profit and stop-loss levels for effective risk management per trade
- Trend Following: Combines EMA crossovers and price retracements to effectively capture trending markets
- High Automation: Clear strategy logic that's easy to implement in automated trading systems
- High Adaptability: Suitable for various trading instruments, especially those with high volatility
Strategy Risks
- Choppy Market Risk: May generate frequent false signals in range-bound markets
- Slippage Risk: May face significant slippage during high volatility periods
- Stop-Loss Risk: Fixed stop-loss levels may not be flexible enough in certain market conditions
- Signal Lag: EMA crossover signals have inherent lag, potentially missing optimal entry points
- Money Management Risk: Requires proper control of position sizing per trade
Optimization Directions
- Dynamic Stop-Loss: Consider adjusting stop-loss levels based on market volatility
- Signal Filtering: Add volume, volatility, or other auxiliary indicators to filter false signals
- Time Filtering: Implement trading time filters to avoid highly volatile periods
- Position Management: Add partial profit-taking mechanisms while allowing remaining positions to follow trends
- Money Management: Implement dynamic position sizing based on account equity
Conclusion
This strategy establishes a complete trading system by combining EMA crossovers with price retracements. The strategy design is simple and intuitive, with clear risk control, suitable for high-volatility trading instruments. Through proper optimization and parameter adjustment, this strategy has the potential to achieve stable returns in live trading. Traders are advised to conduct thorough backtesting and demo trading before live implementation, and optimize parameters according to actual trading conditions.
Source Pine Script
/*backtest
start: 2023-11-18 00:00:00
end: 2024-11-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)
// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10
// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10 // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value
// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)
// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)
// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na
// Variable to track if a trade is active
var bool inTrade = false
// Check if the trade hit stop loss or take profit
if (inTrade)
if (not na(long_take_profit) and close >= long_take_profit)
inTrade := false // Exit the trade after hitting target
long_entry_price := na
long_take_profit := na
long_stop_loss := na
strategy.close("Long")
if (not na(long_stop_loss) and close <= long_stop_loss)
inTrade := false // Exit the trade after hitting stoploss
long_entry_price := na
long_take_profit := na
long_stop_loss := na
strategy.close("Long")
if (not na(short_take_profit) and close <= short_take_profit)
inTrade := false // Exit the trade after hitting target
short_entry_price := na
short_take_profit := na
short_stop_loss := na
strategy.close("Short")
if (not na(short_stop_loss) and close >= short_stop_loss)
inTrade := false // Exit the trade after hitting stoploss
short_entry_price := na
short_take_profit := na
short_stop_loss := na
strategy.close("Short")
// Only generate new signals if not already in a trade
if (not inTrade)
if (longCondition)
long_entry_price := close
long_take_profit := close + target_value
long_stop_loss := close - stoploss_value
strategy.entry("Long", strategy.long) // Enter a long trade
strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
inTrade := true // Mark trade as active
if (shortCondition)
short_entry_price := close
short_take_profit := close - target_value
short_stop_loss := close + stoploss_value
strategy.entry("Short", strategy.short) // Enter a short trade
strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
inTrade := true // Mark trade as active
// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")
plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")
plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")
Published by ChaoZhang on the FMZ strategy square · last modified 2024-11-18. 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/Dynamic-Take-Profit-Stop-Loss-EMA-Crossover-Quantitative-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
- 200 EMA VWAP MFI Trend Following StrategyPine Script · Trend following · 1d
- 4 EMA Trend StrategyPine Script · Trend following · 1d
- ADX MA and EMA Long Only Trend Tracking StrategyPine Script · Trend following · 1d
- ATR Dynamic Trend Following and EMA Crossover Trading StrategyPine Script · Trend following · 1d
- ATR and Moving Average Crossover Hybrid StrategyPine Script · Trend following · 1h
- ATR and T3 Moving Average StrategyPine Script · Trend following · 5m