
이 거래 전략은 지수 이동 평균 (EMA), 상대적으로 약한 지수 (RSI) 및 이동 평균 수렴 분산 (MACD) 의 세 가지 기술 지표를 결합하여, 가격의 특정 조건을 충족하면 구매 및 판매 신호를 생성하기 위해 그들의 교차와 수학적 관계를 분석합니다. 동시에, 이 전략은 거래 위험을 관리하기 위해 동적 정지 및 중단을 설정합니다.
이 전략은 EMA, RSI 및 MACD와 같은 여러 기술 지표를 결합하여 전체적인 거래 시스템을 형성한다. 트렌드 상황에서 전략은 트렌드를 효과적으로 포착하고 동적 스톱 로즈로 위험을 제어 할 수 있다. 그러나, 충격적인 상황에서, 자주 거래하는 것은 수익에 영향을 미칠 수 있다.
/*backtest
start: 2023-06-08 00:00:00
end: 2024-06-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("[BUY/SELL]EMA RSI MACD with TP and SL", overlay=true)
// Input parameters
ema1Length = input.int(9, title="EMA 1 Length")
ema2Length = input.int(21, title="EMA 2 Length")
ema3Length = input.int(34, title="EMA 3 Length")
rsiLength = input.int(14, title="RSI Length")
rsiThreshold = input.int(50, title="RSI Threshold")
macdFastLength = input.int(12, title="MACD Fast Length")
macdSlowLength = input.int(26, title="MACD Slow Length")
macdSignalSmoothing = input.int(9, title="MACD Signal Smoothing")
tpPips = input.int(10, title="Take Profit (pips)")
slPips = input.int(10, title="Stop Loss (pips)")
// HLCC4 calculation
hlcc4_custom = (high + low + close + close) / 4
// Calculate EMA and RSI based on HLCC4
ema1 = ta.ema(hlcc4_custom, ema1Length)
ema2 = ta.ema(hlcc4_custom, ema2Length)
ema3 = ta.ema(hlcc4_custom, ema3Length)
rsi = ta.rsi(hlcc4_custom, rsiLength)
// Calculate MACD Histogram
[a, b, histogram] = ta.macd(hlcc4_custom, macdFastLength, macdSlowLength, macdSignalSmoothing)
// EMA1 and EMA2 crossover conditions
emaCrossUp = ta.crossover(ema1, ema2)
emaCrossDown = ta.crossunder(ema1, ema2)
// BUY signal conditions
buySignal = emaCrossUp and hlcc4_custom > ema3 and rsi > rsiThreshold and close > open and histogram > 0
// SELL signal conditions
sellSignal = emaCrossDown and hlcc4_custom < ema3 and rsi < rsiThreshold and close < open and histogram < 0
var float entryPrice = na
var float tpPrice = na
var float slPrice = na
// Check if there is an open position and a contrary signal appears, then close all old orders first
if strategy.opentrades > 0
if sellSignal and strategy.position_size > 0
strategy.close("Buy", comment="Close Buy Order")
if buySignal and strategy.position_size < 0
strategy.close("Sell", comment="Close Sell Order")
// Place a BUY order when there is a BUY signal and set TP and SL based on pips
if buySignal and strategy.position_size == 0
entryPrice := close
tpPrice := entryPrice + tpPips * syminfo.mintick
slPrice := entryPrice - slPips * syminfo.mintick
strategy.entry("Buy", strategy.long)
strategy.exit("Take Profit/Stop Loss", "Buy", limit=tpPrice, stop=slPrice)
// Place a SELL order when there is a SELL signal and set TP and SL based on pips
if sellSignal and strategy.position_size == 0
entryPrice := close
tpPrice := entryPrice - tpPips * syminfo.mintick
slPrice := entryPrice + slPips * syminfo.mintick
strategy.entry("Sell", strategy.short)
strategy.exit("Take Profit/Stop Loss", "Sell", limit=tpPrice, stop=slPrice)
// Plot the crossover points of EMA1 and EMA2
plotshape(series=emaCrossUp, location=location.belowbar, color=color.aqua, style=shape.triangleup, title="EMA Cross Up", size=size.small)
plotshape(series=emaCrossDown, location=location.abovebar, color=color.red, style=shape.triangledown, title="EMA Cross Down", size=size.small)
// Plot the EMA lines on the chart
plot(ema1, title="EMA 1", color=color.aqua)
plot(ema2, title="EMA 2", color=color.red)
plot(ema3, title="EMA 3", color=color.yellow, linewidth=2)