2つの移動平均振動突破戦略

作者: リン・ハーンチャオチャン, 日付: 2023-11-27 17:44:49
タグ:

img

概要

ダブル移動平均振動突破戦略は,チャネルを形成し,価格の振動傾向を判断するために異なる期間の2つの移動平均を計算する.価格がチャネルを突破したとき,取引信号を生成する.この戦略は,誤った突破を避けるために主流の市場方向判断も組み込む.

戦略原則

この戦略の主なステップは以下の通りです.

  1. 2つの移動平均を計算する.一つは短い期間と,もう一つは長い期間を持つ.より短いMAは現在の価格動向を反映し,より長いMAは主流価格動向を反映する.

  2. 最短のMAの上と下に1つのATRを追加してチャネルを形成します.ATRは現在の市場変動を反映します.

  3. 価格がチャネルを上向きに突破すると購入信号が生成される.価格がチャネルを下向きに突破すると販売信号が生成される.

  4. 主流のトレンド判断を組み込む. 短期的な突破が主流のトレンド方向に一致するときにのみ有効な取引信号が生成されます.

この戦略は,これらのステップに従って,振動傾向の突破点を把握し,主流傾向を参照することで誤った信号を回避します.

利点分析

この戦略の利点は

  1. 二重MAチャネルは,現在の価格振動範囲を反映しています.

  2. ATRパラメータは,チャネル範囲で市場変動をリアルタイムで追跡できるようにします.

  3. 主流のトレンドフィルタリングは,振動する市場で誤った信号を避ける.

  4. 規則は単純で分かりやすい.学習と研究に適している.

リスク分析

リスク:

  1. 失敗した突破は 良い機会を逃す可能性があります 利益を得て再参入することで軽減できます

  2. 主流のトレンド判断には時間遅れがあり,すべての誤った信号を排除することはできません. MAパラメータを最適化することができます.

  3. ストップ・ロスは不安定な市場に 浸透し,ATRを動的に調整できます

オプティマイゼーションの方向性

この戦略を最適化する方法:

  1. 異なる製品に対して MA パラメータを最適化する.

  2. ATRパラメータを最適化して 波動性を追跡する

  3. 誤った信号をさらに避けるために 音量や波動性の指標のような追加フィルターを追加します

  4. マシン学習を使って パラメータを自動的に最適化します

結論

このダブルMA振動突破戦略は,ダブルMAチャネルとメインストリームフィルタリングを通じて振動傾向を捉える. シンプルで明確なルールにより,突破トレード戦略を学ぶのに優れた例である. パラメータと信号フィルタリングのさらなる最適化は,収益性と安定性を向上させる.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Anuj4912
//@version=4
strategy("Anuj4912", overlay=true)
res = input(title="Time Frame",  defval="120")
Factor=input(1, minval=1,maxval = 100)
Pd=input(1, minval=1,maxval = 100)

tp = input(500,title="Take Profit")
sl = input(400,title="Stop Loss")


Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
MUp=request.security(syminfo.tickerid,res,hl2-(Factor*atr(Pd)))
MDn=request.security(syminfo.tickerid,res,hl2+(Factor*atr(Pd)))

Mclose=request.security(syminfo.tickerid,res,close)

TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn

MTrendUp=Mclose[1]>MTrendUp[1]? max(MUp,MTrendUp[1]) : MUp
MTrendDown=Mclose[1]<MTrendDown[1]? min(MDn,MTrendDown[1]) : MDn

Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = Trend==1? TrendUp: TrendDown

MTrend = Mclose > MTrendDown[1] ? 1: Mclose< MTrendUp[1]? -1: nz(MTrend[1],1)
MTsl = MTrend==1? MTrendUp: MTrendDown

linecolor = Trend == 1 ? green : red
plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")

Mlinecolor = MTrend == 1 ? blue : orange
plot(MTsl, color = Mlinecolor , style = line , linewidth = 2,title = "Main SuperTrend")

plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0)

up = Trend == 1 and Trend[1] == -1 and MTrend == 1 
down = Trend == -1 and Trend[1] == 1 and MTrend == -1 
plotarrow(up ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0)
plotarrow(down ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0)


golong = Trend == 1 and Trend[1] == -1 and MTrend == 1 
goshort = Trend == -1 and Trend[1] == 1 and MTrend == -1 

strategy.entry("Buy", strategy.long,when=golong)
strategy.exit("Close Buy","Buy",profit=tp,loss=sl)
   
   
strategy.entry("Sell", strategy.short,when=goshort)
strategy.exit("Close Sell","Sell",profit=tp,loss=sl)



もっと