이 전략은 이중 EMA 라인을 기반으로 하는 동적 트레일링 스톱 전략이다. 시장 트렌드 방향을 결정하기 위해 9일 및 20일 EMA를 사용하고, 거짓 브레이크를 필터링하기 위해 RSI 지표와 결합한다. 또한 동적 스톱 손실을 계산하고 수익 수준을 취하기 위해 ATR 지표를 사용합니다. 이 전략은 중장기 보유에 적합합니다.
이 전략은 9일 EMA를 단기 라인 및 20일 EMA를 중장기 라인으로 사용하여 가격 트렌드를 결정합니다. 가격이 단기 라인을 넘어서고 종료 가격이 이전 날의 최고보다 높을 때, RSI가 70보다 낮고 20일 EMA 마이너스 1 ATR보다 높게 닫을 때 길게됩니다. 가격이 단기 라인을 넘어서고 종료 가격이 이전 날의 최저보다 낮을 때, RSI가 30보다 높고 종료 가격이 20일 EMA 마이너스 1 ATR보다 높을 때 짧게됩니다.
스톱 로스는 종료 가격 마이너스 1.5배 ATR로 설정된다. 영업이익은 종료 가격 더하기 ATR을 취업이익 계수로 곱하여 설정된다. 또한 트렌드 트레일링 스톱 로스를 설정하기 위해 2배 ATR을 사용합니다.
전체적으로 이것은 비교적 안정적인 중장기 보유 전략이다. 단기 소음에 영향을 받지 않도록 주요 시장 추세를 결정하기 위해 이중 EMA를 사용합니다. RSI의 추가는 또한 어느 정도 잘못된 브레이크를 필터링합니다. 또한, 동적 스톱 로스 / 취득 메커니즘은 시장 변동성에 따라 전략을 조정할 수 있습니다. 그러나 여전히 이동 평균의 지연 및 스톱 로스 침투 가능성과 같은 위험이 있습니다. 우리는 실제 응용 과정에서 매개 변수 조정 및 최적화를 통해 최적의 구성을 찾아야합니다.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("CJTrade", overlay=true) short = ema(close, 9) medium = ema(close, 20) long = ema(close, 50) very_long = ema(close, 200) plot(short, color=color.gray, linewidth=1) plot(medium, color=color.red, linewidth=1) plot(long, color=color.black, linewidth=1) plot(very_long, color=color.blue, linewidth=1) rsiValue = rsi(close, 14) near20EMA = close > medium - atr(14) longCond = crossover(close[1], short) and close >= high[1] and rsiValue < 70 and near20EMA shortCond = crossunder(close[1], short) and close <= low[1] and rsiValue > 30 and near20EMA strategy.entry("Long", strategy.long, when=longCond) strategy.entry("Short", strategy.short, when=shortCond) atrValue = atr(14) stopLossLevel = close - atrValue * 1.5 // Dynamic take profit level based on ATR takeProfitMultiplier = input(2, title="Take Profit Multiplier", minval=0.1, maxval=10, step=0.1) takeProfitLevel = close + atrValue * takeProfitMultiplier // Trailing stop loss for long positions longTrailingStop = close - atrValue * 2 strategy.exit("LongTrailingStop", from_entry="Long", loss=longTrailingStop) // Trailing stop loss for short positions shortTrailingStop = close + atrValue * 2 strategy.exit("ShortTrailingStop", from_entry="Short", loss=shortTrailingStop) strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel) strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)