
この戦略は,MACD指標のヒストグラムに基づいて取引決定を行う.ヒストグラムの上昇傾向と下降傾向を利用して,買入と売却のシグナルを生成する.ヒストグラムが連続して上昇または下降し,一定の周期に達すると,相応のシグナルを生成する.
この戦略は,MACD指標の快線,慢線,ヒストグラムを使用する.まずは,快線EMAと慢線EMAを計算する.それから,快線を減算して遅線がMACDを得,MACDは,移動平均のシグナルを減算してヒストグラムを得る.
ヒストグラムの連続的な上昇傾向が設定された周期に達した後に,買取信号が生じます. これは,MACDが上昇速度を加速して信号線を突破し,価格が上昇する可能性があることを予測しています.
ヒストグラムの連続的な下落傾向が設定された周期に達した後に,セールシグナルを生成する.これは,MACDが下方への下落を加速していることを示し,価格が下落する可能性があることを予測する.
この戦略の利点は以下の通りです.
MACD ヒストグラムのトレンド性を利用して,価格の変化の転換点を把握し,利益の確率を高めることができる.
ヒストグラムの連続した上昇または減少の周期条件を組み合わせると,部分的なノイズ取引をフィルターして,不要な損失を減らすことができます.
カスタマイズ可能な MACD パラメータとヒストグラムのトレンド周期を許容し,異なる品種と取引時期に対応するように調整できます.
戦略の論理はシンプルで明快で,理解し,変更しやすく,他の指標や戦略の組み合わせでも便利です.
この戦略にはいくつかのリスクがあります.
価格が振動区間にあるとき,誤ったシグナルが生じる可能性があり,トレンド指標などと組み合わせたフィルタリングが必要である.
ヒストグラムが上がったり下がったりすると,MACD線は信号線を突破できず,利益を得て退場できず,リスクを制御するために止損を設定する必要があります.
取引コストやスライドポイントなどの実際の取引問題を考慮せずに,リアルタイムでの収益は減少する可能性があります.
パラメータの設定 (MACD周期,ヒストグラムのトレンド周期など) が不適切である場合,戦略の効果が悪くなる可能性があり,品種と時間帯に最適化する必要があります.
これらのリスクは,トレンド指標と組み合わせて,ストップ・ロスの仕組みを設定し,パラメータを最適化することによって制御および軽減することができます.
この戦略は以下の方向から最適化できます.
他の指標と組み合わせて,概ねトレンドの方向を判断し,取引の振動区間を避ける.例えば,20日線判断中長線トレンドなど.
止損メカニズムを増やす.例えば,MACDが信号線を再び破ると止まる.
MACDパラメータを最適化して,異なる周期の品種に対応する.例えば,高周波データに対して周期パラメータを短縮することができる.
ヒストグラムが連続して上昇または低下する最小周期数を最適化し,信号の頻度と信頼性をバランスする.
Breakout が失敗した後に信号を追跡する戦略の論理.すなわち,ヒストグラムが反転した後に反転信号を追跡する.
他の指標の組み合わせ,例えば量能指標,波動率指標などで市場の熱さを判断し,フィルター信号.
この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)