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

MACD 로봇 거래 전략

저자:차오장, 날짜: 2023-12-18 17:30:15
태그:

img

전반적인 설명

이 전략은 MACD 로봇 거래 전략이라고 불립니다. 그것은 MACD 지표의 빠른 라인과 느린 라인의 관계를 계산하여 시장에서 구매 및 판매의 시기를 결정하고 위험을 제어하기 위해 트레일링 스톱 로스를 채택합니다.

전략 원칙

이 전략은 주로 MACD 지표에 기초하여 개발됩니다. MACD 지표는 빠른 라인과 느린 라인으로 구성됩니다. 빠른 라인은 단기 이동 평균이며 느린 라인은 장기 이동 평균입니다. 둘 사이의 관계는 시장에서 구매 및 판매 상태를 반영합니다. 빠른 라인이 느린 라인의 위를 넘을 때 그것은 구매 신호이며, 아래를 넘을 때 그것은 판매 신호입니다.

이 전략에서는 빠른 라인과 느린 라인을 각각 EMA 알고리즘을 사용하여 계산하고 기간을 사용자 정의 할 수 있습니다. 신호 품질을 향상시키기 위해 신호 라인을 추가하여 EMA 알고리즘을 사용하여 MACD 값을 다시 매끄럽게합니다.

구매 시기를 결정 할 때, 빠른 라인과 느린 라인의 황금 십자가뿐만 아니라 MACD의 절대 값이 사용자 정의 구매 라인보다 크는지 확인하십시오. 만약 그렇습니다. 구매 신호가 발급되고 후속 스톱 손실은 위험을 제어하는 데 사용됩니다.

매출 시기를 결정할 때, 빠른 라인과 느린 라인의 죽음의 십자가와 신호 라인이 양적이어야 하며, 판매 신호가 발행되어 포지션을 닫습니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 높은 신뢰성을 가진 거래 신호를 결정하기 위해 MACD 표시기를 사용하는 것
  2. 신호 라인을 늘리면 신호 품질이 향상됩니다.
  3. 트래일링 스톱 로스는 위험을 효과적으로 제어합니다.
  4. 사용자 정의 가능한 구매 라인은 전략 감수성을 조정합니다.
  5. 모든 조건은 외부 요인에 영향을 받지 않는 지표 계산에 기초합니다.

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. MACD 지표가 뒤쳐지고 단기 거래 기회를 놓칠 수 있습니다.
  2. 스톱 손실 포인트의 잘못된 설정은 불필요한 손실을 일으킬 수 있습니다.
  3. 매개 변수 조정 테스트와 조정에 많은 시간을 필요로
  4. 거래 비용 및 미끄러짐의 영향

이러한 위험은 매개 변수를 적절히 조정하거나 다른 지표를 결합하여 줄일 수 있습니다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화 될 수 있습니다.

  1. KDJ, RSI 등과 같은 신호를 필터링하기 위해 다른 지표와 결합합니다.
  2. 입구와 출구를 결정하는 기계 학습 알고리즘을 추가합니다.
  3. 정적 스톱 손실 대신 동적 스톱 손실을 사용
  4. 테스트 및 MACD 매개 변수 및 구매 라인을 최적화
  5. 전략 조정에 거래 비용의 영향을 고려

결론

전체적으로, 이것은 높은 신뢰성을 가진 트렌드를 따르는 전략이다. MACD 지표를 통해 트렌드를 판단하고 트레일링 스톱 로스로 위험을 제어함으로써 안정적인 투자 수익을 얻을 수 있다. 다음 단계는 매개 변수를 더 이상 최적화하고 다른 지표를 결합하고 기계 학습을 통합하여 전략 수익성을 향상시키는 것이다.


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "GBPUSD MACD", title = "GBPUSD MACD")
fastMA = input(title="Fast moving average",  defval = 12, minval = 7)
slowMA = input(title="Slow moving average",  defval = 26, minval = 7)
lastColor = yellow
[currMacd,_,_] = macd(close[0], fastMA, slowMA, 9)
[prevMacd,_,_] = macd(close[1], fastMA, slowMA, 9)
plotColor = currMacd > 0 ? currMacd > prevMacd ? lime : green : currMacd < prevMacd ? maroon : red
plot(currMacd, style = histogram, color = plotColor, linewidth = 3)
plot(0, title = "Zero line", linewidth = 1, color = gray)

//MACD
// Getting inputs
fast_length = input(title="Fast Length",  defval=12)
slow_length = input(title="Slow Length",  defval=26)
src = input(title="Source", defval=close)
signal_length = input(title="Signal Smoothing",  minval = 1, maxval = 50, defval =9)
sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
///END OF MACD

//Long and Close Long Lines
linebuy = input(title="Enter Long", type=float, defval=-0.00045)
linesell = input(title="Close Long", type=float, defval=0.0001)

//Plot Long and Close Long Lines
plot(linebuy,color=green),plot(linesell,color=red)


//Stop Loss Input
sl_inp = input(0.05, title='Stop Loss %', type=float)/100


//Order Conditions
longCond = crossover(currMacd, linebuy)
exitLong = crossover(currMacd, signal) and signal > 0
stop_level = strategy.position_avg_price * (1 - sl_inp)


//Order Entries
strategy.entry("long", strategy.long,  when=longCond==true)
strategy.close("long", when=exitLong==true)
strategy.exit("Stop Loss", stop=stop_level)

더 많은