MACD 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-09-14 17:03:47
태그:

전략 논리

이 전략은 MACD 지표와 이동 평균을 결합하고, 둘 다 정렬 신호를 줄 때 길게 이동합니다.

논리는 다음과 같습니다.

  1. FAST MACD를 계산합니다. 일반적으로 12일 EMA입니다.

  2. 계산 MACD SLOW, 일반적으로 26일 EMA

  3. MACD는 FAST 빼기 SLOW입니다

  4. 신호선은 일반적으로 MACD의 9일 MA입니다.

  5. 9일 및 26일 MA를 계산

  6. MACD가 신호선을 넘을 때 긴 것을 고려하십시오.

  7. 9일 MA가 26일 MA를 넘을 때 장거리

  8. MACD가 신호선 아래로 넘어가고 9일 MA가 26일 MA 아래로 넘어가면 긴 종합

이 전략은 MACD의 과잉 구매 과잉 판매 지표와 MA의 트렌드 다음 능력을 활용하여 더 높은 확률 거래를 위해 둘을 결합합니다.

장점

  • MACD가 과잉 구매/ 과잉 판매를 판단하고, MA는 추세를 결정합니다.

  • 조합은 높은 확률의 장기 기회를 제공합니다.

  • 적용하기 쉬운 명확한 규칙

위험성

  • 최적화를 요구합니다.

  • 단기적 기회만 활용할 수 없는 경우

  • 트렌드 상거래는 손실을 증가시킬 수 있습니다.

요약

이 전략은 시장 리듬을 판단하는 데 MACD와 MA의 강점을 활용합니다. 그러나 LONG-only 제한과 매개 변수 최적화는 주의를 요구합니다.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4
strategy("MACD Cross+MA", overlay=true)
//@version=4
// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 2009)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


// 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
plot(sma(close,9),color=color.red)
plot(sma(close,26),color=color.green)
//Condition
BMacdcondition= (macd>signal)
SMacdcondition= (macd<signal)
longCondition = crossover(sma(close, 9), sma(close, 26))
shortCondition = crossunder(sma(close, 9), sma(close, 26))
//entry
if (BMacdcondition) and window()
    (longCondition)
    strategy.entry("LONG", strategy.long)
if (shortCondition) and window()
    (SMacdcondition)
    strategy.close("LONG", qty_percent=100 , comment="หนีตาย")

더 많은