MACD 이동평균 교차 전략


생성 날짜: 2023-09-14 17:03:47 마지막으로 수정됨: 2023-09-14 17:03:47
복사: 0 클릭수: 725
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

전략 원칙

이 전략은 MACD 지표와 이동 평균 지표를 결합하여 동방향 신호가 주어질 때 다중 거래한다.

거래 논리는 다음과 같습니다.

  1. FAST MACD 값을 계산합니다. 일반적으로 12일 지수 이동 평균을 취합니다.

  2. SLOW MACD 값을 계산합니다. 일반적으로 26일 지수 이동 평균을 취합니다.

  3. MACD 값은 FAST minus SLOW 입니다.

  4. MACD의 신호선을 계산하기 위해, 일반적으로 9일 이동 평균을 다.

  5. 9일과 26일 이동 평균을 계산합니다.

  6. MACD에서 신호선을 뚫을 때 더 많은 것을 고려하십시오.

  7. 9일 평균선에서 26일 평균선으로 갈 때, 더 많은 일을 하세요.

  8. MACD가 신호선을 통과하고 9일 평균선 아래 26일 평균선을 통과하면 평점

이 전략은 MACD의 오버 바이 오버 셀 판단과 평행선의 트렌드 추적 능력을 최대한 활용하여 성공률을 높이기 위해 둘을 결합하여 거래합니다.

전략적 이점

  • MACD는 오버 바이 오버 세일, 평균선은 트렌드를 판단합니다.

  • 이 둘의 조합은 높은 확률로 더 많은 기회를 제공한다는 것을 증명합니다.

  • 운영 규칙이 명확하고 실행하기 쉽습니다.

전략적 위험

  • 최적의 매개 변수를 결정하기 위해 반복 테스트가 필요합니다.

  • 더 많은 일을 하면서도 빈자리를 활용하지 못함.

  • “이런 일이 벌어진다면 더 큰 손실을 입을 수 있다”.

요약하다

이 전략은 MACD와 평균선 지표의 장점을 최대한 활용하고, 둘을 조합하여 시장의 리듬을 판단한다. 다만 더 많이 하고, 변수 최적화와 같은 문제에 주의해야 한다.

전략 소스 코드
/*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="หนีตาย")