
This strategy is a trend-following system based on moving average crossovers and dynamic stop-loss management. The core logic is to capture the beginning of uptrends through the golden cross of fast moving average (EMA5) and slow moving average (EMA200), combined with ATR-based dynamic stop-loss for profit protection. The strategy also incorporates a fixed percentage take-profit target to balance risk and reward.
The strategy operates on the following core mechanisms: 1. Entry signals are triggered when EMA5 crosses above EMA200, indicating short-term momentum breakthrough 2. Dynamic stop-loss is calculated based on the ATR indicator, set at close price minus ATR value multiplied by a factor 3. Take-profit target is set at a fixed percentage (default 5%) above entry price 4. During position holding, ATR stop-loss moves up with price movement, forming a trailing stop 5. The strategy automatically closes positions when price hits either stop-loss or take-profit levels
This is a trend-following strategy combining classic technical indicators with modern risk management. It captures trends through moving average crossovers and protects profits using ATR dynamic stop-loss, performing well in trending markets. While there are risks of false signals, strategy stability can be significantly improved through parameter optimization and additional filters. The core advantages lie in its systematic operational logic and flexible risk management mechanism, making it suitable as a foundation framework for medium to long-term trend trading.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
// -----------------------------------------------------------
// Title: EMA5 Cross-Up EMA200 with ATR Trailing Stop & Take-Profit
// Author: ChatGPT
// Version: 1.1 (Pine Script v6)
// Notes: Enter Long when EMA(5) crosses above EMA(200).
// Exit on either ATR-based trailing stop or
// specified % Take-Profit.
// -----------------------------------------------------------
//@version=6
strategy(title="EMA5 Cross-Up EMA200 ATR Stop", shorttitle="EMA5x200_ATRStop_v6", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity,default_qty_value=100)
// -- 1) Inputs
emaFastLength = input.int(5, "Fast EMA Length")
emaSlowLength = input.int(200, "Slow EMA Length")
atrPeriod = input.int(14, "ATR Period")
atrMult = input.float(2.0,"ATR Multiplier", step=0.1)
takeProfitPerc = input.float(5.0,"Take-Profit %", step=0.1)
// -- 2) Indicator Calculations
emaFast = ta.ema(close, emaFastLength)
emaSlow = ta.ema(close, emaSlowLength)
atrValue = ta.atr(atrPeriod)
// -- 3) Entry Condition: EMA5 crosses above EMA200
emaCrossUp = ta.crossover(emaFast, emaSlow)
// -- 4) Determine a dynamic ATR-based stop loss (for trailing)
longStopPrice = close - (atrValue * atrMult)
// -- 5) Take-Profit Price
// We store it in a variable so we can update it when in position.
var float takeProfitPrice = na
var float avgEntryPrice = na
if strategy.position_size > 0
// If there is an open long, get the average fill price:
avgEntryPrice := strategy.position_avg_price
takeProfitPrice := avgEntryPrice * (1 + takeProfitPerc / 100)
else
// If no open position, reset
takeProfitPrice := na
avgEntryPrice := na
// -- 6) Submit Entry Order
if emaCrossUp
strategy.entry(id="Long", direction=strategy.long)
// -- 7) Submit Exit Orders (Stop or Take-Profit)
strategy.exit(id = "Exit Long",stop = longStopPrice,limit = takeProfitPrice)
// -- 8) (Optional) Plotting for Visuals
plot(emaFast, color=color.new(color.yellow, 0), linewidth=2, title="EMA Fast")
plot(emaSlow, color=color.new(color.blue, 0), linewidth=2, title="EMA Slow")
plot(longStopPrice, color=color.red, linewidth=2, title="ATR Trailing Stop")