Bollinger Bands をベースにしたトレンドブレークアウト戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-16 16:24:12
タグ:

img

概要

この戦略は,ボリンジャーバンドに基づいたトレンドフォロー戦略である.価格チャネルを計算するためにボリンジャーバンドを使用し,トレンド方向を決定するためにキャンドルスタックパターンを組み合わせます.価格がボリンジャーバンドを突破したとき,ロング/ショートポジションが開かれます.この戦略は明らかなトレンドを持つ株式にうまく機能し,中期トレンド利益を得ることを目的としています.

戦略の論理

この戦略は,ボリンジャーバンドの上帯,中帯,下帯を使用して価格範囲を決定する.上帯と下帯は価格動きを封筒に,中帯は移動平均である.価格変動に基づいてバンド幅が変化する.価格が上帯を超えると,上向きのブレイクアウトとロングエントリーをシグナルする.価格が下帯を下に突破すると,下向きのブレイクアウトとショートエントリーをシグナルする.

ボリンジャーバンドのブレイクアウトでトレンド方向を決定した後,戦略はそれをキャンドルスタイクパターンで確認する.キャンドルボディが上昇傾向のブライッシュキャンドルなどのトレンドに準拠した場合,ポジションが開かれる.キャンドルボディが上昇傾向のベアッシュキャンドルなどの逆パターンを示す場合,シグナルは無視される.このデザインは偽のブレイクアウトリスクを避けることを目的としています.

取引シグナルに関する詳細な規則は以下のとおりです.

  1. 価格範囲を決定するために,ボリンジャーバンドの上帯,中帯,下帯を計算する

  2. 価格が上位帯を突破すると 上向き/長向きの傾向を示します

  3. 傾向を確認し,ロングに行く

  4. 価格が下位帯を下回ると,下落傾向/ショート傾向を示します.

  5. キャンドルスタイクが下落すると,トレンドを確認してショートに行く

  6. ストップ・ロスを設定し,収益を占める

ボリンジャー・バンドのブレイクアウトを入力し,キャンドルスタイクで確認することで,この戦略はトレンド方向を効果的に特定し,初期のトレンド段階で良いエントリを得ることができます. 利益は中期トレンドの間に取られます.

利点分析

これは,次の強みを持つ戦略に従う典型的な傾向です.

  1. ボリンジャー帯は適応性があり,変動が異なる株の範囲を調整することができます.

  2. キャンドルスタイク確認は,偽のブレイクをフィルタリングします.

  3. 中期保有は取引頻度を低くし,コスト/スリップを削減する

  4. 中期トレンドを把握することで 短期的な騒音は避けられ 良質なリスク・リターンが得られます

  5. バックテストの結果は強み システム化により実際の取引は安定している

  6. 戦略の論理は明確で理解が容易で,改善の余地があります

ボリンジャー・バンドでトレンドを決定し,キャンドルスティック確認を入力することで,この戦略は,ボリュームによって駆動される中期モメンタムを効果的に捉えます.それは強力な実用的な価値を持っています.

リスク分析

この戦略には注意すべきリスクもあります.

  1. 失敗したブレイクリスク.ボリンジャーバンドを壊すことは確率的性質があり,偽ブレイクが発生します.

  2. 中期傾向も逆転する可能性があるため,合理的な停止を設定する必要があります.

  3. パラメータ最適化リスク.ボリンガーバンドのパラメータとストップは,異なる株に調整する必要があります.

  4. 過剰なパラメータ最適化により曲線の適合が起こる

  5. バックテストと実際の取引との間には違いがあります.

これらのリスクに対処するために,以下の改善が可能です.

  1. より良いフィットメントのためにボリンジャーバンドのパラメータと幅を最適化

  2. トレンドを確認するために,ボリュームのようなより多くの要因を追加します

  3. ダイナミックストップを使用して,逆転で巨大な損失を防ぐ

  4. オーバーフィッティングを避けるために歩み先分析を適用

  5. 取引の効率を向上させるためのオーダーの実行を改善する

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

この戦略は,次の側面でさらに強化できます.

  1. KDJ,MACDなどのより多くの指標を追加して信号を確認し,精度を向上させる

  2. 固定値ではなくパラメータを動的に最適化するために機械学習を使用する

  3. より正確な信号を生成するためにブレイクポイントの周りに価格ゾーンを設定します

  4. トレイリングストップや部分的な利益を取ることで出口を最適化します

  5. より良いリスク管理のためにポジションのサイズを導入する

  6. 実行結果を改善するために高度なオーダータイプを使用する

  7. 特定の環境で戦略をオフにするために市場体制フィルターを追加

より多くの技術と最適化によって,この戦略の安定性と収益性がさらに向上し,さらに優れたバックテストと実際の取引結果を得ることができます.

結論

これは,トレンド指向を決定するためにボリンジャー帯をダイナミックレンジとして使用する典型的なトレンドフォロー戦略である.キャンドルスティック確認は正確なエントリー信号を提供します.エントリーは,中期モメンタムに乗る目的で,初期のトレンド段階で行われます.

この戦略の利点は,トレンドのためにボリンジャーバンド,エントリー確認のためにキャンドルスタック,低取引頻度,そして簡単なシステム化を含む.また,偽のブレイクアウト,ストップ損失最適化困難,実行ディバージェンスなどのリスクがあります.より多くの指標,ダイナミックパラメーター,および高度な実行は安定性と実際の取引パフォーマンスを向上させることができます.

一般的に,戦略の典型的なトレンドフォロワーとして,明確な論理があり,強力な可動性で簡単に実装できます.継続的な最適化と厳格なリスク管理により,定量的な取引システムにおける効果的なモジュールになることができます.


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


//@version=2
strategy("Noro's Bands Scalper Strategy v1.2", shorttitle = "Scalper str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needct = input(false, defval = false, title = "Counter-trend entry")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd1 = center + distsma / 2
ld1 = center - distsma / 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = sma(body, 100)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and close < open)) ? 1 : 0
dn7 = trend == 1 and bar == 1 and bar[1] == 1 and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and bar == -1 and bar[1] == -1 and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and close > open)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

もっと