이 전략은 MACD 히스토그램의 추세를 기반으로 거래 결정을 합니다.

저자:차오장, 날짜: 2024-01-25 14:31:57
태그:

img

전반적인 설명

이 전략은 MACD 히스토그램의 트렌드를 기반으로 거래 결정을 내린다. 이 전략은 히스토그램의 상향 및 하향 트렌드를 활용하여 구매 및 판매 신호를 생성한다. 히스토그램이 일정 기간 동안 상승 또는 하락을 계속하면 해당 신호가 생성된다.

전략 논리

이 전략은 MACD 지표의 빠른 라인, 느린 라인 및 히스토그램을 사용합니다. 먼저 빠른 EMA와 느린 EMA를 계산합니다. 그 다음 MACD를 얻기 위해 빠른 EMA에서 느린 EMA를 빼고, 히스토그램을 얻기 위해 MACD의 이동 평균인 신호를 빼십시오.

히스토그램이 설정된 기간 동안 상승을 계속하면 구매 신호가 생성됩니다. 이것은 MACD가 신호선을 위쪽으로 돌파하기 위해 가속화되고 있으며 가격이 상승할 수 있음을 예측합니다.

히스토그램이 설정된 기간 동안 계속 하락할 때 판매 신호가 생성됩니다. 이것은 MACD가 시그널 라인을 아래로 돌파하기 위해 가속화되고 있으며 가격이 떨어질 수 있음을 예측합니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. MACD 히스토그램의 트렌드 특성을 활용하여 가격 변화의 전환점을 파악하고 수익성을 향상시킬 수 있습니다.

  2. 히스토그램의 연속 상승 또는 하락 조건과 결합하면 불필요한 손실을 줄이기 위해 소란스러운 거래를 필터링 할 수 있습니다.

  3. MACD 매개 변수 및 히스토그램 트렌드 기간의 사용자 정의를 허용하여 다른 제품 및 거래 세션에 맞게 조정할 수 있습니다.

  4. 전략 논리는 간단하고 명확하며, 이해하기 쉽고 수정 할 수 있으며, 다른 지표나 전략과 결합하는 것이 편리합니다.

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 가격 범위에서 변동할 때 잘못된 신호가 발생할 수 있습니다. 트렌드 지표가 필터링을 위해 결합되어야합니다.

  2. 히스토그램이 상승 또는 하락 한 후, MACD 라인은 신호 라인을 뚫지 못할 수 있으며 수익성있게 빠져 나갈 수 없습니다. 위험 통제를 위해 스톱 로스를 설정해야합니다.

  3. 거래 비용 및 미끄러짐은 고려되지 않습니다. 실제 이익은 라이브 거래에서 감소 할 수 있습니다.

  4. 부적절한 매개 변수 설정 (예를 들어 MACD 기간, 히스토그램 트렌드 기간) 은 전략 성과를 악화시킬 수 있습니다. 매개 변수는 제품 및 세션에 최적화해야합니다.

이러한 위험은 트렌드 지표와 결합, 중지 손실 메커니즘 설정, 매개 변수 최적화 등과 같은 방법을 통해 제어 및 감소 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 전체 트렌드 방향을 결정하기 위해 다른 지표를 결합하고, 오스실레이션 범위에서 거래를 피합니다. 예를 들어 중장기 트렌드를위한 20 일선.

  2. 스톱 로스 메커니즘을 추가합니다. 예를 들어 MACD가 신호 라인을 다시 아래로 깨면 스톱 로스입니다.

  3. MACD 매개 변수를 최적화하여 다른 주파수의 제품에 맞게 합니다. 예를 들어, 고주파 데이터의 기간 매개 변수를 단축합니다.

  4. 연속 히스토그램 상승 또는 하락의 최소 기간을 최적화하여 신호 주파수와 신뢰성을 균형 잡습니다.

  5. 파업 실패 후 신호를 추적하는 논리를 시도해보세요. 즉 히스토그램 역전 후 신호를 추적하는 것입니다.

  6. 부피 또는 변동성 지표와 같은 다른 지표를 결합하여 시장 열과 필터 신호를 측정합니다.

결론

결론적으로, MACD 히스토그램 트렌드 전략은 히스토그램 트렌드 변화를 포착함으로써 가격 변화 전환점에 대한 판단을 실현합니다. 매개 변수 최적화와 콤보 지표를 결합하면 잘못된 신호를 효과적으로 필터링 할 수 있습니다. 양적 거래에서 중요한 보조 판단 도구로,이 전략은 MACD 히스토그램을 사용하여 간단하고 실용적인 거래 아이디어를 제공합니다.


/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//study(title="Histogram Strategy by Sedkur", shorttitle="Histogram Strategy by Sedkur")
strategy (title="Histogram Trends Strategy by Sedkur", shorttitle="Histogram Trends Strategy by Sedkur")


/// Getting inputs
dyear = input(title="Year", type=input.integer, defval=2017, minval=1950, maxval=2500)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
hist_length = input(title="Trend of Histogram Number", type=input.integer, defval=1, minval=1, maxval=100)
//buyh = input(title="Buy histogram value", type=input.float, defval=0.0, minval=-1000, maxval=1000, step=0.1)
//sellh = input(title="Sell histogram value", type=input.float, defval=0.0, minval=-1000, maxval=1000, step=0.1)
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)

// 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=plot.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)

//bullish = hist[1] <= hist and buyh<=hist?true:false
//bearish = hist[1] >= hist and sellh>=hist?true:false
bull=0
bear=0


for i=0 to hist_length
    if (hist[i+1] <= hist[i])
        bull:=bull+1
bullish = bull==hist_length+1?true:false   

for j=0 to hist_length
    if (hist[j+1] >= hist[j])
        bear:=bear+1
bearish = bear==hist_length+1?true:false 



//bullish = hist[1] <= hist and hist[2] <= hist and hist[3] <= hist and hist[4] <= hist and hist[5] <= hist?true:false
//bearish = hist[1] >= hist and hist[2] >= hist and hist[3] >= hist and hist[4] >= hist and hist[5] >= hist?true:false

strategy.entry("buy", strategy.long, comment="buy", when = bullish and year>=dyear)
strategy.entry("sell", strategy.short, comment="sell", when = bearish and year>=dyear)


더 많은