振動反転移動平均システム戦略


作成日: 2023-10-18 12:23:13 最終変更日: 2023-10-18 12:23:13
コピー: 2 クリック数: 620
1
フォロー
1617
フォロワー

振動反転移動平均システム戦略

概要

この戦略は,均線システムを使用してトレンドの方向を判断し,波動率指標と組み合わせて低波動の震動市場を避けるため,震動ストップを用い,取引管理を行う.

原則

この戦略は,速い平均線と遅い平均線の位置関係を比較してトレンドの方向を判断する.速い平均線で遅い平均線を横切るときは,見上げ,下を横切る.市場の揺れを避けるために,戦略はまたブリン帯の指標を導入する.ブリン帯の幅の変化率を計算することによって,変化率が設定された値を超えると取引が生じます.最後に,戦略は,チャンデリー空間の戦略の通路を震動ストップとして採用し,震動市場の揺れに困らないようにする.

この戦略の取引の論理は以下の通りです.

  1. 速平均線 ((デフォルト20日) と遅平均線 ((デフォルト50日) を計算する.

  2. ブリン帯の幅の変化率を計算する (デフォルト40日,2倍標準差).

  3. 高速平均線が遅速平均線を通過し,ブリン帯域幅の変化率が設定の値 (デフォルトの9%) を超える場合,多頭信号が生成される.

  4. 速平均線下を通過すると,ブリン帯域幅の変化率が設定の値 (デフォルトの9%) を超える空頭信号が生成される.

  5. チェンデリ空路をストップポイントとして計算する.

  6. 多頭ストップは最高価格-ATR*ATRの最小値と空頭ストップの倍数*倍数について

利点

  1. 平均線システムを使用してトレンドの方向を判断し,トレンドを効果的に追跡できます.

  2. ブリン・バンド幅の変動率を導入することで,不必要な取引を減らすことで,市場を揺るがさないことができます.

  3. 震動止損を使用すると,震動に困らないように,タイムリーで止損を回避できます.

  4. 複数のパラメータを調整し,異なる市場向けに最適化することができます.

  5. 戦略の論理は明確で分かりやすく,使い方を学ぶのが簡単です.

リスク

  1. 均線システムには遅延があり,迅速な反転の機会を逃す可能性があります.

  2. ブリン帯のパラメータ設定が不適切である場合,有効な取引信号をフィルタリングする可能性があります.

  3. ストップダメージが過度に敏感であるため,取引が頻発する可能性があります.

  4. パラメータの最適化が不十分である場合,ポジションのリスクが発生する可能性があります.

  5. 市場の急激な変化に適応できない.

最適化の方向

  1. 異なるパラメータの均線組合せをテストして,最適なパラメータを探します.

  2. 異なる周期のブリン帯のパラメータをテストして,最適な波動フィルタリング効果を見つけることができる.

  3. 他の指標と組み合わせて入場確認を行い,信号の質を向上させることができる.

  4. 動的ストップ戦略を導入することで,ストップが市場を良く追跡できる.

  5. 機械学習技術の自動最適化パラメータを組み合わせて,市場の変化に適応することができる.

要約する

この戦略は均等線システム,ブリン帯指標,振動停止技術を統合し,比較的安定したトレンド追跡システムを形成している.パラメータ最適化によって良い戦略効果を得ることができる.しかし,トレンドの逆転と市場の揺れのリスクに対して警戒する必要がある.さらに,機械学習などの技術は,戦略の安定性をさらに向上させることができる.全体的に,この戦略は学習練習者の戦略として非常に適しています.

ストラテジーソースコード
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © juanchez

//@version=4
strategy("CHI", overlay = true, close_entries_rule = "ANY")

n = input(title= "highest high o lowest low period", defval= 22)
f= input(title= "multiplicador", defval= 4)
long = highest(high, n) - atr(n)*f
short= lowest(low, n) + atr(n)*f
plot(long, color= color.red)
plot(short, color= color.green)

//moving averages
period= input(title= "moving averages period", defval= 50)
period2= input(title= "moving averages period2", defval= 20)
type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema")

//moving average function
mo(p, t) =>
    if t == "sma"
        sma(close[barstate.islast ? 1: 0], p)
    else  if t== "ema"
        ema(close[barstate.islast ? 1: 0], p)

m= mo(period, type)
m2= mo(period2, type)

trend= m2 > m 

plot(m, color = color.maroon, linewidth = 3)
plot(m2, linewidth= 3)


//BOLLINGER BANDS ENTRIES
bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1)
bb1_source=input(title="Bollinger band 1 source", defval=close)
bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1)
show_bb1= input(title="Show Bollinger bands 1", defval=false)
//BOLLINGER BANDS
_bb(src, lenght, multi)=>
    float moving_avg= sma(src[barstate.islast? 1: 0], lenght)
    float deviation= stdev(src[barstate.islast? 1: 0], lenght)
    float lowerband = moving_avg - deviation*multi
    float upperband = moving_avg + deviation*multi
    
    [moving_avg, lowerband, upperband]
    
[bb1, lowerband1, upperband1]= _bb(bb1_source,  bb1_period, bb1_multi)

//FIRST BAND    
plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia)
plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green)
plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red)

//BB's Width threshold 
thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100)

widht= (upperband1 - lowerband1)/bb1
roc= change(widht)/widht[1]*100
cross=crossover(roc, thresh)

// entry
//long
elong= input(true, title= "enable long")
longcondition= m2 > m and cross and elong

//short
eshort= input(true, title= "enable short")
shortcondition= m2 < m and cross and eshort


plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white)
plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white)

out= crossunder(close, long)
outt= crossover(close, short)

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = out)

strategy.entry("short", strategy.short, when = shortcondition)
strategy.close("short", when = outt)