이 전략은 MACD 로봇 거래 전략이라고 불립니다. 그것은 MACD 지표의 빠른 라인과 느린 라인의 관계를 계산하여 시장에서 구매 및 판매의 시기를 결정하고 위험을 제어하기 위해 트레일링 스톱 로스를 채택합니다.
이 전략은 주로 MACD 지표에 기초하여 개발됩니다. MACD 지표는 빠른 라인과 느린 라인으로 구성됩니다. 빠른 라인은 단기 이동 평균이며 느린 라인은 장기 이동 평균입니다. 둘 사이의 관계는 시장에서 구매 및 판매 상태를 반영합니다. 빠른 라인이 느린 라인의 위를 넘을 때 그것은 구매 신호이며, 아래를 넘을 때 그것은 판매 신호입니다.
이 전략에서는 빠른 라인과 느린 라인을 각각 EMA 알고리즘을 사용하여 계산하고 기간을 사용자 정의 할 수 있습니다. 신호 품질을 향상시키기 위해 신호 라인을 추가하여 EMA 알고리즘을 사용하여 MACD 값을 다시 매끄럽게합니다.
구매 시기를 결정 할 때, 빠른 라인과 느린 라인의 황금 십자가뿐만 아니라 MACD의 절대 값이 사용자 정의 구매 라인보다 크는지 확인하십시오. 만약 그렇습니다. 구매 신호가 발급되고 후속 스톱 손실은 위험을 제어하는 데 사용됩니다.
매출 시기를 결정할 때, 빠른 라인과 느린 라인의 죽음의 십자가와 신호 라인이 양적이어야 하며, 판매 신호가 발행되어 포지션을 닫습니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략은 또한 몇 가지 위험을 안고 있습니다.
이러한 위험은 매개 변수를 적절히 조정하거나 다른 지표를 결합하여 줄일 수 있습니다.
이 전략은 다음과 같은 방향으로 최적화 될 수 있습니다.
전체적으로, 이것은 높은 신뢰성을 가진 트렌드를 따르는 전략이다. 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)