ボリンジャーバンドと指数移動平均に基づくトレンドフォロー戦略


作成日: 2023-11-17 17:36:43 最終変更日: 2023-11-17 17:36:43
コピー: 0 クリック数: 647
1
フォロー
1617
フォロワー

ボリンジャーバンドと指数移動平均に基づくトレンドフォロー戦略

概要

この戦略は,ブリン帯の指標を用いて現在のトレンドの方向を判断し,指数移動平均と組み合わせて,ストップ・ストップ・マネジメントを行うことで,トレンドを効果的に捕捉することができる.

元の解釈

この戦略は,まずブリン帯の中線,上線,下線を計算する.中線は,n日間の閉店価格のシンプル移動平均であり,上下線は,中線上下偏移の2つの標準差である.閉店価格が上線より高いときは,市場が看落傾向にあることを示し,閉店価格が下線より低いときは,市場が看落傾向にあることを示している.

策略は,閉盘価格とブリン帯の上下軌道の関係を比較して,現在のトレンドの方向を判断する.閉盘価格が上下軌道を突破すると,多めにする.閉盘価格が下下軌道を突破すると,空っぽにする.

さらに,戦略は,指数移動平均を,損失の止まりを停止するトレーリングストップとして導入した.具体的には,もし多すぎると,価格は下方へ戻り,止まり線はそれに伴って移動し,止まりの距離を徐々に緊縮させ,利潤を最大限にロックする.価格が上昇し続けると,止まり線も上方へ移動し,利潤が継続する.空白の場合は,止まりの仕組みは逆である.

優位分析

この戦略は,ブリン帯のトレンド判断方向とEMAのストップ・ストップ管理を組み合わせて,以下の利点があります.

  1. ブリンバンドは,トレンドの方向を正確に判断し,突破時に迅速に反応する.

  2. EMAベースのストップ・ストップは,利潤を最大限にロックし,利潤を保証しながらリスクを制御します.

  3. 策略のパラメータは少ないので,簡単に実装できます. ブリンには1つのパラメータ,EMAには1つのパラメータがあり,非常に簡潔です.

  4. 様々な品種に広く適用され,強い適応性がある.

リスクと最適化思考

この戦略にはいくつかのリスクがあります.

  1. ブリンによる下位突破は,偽突破のリスクを完全に回避することはできません.取引量などの指標のフィルタリング信号と組み合わせることができます.

  2. EMAパラメータの設定は,特定の品種に応じて慎重にテストする必要があります.EMA周期が短すぎると,ストップローズの回数が増加し,長すぎると追跡効果が低下する可能性があります.

  3. 過剰な最適化を防ぐために注意が必要です. ブリン帯とEMAパラメータの組み合わせが多すぎると,過適合が起こりうる.

リスクの解決と最適化方向については,以下の考え方を検討できます.

  1. 取引量やMACDなどの指標を増加させ,偽の突破信号をフィルターする.

  2. EMAサイクルを最適化テストし,特定の品種に適したパラメータを選択する.

  3. ブリン帯とEMAのパラメータを可能な限り安定させ,過度の最適化による過適合のリスクを避ける.

  4. 傾向の中期にRSIなどの指標を考慮して,ポジション調整を決定することができます.

要約する

この戦略は,ブリン帯判断トレンドとEMAのストップストップ管理を統合し,より完全なトレンド追跡システムを形成する.それは,迅速にトレンドの方向を捕捉し,ストップラインを常に調整することによって利益をロックする.全体的に,この戦略は,シンプルで実用的で,適応性が強く,さらなるテスト・最適化に値する.しかし,パラメータ設定とリスク管理に注意する必要があり,誤判や過剰最適化の問題を防止する.他の技術指標と組み合わせてさらに完善され,将来の最適化方向となる.

ストラテジーソースコード
/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 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/
// © zxcv55602
//@version=4
strategy(shorttitle=" BB+EMA", title="Bollinger Bands", overlay=true)
date1 = input(title="Start Date", type=input.time, defval=timestamp("2020-01-01T00:00:00"))
date2 = input(title="Stop Date", type=input.time, defval=timestamp("2030-01-01T00:00:00"))
length = input(40, minval=1)
src = input(close, title="Source")
mult = input(2.0,title="StdDev",step=0.1)
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
//offset = input(0, "Offset", minval = -500, maxval = 500)
offset=0
stopcon=input(title="stopcon/lot", type=input.bool, defval=true)
lot1=input(title="lot",defval=1)
stoploss=input(title="stopcon",defval=1000)
emacon=input(title="emacon", type=input.bool, defval=true)
ema_value=input(title="value",defval=30, minval=2,step=1)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=color.new(color.blue,50), offset = offset)
p2 = plot(lower, "Lower", color=color.new(color.blue,50), offset = offset)
ema1=ema(close,ema_value)
plot(ema1, "SMA", color=#2962FF)
period() => true
//-----------
if period()
    if strategy.opentrades==0 and ema1<upper
        if close>upper
            lot_L=stoploss/((close-lower)/2)
            strategy.entry("OP_L",strategy.long,qty=stopcon==true?lot_L:lot1,stop=emacon==true?max(basis,ema1):basis)
    if strategy.opentrades==0 and ema1>lower
        if close<lower
            lot_S=stoploss/((upper-close)/2)
            strategy.entry("OP_S",strategy.short,qty=stopcon==true?lot_S:lot1,stop=emacon==true?min(basis,ema1):basis)
    if strategy.position_size>0
        strategy.exit("OP_L",stop=emacon==true?max(basis,ema1):basis,comment="exit_L")
    if strategy.position_size<0
        strategy.exit("OP_S",stop=emacon==true?min(basis,ema1):basis,comment="exit_S")