MACD 스토카스틱 범위 파업 전략

저자:차오장, 날짜: 2023-12-11 11:48:27
태그:

img

전반적인 설명

MACD 스토카스틱 범위 브레이크아웃 전략은 MACD와 스토카스틱 지표를 양적 거래 전략으로 결합합니다. 가격 범위에서 벗어날 때 주식 가격의 트렌드 방향을 파악하고 포지션을 취하려고합니다.

포지션을 취할 때, 이 전략은 입장의 품질을 향상시키기 위해 MACD와 스토카스틱의 신호를 모두 고려합니다. 또한 미리 설정된 스톱 로스 및 영업 포인트는 위험을 효과적으로 제어 할 수 있습니다.

전략 논리

MACD 스토카스틱 레인지 브레이크아웃 전략은 주로 다음과 같은 원칙에 기초합니다.

  1. MACD 지표는 가격 동향의 방향과 동력을 효과적으로 식별 할 수 있습니다.
  2. 스토카스틱 지표는 주식의 과반 구매 또는 과반 판매 조건을 발견 할 수 있습니다.
  3. 주식 가격이 일정 기간 동안 변화했을 때, 이전 범위를 돌파한 후 중요한 방향 움직임이 발생할 가능성이 있습니다.
  4. 범위에 대한 MACD와 스토카스틱의 신호를 결합하면 적시에 입력하고 품질을 향상시킵니다.

구체적으로, 전략은 DEA 라인을 가로질러 MACDDIFF 라인을 사용하여 상승 또는 하락 트렌드 신호를 결정합니다. DIFF가 DEA를 위쪽으로 가로질러 올라가면 상승 신호를 생성하고 그 반대의 경우입니다.

한편, 과잉 구매/ 과잉 판매 영역 (디폴트 30 및 70) 의 주식 지표의 K선과 D선 사이의 교차도 거래 신호를 생성합니다.

MACD와 스토카스틱이 일치하는 신호를 내면 전략은 위치를 잡습니다. 이 시점에서 큰 가격 움직임이 발생할 수 있습니다.

입력 후, 스톱 손실 및 수익 포인트는 단일 거래 손실을 합리적으로 제어하고 이익을 잠금하도록 설정됩니다.

강점

MACD 스토카스틱 범위 파업 전략은 다음과 같은 강점을 가지고 있습니다.

  1. 표시기 조합으로 신호 품질이 향상됩니다

    MACD와 스토카스틱을 모두 활용하면 가짜 신호를 필터링하고 더 나은 입문 품질을 허용합니다.

  2. 브레이크아웃 움직임을 포착하고 트렌드 거래

    이 전략은 범위를 따라 중요한 탈출 움직임을 포착하는 데 특화되어 있습니다. 이러한 움직임은 거대한 경향이 있습니다.

  3. 최적화된 스톱 로스/프로프트 취득 메커니즘은 위험을 효과적으로 제어합니다.

    내장된 스톱 로스/프로피트 취득 논리는 단일 거래 손실을 합리적으로 제한하고 적시에 이윤을 잠금합니다.

위험성

신중한 설계에도 불구하고 MACD 스토카스틱 레인지 브레이크아웃 전략은 몇 가지 본질적인 위험을 가지고 있습니다.

  1. 완벽한 입력 타이밍이 없어

    유효한 브레이크오웃이 발생하기 전에 가짜 브레이크오웃이 일반적입니다. 열등한 엔트리 타이밍으로 인해 가장 좋은 엔트리 가격을 놓칠 수 있습니다.

  2. 탈출 실패

    적당한 준비가 이루어지고도 실패한 탈출은 여전히 가능하며 손실이 발생할 수 있습니다.

  3. 잘못된 매개 변수 최적화

    부적절한 매개 변수 설정은 전략 성능을 심각하게 손상시킵니다.

위의 위험들을 해결하기 위해 다음과 같은 최적화를 채택할 수 있습니다.

  1. 필터 신호에 다른 지표를 추가합니다.

  2. 유효한 브레이크오웃을 보장하기 위한 수동 개입

  3. 엄격한 다세트 매개 변수 최적화 테스트

최적화 방향

MACD 스토카스틱 범위 브레이크 아웃 전략의 추가 최적화 여지가 남아 있습니다.

  1. 최고의 조합을 찾기 위해 MACD 매개 변수를 최적화

  2. 최고의 조합을 찾기 위해 스토카스틱 매개 변수를 최적화

  3. KDJ, BOLL와 같은 다른 지표를 통합하여 입시 품질을 향상시킵니다.

  4. 다른 보유 기간을 테스트하고 스톱 로스/프로피트 취득을 최적화합니다

  5. 테스트 크로스 자산 매개 변수 차이

  6. 자동 매개 변수 최적화를 위한 기계 학습 알고리즘을 도입

결론

MACD 스토카스틱 범위 브레이크아웃 전략은 MACD와 스토카스틱 두 가지 모두에서 정렬 된 신호를 기반으로 입력하여 범위 브레이크아웃을 활용합니다. 스톱 로스 / 취득 메커니즘은 위험을 추가로 제어합니다. 단기 트렌드를 파악하는 것을 목표로하지만 여전히 매개 변수 조정과 더 나은 성능을위한 더 많은 지표 조합에 대한 공간을 남겨두고 있습니다.


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

//@version=5
strategy(title="macd stoch strategy", shorttitle="benzo MACD stoch",overlay=true)
// Getting inputs
fast_length = input(title = "Fast Length", defval = 180)
slow_length = input(title = "Slow Length", defval = 390)
src = input(title = "Source", defval = close)
signal_length = input.int(title = "Signal Smoothing",  minval = 1, maxval = 500, defval = 135)
sma_source = input.string(title = "Oscillator MA Type",  defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// hline(0, "Zero Line", color = color.new(#787B86, 50))
// plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
// plot(macd,   title = "MACD",   color = #2962FF)

// plot(signal, title = "Signal", color = #FF6D00)

periodK = input.int(14, title="%K Length", minval=1)
smoothK = input.int(1, title="%K Smoothing", minval=1)
periodD = input.int(3, title="%D Smoothing", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
// plot(k, title="%K", color=#2962FF)
// plot(d, title="%D", color=#FF6D00)
// h0 = hline(80, "Upper Band", color=#787B86)
// hline(50, "Middle Band", color=color.new(#787B86, 50))
// h1 = hline(20, "Lower Band", color=#787B86)
// fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")


// Make inputs that set the take profit % (optional)
longProfitPerc = input.float(3, title="Long Take Profit (%)", minval=0.0, step=0.1) * 0.01

shortProfitPerc = input.float(3, title="Short Take Profit (%)",minval=0.0, step=0.1) * 0.01

// Calculate trading conditions
enterLong  = macd>signal and ta.crossover(k,30)
enterShort = macd<signal and ta.crossunder(k,70)

// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Plot take profit values for confirmation
plot(strategy.position_size > 0 ? longExitPrice : na,
     color=color.green, style=plot.style_circles,
     linewidth=3, title="Long Take Profit")

plot(strategy.position_size < 0 ? shortExitPrice : na,
     color=color.red, style=plot.style_circles,
     linewidth=3, title="Short Take Profit")

// Submit entry orders
if enterLong
    strategy.entry("long", strategy.long)

if enterShort
    strategy.entry("short", strategy.short)

// STEP 3:
// Submit exit orders based on take profit price
if strategy.position_size > 0
    strategy.exit("long TP", limit=longExitPrice)

if strategy.position_size < 0
    strategy.exit("short TP", limit=shortExitPrice)

더 많은