
MACD Stochastics Oscillation Breakout Strategy는 MACD 지표와 Stochastics 지표를 결합한 양적 거래 전략이다. 이 전략은 주식 가격의 트렌드 방향을 식별하고 가격이 흔들림 영역에서 돌파 할 때 입장을 취하려고 한다.
포지션에 진입할 때, 이 전략은 MACD와 Stochastics 두 지표의 신호를 동시에 고려하여 엔트리의 품질을 향상시킵니다. 또한, 이 전략은 리스크를 효과적으로 제어할 수 있는 스톱로스 포인트와 스톱 스 포인트를 미리 설정합니다.
MACD Stochastics의 파장 흔들림 돌파 전략은 주로 다음과 같은 원칙에 기반합니다.
구체적으로, 이 전략은 MACD 지표의 DIFF 선과 DEA 선의 교차를 가격 트렌드 방향을 판단하는 신호로 사용한다. DIFF가 DEA를 상향으로 돌파할 때 멀티 헤드 신호를 생성하고, 반대로 허공 신호를 생성한다.
한편, 스토카스틱스의 K선과 D선이 오버 바이 오버 셀 지역 (기본 30과 70) 근처에서 상향 또는 하향으로 교차하면 거래 신호가 발생한다.
이 전략은 MACD 지표와 Stochastics 지표가 동시에 동방향 신호를 내면 입주를 선택한다. 이 때 주식 가격이 큰 돌파구를 만들 가능성이 높다.
진입 후, 전략은 합리적인 중지 손실과 중지 지점을 설정한다. 합리적인 중지 손실은 단편 손실을 효과적으로 제어 할 수 있으며, 중단은 수익을 잠금 할 수 있다.
MACD Stochastics의 파장 흔들림 브레이크 전략은 다음과 같은 장점이 있습니다.
이 전략은 MACD와 Stochastics의 두 지표를 동시에 사용하여 가짜 신호를 필터링하여 엔트리의 품질을 향상시킬 수 있습니다.
이 전략은 주가가 오랫동안 변동한 후 돌파구를 잡기 위해 고안되었습니다. 이런 움직임은 일반적으로 더 큰 폭입니다.
이 전략은 단독 손실을 합리적으로 제어하고 적시에 수익을 잠금 할 수 있도록 스톱 로즈 설정을 내장합니다.
MACD Stochastics의 파동파동 돌파구 전략은 신중하게 설계되었음에도 불구하고, 위험은 여전히 존재합니다:
주식 가격이 돌파하기 전에 반드시 가짜 돌파가 발생할 수 있다. 진입 시기를 잘못 선택하면 이 진입이 최적의 진입 지점을 놓치게 될 수 있다.
돌파전에 대한 충분한 준비에도 불구하고 돌파전이 실패할 가능성이 있다. 이 경우 손실이 발생할 수 있다.
전략의 파라미터 설정은 결과에 큰 영향을 미칩니다. 만약 파라미터 설정이 잘못되면 큰 할인 받을 수 있습니다.
위와 같은 위험들을 위해, 다음과 같은 방법으로 최적화할 수 있습니다:
다른 지표와 결합하여 신호를 필터링합니다.
인적 개입으로 돌파구를 확보했다
다중 집합 변수 최적화 테스트
MACD Stochastics의 파장 흔들림 브레이크 전략에는 더 많은 최적화 할 여지가 있습니다.
MACD 변수를 최적화하여 최적의 조합을 찾습니다.
스토카스틱스 변수를 최적화하여 최적의 조합을 찾습니다.
KDJ, BOLL 등과 같은 다른 지표 조합을 추가하여 Entries의 품질을 더욱 향상시킵니다.
다양한 포지션 보유 시간을 테스트하고 스톱 스톱 손실 전략을 최적화합니다.
다른 거래 지표의 변수 차이를 테스트합니다.
기계 학습 알고리즘을 추가하고, 자동으로 파라미터를 최적화합니다.
MACD Stochastics 파장 흔들림 돌파 전략은 MACD와 Stochastics 두 지표를 종합적으로 사용하여, 파장 흔들림 돌파할 때 고품질 입장을 취하고, 순서대로 한다. 동시에 손해 막기 전략을 보조하여 효과적으로 위험을 통제한다. 이 전략은 주식 가격의 단기 경향 상황을 포착하고, 거래 우위를 가지고 있다. 그러나 파라미터 최적화 및 기술 지표 포트폴리오에 대한 탐색 측면의 공간도 있다.
/*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)