리소스 로딩... 로딩...

EMA RSI MACD 동적 취득 및 손실 중지 거래 전략

저자:차오장, 날짜: 2024-06-14 15:38:17
태그:EMARSIMACD

img

전반적인 설명

이 거래 전략은 세 가지 기술 지표: 기하급수적인 이동 평균 (EMA), 상대적 강도 지표 (RSI), 이동 평균 컨버전스 디버전스 (MACD) 를 결합합니다. 가격과 가치 관계를 분석함으로써 가격이 특정 조건을 충족하면 구매 및 판매 신호를 생성합니다. 또한 전략은 거래 위험을 관리하기 위해 동적 인 수익을 취하고 손실을 중지합니다.

전략 원칙

  1. 전략의 기본 데이터로 높은 가격, 낮은 가격, 닫는 가격 (HLCC4) 의 평균을 계산합니다.
  2. HLCC4를 기반으로 다른 기간과 RSI를 가진 세 개의 EMA를 계산합니다.
  3. MACD 히스토그램의 값을 계산합니다.
  4. EMA1와 EMA2의 교차 조건을 결정합니다.
    • EMA1가 EMA2를 넘으면 상승 신호가 발산됩니다.
    • EMA1가 EMA2 아래로 넘어가면 하향 신호가 발생합니다.
  5. 구매 또는 판매 조건이 충족되었는지 여부를 결정하기 위해 EMA, RSI 및 MACD 지표의 값을 포괄적으로 고려하십시오.
    • 구매 조건: EMA1가 EMA2를 넘고, HLCC4가 EMA3보다 높고, RSI는 임계치 이상이며, 폐쇄 가격은 개시 가격보다 높고, MACD 히스토그램은 양수입니다.
    • 판매 조건: EMA1가 EMA2보다 낮고, HLCC4가 EMA3보다 낮고, RSI는 임계치보다 낮고, 종료 가격은 개시 가격보다 낮고, MACD 히스토그램은 음수입니다.
  6. 포지션을 유지하면서 반대 신호가 나타나면 새로운 포지션을 열기 전에 현재 포지션을 닫습니다.
  7. 구매하거나 판매할 때, 지정된 피프 수에 따라 수익을 취하고 손해를 멈추는 가격을 설정합니다.

전략적 장점

  1. 포괄적 인 판단을 위해 여러 기술적 지표를 결합하여 신호의 신뢰성을 향상시킵니다.
  2. 이윤을 취하고 손실을 멈추는 역동적인 메커니즘을 도입하여 위험을 효과적으로 제어합니다.
  3. 반대 신호가 나타나면 새로운 위치를 열기 전에 현재 포지션을 닫습니다. 복제 포지션 문제를 피합니다.
  4. 조정 가능한 매개 변수, 강한 적응력, 그리고 다른 시장 환경에 따라 최적화 될 수 있습니다.

전략 위험

  1. 시중시장에서는 빈번한 크로스오버가 과도한 거래로 이어지고 거래 비용을 증가시킬 수 있습니다.
  2. 고정 피프 취득 및 스톱 손실은 시장 변동에 적응하지 못할 수 있으며, 이로 인해 조기 스톱 손실 또는 지연된 취득이 발생할 수 있습니다.
  3. 이 전략은 역사적인 데이터에 의존하고 있으며 갑작스러운 사건이나 비정상적인 시장 조건에 신속하게 반응하지 않을 수 있습니다.

전략 최적화 방향

  1. 신호 정확성을 향상시키기 위해 볼링거 밴드 및 ATR와 같은 더 많은 기술 지표 또는 시장 정서 지표를 도입하는 것을 고려하십시오.
  2. 이윤을 취하고 손해를 멈추는 경우, 더 역동적인 접근 방식을 취하거나 변동성에 따라 수익을 취하고 손해를 멈추는 거리를 조정하십시오.
  3. 주요 뉴스 이벤트와 경제 데이터 발표와 같은 근본 분석을 결합하여 거래 신호를 필터하고 특별한 기간 동안 거래를 피하십시오.
  4. 매개 변수 설정을 위해 최적의 매개 변수 조합을 찾기 위해 기계 학습 또는 최적화 알고리즘을 사용하십시오.

요약

이 전략은 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)

관련

더 많은