
이 전략은 MACD 지표의 히스토그램을 기반으로 거래 결정을 내립니다. 히스토그램의 상승 추세와 하락 추세를 사용하여 구매 및 판매 신호를 생성합니다. 히스토그램이 연속적으로 상승하거나 하락하면 일정 기간이 지나면 해당 신호를 생성합니다.
이 전략은 MACD 지표의 빠른 선, 느린 선 및 히스토그램을 사용한다. 먼저 빠른 선의 EMA와 느린 선의 EMA를 계산한다. 그 다음 빠른 선을 빼면 느린 선이 MACD를 얻으며 MACD는 이동 평균을 빼면 히스토그램을 얻는다.
히스토그램의 연속적인 상승 추세가 설정된 주기에 도달한 후, 구매 신호가 발생한다. 이것은 MACD가 상승 속도를 높여서 신호선을 뚫고 가격이 상승할 수 있다고 예측한다.
히스토그램의 연속적인 하향 경향이 설정된 주기에 도달한 후, 판매 신호를 생성한다. 이것은 MACD가 하향으로 가속화되고 있으며, 가격이 떨어질 수 있다고 예측한다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
MACD 히스토그램의 트렌딩성을 활용하여 가격변동의 전환점을 파악하여 수익률을 높일 수 있다.
히스토그램이 연속적으로 상승하거나 하락하는 주기적 조건과 결합하면, 일부 노이즈 트레이드를 필터링하여 불필요한 손실을 줄일 수 있다.
사용자 정의 MACD 파라미터와 히스토그램 트렌드 사이클을 허용하며, 다양한 품종과 거래 시기를 맞게 조정할 수 있다.
전략 논리는 간단하고 명확하며, 이해하기 쉽고 수정할 수 있으며, 다른 지표 또는 전략 조합과 함께 사용할 수 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
가격의 흔들림 영역에 있을 때, 잘못된 신호가 발생할 수 있으며, 트렌드 지표와 결합된 필터링이 필요합니다.
히스토그램이 상승하거나 하락하면 MACD 라인은 신호선을 뚫을 수 없으며 수익으로 빠져나갈 수 없으며 위험을 제어하기 위해 스톱로스를 설정해야합니다.
거래 비용과 슬라이드 포인트와 같은 실제 거래 문제를 고려하지 않고 실시간 수익이 줄어들 수 있습니다.
매커드 사이클, 히스토그램 트렌드 사이클 등과 같은 변수 설정을 잘못하면 전략 효과가 저하될 수 있으며, 품종과 시기를 위해 최적화해야 한다.
이러한 위험은 트렌드 지표와 결합하여, 스톱스 메커니즘을 설정하고, 최적화 매개 변수와 같은 방법을 통해 제어 및 감소시킬 수 있습니다.
이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.
다른 지표와 결합하여 대략적인 트렌드 방향을 판단하고, 거래의 흔들림 영역을 피한다. 예를 들어 20 일선 판단 중장선 트렌드 등이다.
손실 메커니즘을 추가한다. 예를 들어 MACD가 신호선을 다시 넘어지면 손실한다.
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)