이 전략은 트렌드 추적 및 역전 거래를 구현하기 위해 MACD, EMA 및 RSI 지표를 결합합니다. MACD가 신호선을 통해 상승하고 닫기 가격이 EMA보다 높을 때 구매 신호를 생성하고, MACD가 신호선을 넘어 밀고 닫기 가격이 EMA보다 낮을 때 판매 신호를 생성하여 트렌드를 포착합니다. 한편, RSI가 과소매 또는 과소매 수준에 도달하면 역전을 거래합니다.
MACD 디프와 EMA를 계산합니다.
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
ema = ema(close, input(200))
구매 신호를 생성: MACD 디프 (macd - 신호) 는 0 이상으로 이동하고 닫기 가격은 EMA 이상입니다.
delta = macd - signal
buy_entry= close>ema and delta > 0
매출 신호를 생성합니다. MACD 차이는 0 아래로 떨어지고, 폐쇄 가격은 EMA 아래로 떨어집니다.
sell_entry = close<ema and delta<0
RSI가 과잉 구매 또는 과잉 판매 수준에 도달할 때 거래 반전.
if (rsi > 70 or rsi < 30)
reversal := true
해결책:
이 전략은 트렌드 추적 및 역전 거래를 유기적으로 구현하기 위해 MACD, EMA 및 RSI를 결합합니다. MACD는 트렌드 방향을 판단하고, EMA는 소음을 필터하고, RSI는 역전 지점을 캡처합니다. 이러한 다중 지표 조합은 시장 움직임을 더 잘 결정할 수 있으며, 잘못된 신호를 줄이는 동시에 수익성을 향상시킬 수 있습니다. 파라미터 최적화 및 스톱 로스 관리는 불필요한 손실을 줄이기 위해 더 향상 될 수 있습니다. 전반적으로, 이것은 안정적인 이익의 잠재력을 가진 탄탄한 전략 프레임워크입니다.
/*backtest start: 2023-11-17 00:00:00 end: 2023-12-17 00:00:00 period: 1h basePeriod: 15m 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/ // © mbuthiacharles4 //Good with trending markets //@version=4 strategy("CHARL MACD EMA RSI") fast = 12, slow = 26 fastMA = ema(close, fast) slowMA = ema(close, slow) macd = fastMA - slowMA signal = sma(macd, 9) ema = ema(close, input(200)) rsi = rsi(close, input(14)) //when delta > 0 and close above ema buy delta = macd - signal buy_entry= close>ema and delta > 0 sell_entry = close<ema and delta<0 var bought = false var sold = false var reversal = false if (buy_entry and bought == false and rsi <= 70) strategy.entry("Buy",true , when=buy_entry) bought := true strategy.close("Buy",when= delta<0 or rsi > 70) if (delta<0 and bought==true) bought := false //handle sells if (sell_entry and sold == false and rsi >= 30) strategy.entry("Sell",false , when=sell_entry) sold := true strategy.close("Sell",when= delta>0 or rsi < 30) if (delta>0 and sold==true) sold := false if (rsi > 70 or rsi < 30) reversal := true placing = rsi > 70 ? high :low label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny) if (reversal == true) if (rsi < 70 and sold == false and delta < 0) strategy.entry("Sell",false , when= delta < 0) sold := true reversal := false else if (rsi > 30 and bought == false and delta > 0) strategy.entry("Buy",true , when= delta > 0) bought := true reversal := false