この戦略は,MACDヒストグラムのトレンドに基づいて取引決定を行います.ヒストグラムの上下トレンドを利用して,買い売りシグナルを生成します.ヒストグラムが一定の期間上昇または下落を続けると,対応するシグナルが生成されます.
この戦略は,MACD指標の高速線,スローライン,ヒストグラムを使用する.まず,高速EMAとスローEMAを計算する.その後,MACDを得るために高速EMAからスローEMAを引いて,ヒストグラムを得るためにMACDの移動平均であるシグナルを引く.
ヒストグラムが設定された期間中上昇し続けると,買い信号が生成されます.これはMACDが信号線を上向きに突破するために加速していることを示し,価格が上昇する可能性が予測されます.
ヒストグラムが設定された期間に引き続き低下すると,セールシグナルが生成されます.これはMACDがシグナルラインを下向きに突破するために加速していることを示し,価格が下がる可能性があることを予測します.
この戦略には以下の利点があります.
MACDヒストグラムのトレンド特性を利用して,価格変動のターニングポイントを把握し,収益性を高めることができます.
ヒストグラムの連続した上昇または減少の条件と組み合わせると,不必要な損失を減らすために,いくつかの騒々しい取引をフィルタリングすることができます.
MACDパラメータとヒストグラムトレンド期間をカスタマイズできるため,異なる製品と取引セッションに合わせて調整できます.
戦略の論理は単純で明確で,理解し修正しやすいし,他の指標や戦略と組み合わせることも便利です.
この戦略にはいくつかのリスクもあります:
価格が範囲内で振動しているときに誤った信号が発生する.トレンドインジケーターを組み合わせてフィルタリングする必要があります.
ヒストグラムが上昇または低下した後,MACD線が信号線を突破できず,収益性のある出口ができない可能性があります.リスクを制御するためにストップロスを設定する必要があります.
取引コストとスライドは考慮されません.実際の利益はライブ取引で減少する可能性があります.
不適切なパラメータ設定 (例えばMACD期,ヒストグラムトレンド期) は戦略のパフォーマンスを悪化させる可能性があります.パラメータは製品とセッションに最適化する必要があります.
これらのリスクは,トレンドインジケーターと組み合わせ,ストップ・ロスのメカニズムを設定,パラメータを最適化などの方法によって制御され,減少することができます.
戦略は以下の側面で最適化できます.
一般的な傾向の方向性を決定するために他の指標を組み合わせ,振動範囲での取引を避ける.例えば,中長期の傾向のための20日線.
ストップ・ロスのメカニズムを追加します.例えば,MACDが信号ラインを再び下向きに切るとストップ・ロスは行われます.
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)