이 전략은 EMA 황금 십자가를 사용하여 거래 신호를 생성합니다. 즉, 빠른 EMA 라인이 느린 EMA 라인의 위를 넘을 때 구매 신호가 생성되고 빠른 EMA 라인이 느린 EMA 라인의 아래를 넘을 때 판매 신호가 생성됩니다. 이는 전형적인 트렌드 다음 전략에 속합니다. 동시에 전략은 ATR 지표를 사용하여 수익을 보장하면서 위험을 제어하기 위해 동적 스톱 로스를 설정합니다.
해결책:
이 전략은 비교적 간단하고 사용하기 쉽다. EMA 크로스오버를 기반으로 신호를 생성하고 트렌드를 따르며 위험을 효과적으로 제어하기 위해 ATR 트레일링 스톱 로스를 사용합니다. 일부 잘못된 신호가있을 수 있지만 주요 트렌드를 포착하는 데 강력한 기능을 가지고 있으며 수익률은 비교적 안정적입니다. 기본 양적 거래 전략으로 적합합니다. 매개 변수 최적화 및 기능 확장으로 개선 가능성이 크기도합니다.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © byee322 /// This strategy uses the EMA to generate buy and sell signals with a 1.5x ATR stop loss //@version=5 strategy("EMA Strategy with ATR Stop Loss", overlay=true) // Define the EMA lengths as input parameters emaLength1 = input(13, "EMA Length 1") emaLength2 = input(48, "EMA Length 2") // Define the moving averages ema1 = ta.ema(close, emaLength1) ema2 = ta.ema(close, emaLength2) // Buy signal: EMA 1 crosses above EMA 2 buy = ta.crossover(ema1, ema2) // Sell signal: EMA 1 crosses below EMA 2 sell = ta.crossunder(ema1, ema2) // Define the state variable state = 0 state := buy ? 1 : sell ? -1 : nz(state[1]) // Change the color of the candles color = state == 1 ? color.green : state == -1 ? color.red : na // Plot the colored candles plotcandle(open, high, low, close, color=color) // Plot the signals on the chart with text labels plotshape(buy, style=shape.triangleup, color=color.new(color.green, 50), location=location.belowbar, text="Buy") plotshape(sell, style=shape.triangledown, color=color.new(color.red, 50), location=location.abovebar, text="Sell") // Calculate the ATR atrVal = ta.atr(14) // Calculate the stop loss level for buy stopLossBuy = buy ? close[1] - 1.5 * atrVal : na // Calculate the stop loss level for sell stopLossSell = sell ? close[1] + 1.5 * atrVal : na // Plot the stop loss level for buy plot(stopLossBuy, color=color.new(color.green, 50), linewidth=3) // Plot the stop loss level for sell plot(stopLossSell, color=color.new(color.red, 50), linewidth=3) if buy strategy.entry("Enter Long", strategy.long) else if sell strategy.entry("Enter Short", strategy.short)