This is a trend-following trading system based on triple Exponential Moving Average (EMA) crossover signals. The system combines EMA8, EMA21, and EMA89 to generate trading signals through crossovers, and integrates smart stop-loss management based on risk-to-reward ratio, achieving automated risk management.
The system consists of the following core functional modules:
The strategy achieves a complete trend-following trading system by combining classical EMA crossover systems with modern risk management methods. The system’s strengths lie in its reliable signal generation mechanism and intelligent risk control methods, but parameters still need to be optimized and functions extended based on specific market characteristics in practical applications. Through continuous improvement and optimization, the strategy has the potential to maintain stable performance across various market conditions.
/*backtest start: 2024-12-06 00:00:00 end: 2025-01-04 08:00:00 period: 4h basePeriod: 4h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover with SL to BE", shorttitle="OmegaGalsky", overlay=true) // Входни параметри ema8_period = input.int(8, title="EMA 8 Period") ema21_period = input.int(21, title="EMA 21 Period") ema89_period = input.int(89, title="EMA 89 Period") fixed_risk_reward = input.float(1.0, title="Risk/Reward Ratio (R2R)") sl_percentage = input.float(0.001, title="Stop Loss Percentage", step=0.0001) tp_percentage = input.float(0.0025, title="Take Profit Percentage", step=0.0001) // Изчисляване на EMA ema8 = ta.ema(close, ema8_period) ema21 = ta.ema(close, ema21_period) ema89 = ta.ema(close, ema89_period) // Условия за BUY buy_condition = ta.crossover(ema8, ema21) and close > ema89 and close > open // Условия за SELL sell_condition = ta.crossunder(ema8, ema21) and close < ema89 and close < open // Вход в BUY позиция if (buy_condition) stop_loss = close * (1 - sl_percentage) take_profit = close * (1 + tp_percentage) strategy.entry("BUY", strategy.long) strategy.exit("TP/SL", from_entry="BUY", stop=stop_loss, limit=take_profit) // Вход в SELL позиция if (sell_condition) stop_loss = close * (1 + sl_percentage) take_profit = close * (1 - tp_percentage) strategy.entry("SELL", strategy.short) strategy.exit("TP/SL", from_entry="SELL", stop=stop_loss, limit=take_profit) // Логика за преместване на стоп към BE if (strategy.position_size > 0) entry_price = strategy.position_avg_price // За LONG позиция if (strategy.position_size > 0 and high >= entry_price + (entry_price * sl_percentage * fixed_risk_reward)) strategy.exit("SL to BE", from_entry="BUY", stop=entry_price) label.new(bar_index, high, "SL moved to BE", color=color.green) // За SHORT позиция if (strategy.position_size < 0 and low <= entry_price - (entry_price * sl_percentage * fixed_risk_reward)) strategy.exit("SL to BE", from_entry="SELL", stop=entry_price) label.new(bar_index, low, "SL moved to BE", color=color.red) // Чертеж на EMA plot(ema8, color=color.orange, title="EMA 8") plot(ema21, color=color.blue, title="EMA 21") plot(ema89, color=color.purple, title="EMA 89")