Bollinger Bands と指数関数移動平均をベースにしたトレンド追跡戦略

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

img

概要

この戦略は,ボリンジャー帯を使用して,現在のトレンド方向とストップ損失の指数関数移動平均を決定し,トレンドを効果的に把握するために利益管理を行います.

原則

この戦略は,まずボリンジャーバンドの中間線,上部帯,下部帯を計算する.中間線は,閉盤価格の n 日間の単純な移動平均線である.上部帯と下部帯は,中間線から2つの標準偏差で上下移動する.閉盤価格が上部帯以上になると,上向き傾向を示す.閉盤価格が下部帯以下になると,下向き傾向を示す.

この戦略は,閉値とボリンジャーバンドの上下帯の関係を比較することによって,現在のトレンド方向を判断する.閉値が上帯を突破した場合,ロングに行く.閉値が下帯を突破した場合,ショートに行く.

さらに,指数関数移動平均はストップ・ロストとテイク・プロフィートのトレーリング・ストップとして導入される.特に,価格がロング後下落した場合,ストップ・ロストラインはそれに応じて下落し,徐々にストップ・ロスト距離を締め,利益を最大化する.価格が上昇し続ける場合,ストップ・ロストラインも上向きに移動し,利益を稼働させる.ストップ・ロストメカニズムはショートポジションに対して逆方向に動作する.

利点

ストップ・ロスト/テイク・プロフィート管理のためのBollinger BandsとEMAを組み合わせた戦略は,以下の利点があります.

  1. ボリンジャー帯を使用することで,トレンド方向を効果的に決定し,ブレイクに迅速に対応できます.

  2. EMA ベースのストップ・ロスト/テイク・プロフィートはリスクをコントロールしながら 利益を最大限に抑えることができます

  3. この戦略には 簡単に実行できるパラメータがほとんどありません BBとEMAのパラメータは 1つだけです

  4. 柔軟性のある様々な製品に広く適用できます

リスク と 最適化

この戦略には,注意すべきいくつかのリスクもあります.

  1. BB上/下帯を突破することは,誤った突破のリスクを完全に回避することはできません.信号をフィルターするために音量などと組み合わせることを検討してください.

  2. EMAパラメータ設定は,特定の製品に応じて慎重にテストする必要があります. EMA期間が短すぎると,ストップロスの時間が増加します.長くすぎると,トレーリング効果が低下します.

  3. BB と EMA のパラメータの組み合わせが多すぎると,オーバーフィッティングが発生する可能性があります.

リスクと最適化の方向性を考慮するには,次のことを考慮することができます:

  1. 誤ったブレイクシグナルをフィルタリングするためにボリュームやMACDなどを追加します.

  2. EMA期間をテストを通じて最適化し,特定の製品に最適なパラメータを見つけます.

  3. BB と 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")

もっと