
移動平均帯戦略は,複数の移動平均線に基づくトレンド追跡戦略である.それは,同時に,急速な移動平均線と遅い移動平均線を監視し,価格が移動平均線を突破したときに取引シグナルを生成する.この戦略は,傾向判断と超買い超売り指標を同時に組み合わせて,中長線のトレンドを効果的に捕捉することができる.
この戦略は,5つの快速移動平均線 ((5,8,13,20,30) と4つの遅い移動平均線 ((45,70,105,150日線) を同時に使用し,快速線は内部の移動平均線を構成し,遅い線は外部の移動平均線を構成する.価格が内部の平均線を上から突破すると買入シグナルが生じ,価格が内部の平均線を下から突破すると売出シグナルが生じます.偽の突破をフィルターするには,価格が3つの連続したK線の内部の移動平均線を突破し,ほとんどの快速移動平均線も同時に突破することを要求し,取引シグナルが生成されます.
さらに,この戦略は長期のトレンドを判断する.価格が200日移動平均の上にある場合にのみ,買いのシグナルを生成することを考慮する.逆に,価格が200日移動平均を下回った場合にのみ,売りのシグナルを生成することを考慮する.長期のトレンドを判断することにより,収束中に被套を回避することができます.
この戦略には以下の利点があります.
多重移動平均の設計により,トレンドの方向を正確に判断できる。内外移動平均帯は,快速・ゆっくりとした平均線と結合し,中長線のトレンドを識別する効果が良い。
連続ブレイクメカニズムは偽ブレイクを効果的にフィルターできます. 同時に,ほとんどの急速な均線ブレイクを要求し,トレンドの変化を保証します.
長期トレンドを判断し,収束時に被套を避ける. 200日線判断と連携し,トレンドが逆転したときにのみポジションを考慮する.
トレンド追跡と超買超売を兼ね備える.移動平均はトレンド追跡機能を持ち,超買超売指標と組み合わせてストップ・ロスを設定し,リスクをコントロールする.
この戦略には以下のリスクがあります.
破綻のリスク: 価格が偽破綻すると,この戦略は完全に損失の発生を避けることはできません.
震動傾向下での損失リスク. 市場が長期にわたって揺れ動いているとき,止損点は頻繁にヒットされ,損失が増加する可能性があります.
パラメータ最適化リスク.移動平均のパラメータを正しく設定しない場合,取引信号の誤差が発生し,損失が増加します.
対応方法:
適切な緩解のストップポイント,価格に十分なスペースを与えます. または,ljetrailのストップ方式を採用し,ストップラインを価格と共に走らせます.
トレンド判断の指標を増やし,震動期に無方向にポジションを建てるのを避ける.例えば,DMI,MACDなどの指標を配合してフィルタリングを行う.
履歴回帰とパラメータ最適化の手段を使用して,最適なパラメータ組み合わせを選択します. リアルディスクでもパラメータ効果を追跡し,動的最適化を行います.
この戦略は,以下の側面から最適化できます.
移動平均のパラメータを最適化し,最適な周期数を選択する.異なる周期数の移動平均を回測することで最適なパラメータの組み合わせを見つけることができる.
トレンド判断の指標をフィルターに追加する.例えば,RSI指標は超買い超売りを判断する,ブリン帯はチャネル突破を判断するなど.傾向が不明なときに盲目ポジションを避ける.
適応性のある移動平均を採用する.市場の変化と変動率に応じて,移動平均のパラメータをリアルタイムで最適化して,現在の市場状況に適したようにする.
機械学習モデルと組み合わせてトレンドの確率を判断する.突破の成功確率を評価する確率モデルを構築し,入場タイミングを判断する意思決定システムを支援する.
トライルリグストップ損失や自動縮小ストップなどのストップラインをスマートにする.
移動平均帯戦略は,比較的一般的なトレンド追跡戦略の1つである.それは,同時に,速い線と遅い線を組み合わせて,中長い線のトレンドを判断し,入場を決定する連続した突破フィルタリング機構を設定する.この戦略は,トレンド追跡と超買い超売り判断を兼ね備えて,パラメータの最適化と指標の強化によって,運用効果をさらに向上させることができる.それは,中長い線を保有する投資家に適している.
//@version=4
strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true)
src = input(close, type=input.source, title="Source")
matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima")
// possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma)
trima(_src, _len) =>
sma(sma(_src, _len), _len)
hma(_src, _len) =>
wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len)))
dema(_src, _len) =>
2 * ema(_src, _len) - ema(ema(_src, _len), _len)
tema(_src, _len) =>
3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) +
ema(ema(ema(_src, _len), _len), _len)
zlema(_src, _len) =>
ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len)
ma(_src, _len) =>
hma__1 = hma(_src, _len)
ema_1 = ema(_src, _len)
sma_1 = sma(_src, _len)
wma_1 = wma(_src, _len)
trima__1 = trima(_src, _len)
zlema__1 = zlema(_src, _len)
dema__1 = dema(_src, _len)
tema__1 = tema(_src, _len)
matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 :
matype == "wma" ? wma_1 : matype == "trima" ? trima__1 :
matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1
ma05 = ma(src, 5)
ma08 = ma(src, 8)
ma13 = ma(src, 13)
ma20 = ma(src, 20)
ma30 = ma(src, 30)
ma45 = ma(src, 45)
ma70 = ma(src, 70)
ma105 = ma(src, 105)
ma150 = ma(src, 150)
ma200 = ma(src, 200)
maColor(ma, maRef) =>
if change(ma) <= 0 and ma05 < maRef
color.new(color.red, 20)
else
if change(ma) >= 0 and ma05 > maRef
color.new(color.navy, 20)
else
if change(ma) < 0 and ma05 > maRef
color.new(color.red, 20)
else
if change(ma) >= 0 and ma05 < maRef
color.new(color.navy, 20)
else
color.gray
aboveConfirmed(x,maRef)=>
above=true
for i=1 to x
if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015)
above:=false
above
aboveMost(x,len)=>
above=0
boolean=false
if close[len]>ma05[len]
above:=above+1
if close[len]>ma08[len]
above:=above+1
if close[len]>ma13[len]
above:=above+1
if close[len]>ma20[len]
above:=above+1
if close[len]>ma30[len]
above:=above+1
if close[len]>ma45[len]
above:=above+1
if close[len]>ma70[len]
above:=above+1
if close[len]>ma105[len]
above:=above+1
if close[len]>ma150[len]
above:=above+1
if close[len]>ma200[len]
above:=above+1
if(above>=x)
boolean:=true
boolean
belowMost(x,len)=>
above=0
boolean=false
if close[len]<ma05[len]
above:=above+1
if close[len]<ma08[len]
above:=above+1
if close[len]<ma13[len]
above:=above+1
if close[len]<ma20[len]
above:=above+1
if close[len]<ma30[len]
above:=above+1
if close[len]<ma45[len]
above:=above+1
if close[len]<ma70[len]
above:=above+1
if close[len]<ma105[len]
above:=above+1
if close[len]<ma150[len]
above:=above+1
if close[len]<ma200[len]
above:=above+1
if(above>=x)
boolean:=true
boolean
belowConfirmed(x,maRef)=>
below=true
for i=1 to x
if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985)
below:=false
below
//plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above")
plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2)
plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1)
plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1)
plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1)
plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1)
plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1)
plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2)
plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2)
plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3)
plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3)
closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3)
closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3)
isAbove=aboveConfirmed(5,ma200)
strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3))
strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3))
strategy.close("long",when=closeLong)
strategy.close("short",when=closeShort)