この戦略は,市場動向を測定するためにボリンジャーバンドを使用し,投資ポートフォリオの安定した成長を目指して,取引機会を特定するために帯域幅信号を組み合わせます.前年のデータとバックテストすると,最大引き上げがわずか -4.02%で78.95%の収益性を達成しました. これは,私のポートフォリオを安定的に成長させるのに役立つ自動化された戦略の1つです.
この戦略を修正し バックテストしてください どんなコメントやアイデアも歓迎します
この戦略を自動化したい場合は, 警告を使って行うことができます. 警告をコードに追加し,研究に変換する必要があります. 興味がある場合は教えて下さい.
この戦略は,入口と出口を決定するためにボリンジャー帯と帯域幅を使用します.
ボリンガー帯には上帯,中帯,下帯が含まれます.中帯はn期間の単純な移動平均値で,デフォルトはn = 16.上帯は中帯+k *標準偏差,下帯は中帯 - k *標準偏差,デフォルトはk = 3.価格が上帯に近づくと,過評価または過買いを示します.価格が下帯に近づくと,過評価または過売りを示します.
帯域幅指標は,中間帯との関係で価格の変動を示します.これは (上帯 - 下帯) /中帯 * 1000 で計算されます.帯域幅が20未満の場合,低変動または統合を示します.帯域幅が50を超えると,変動が増加します.
この戦略は,帯域幅が20〜50の範囲で価格が下帯を下回ると,長期間の機会を探します. 長期間の後,入場価格の108%に利益を得たり,価格が上帯を下回るとストップロスの出口を設定します.
この戦略の利点は以下の通りです.
ボリンジャー・バンドはトレンド方向を測定し,偽のブレイクによるリスクを軽減します
帯域幅信号は,範囲に制限されたアクションを正確に位置付け,大きな振動による大きな損失を回避します
バックテストでは1年間で 80%近く収益性があり リスクと報酬の比率が非常に高い
最大引き上げは5%未満で リスクは効果的に制御され ポートフォリオの成長は安定しています
シンプルで明快な論理,理解し実行しやすい,様々な資産に広く適用可能
この戦略のリスクは以下のとおりです.
悪いボリンジャーパラメータ設定は,良い取引機会を逃す可能性があります.
継続的な牛や熊市場での取引頻度が低く,収益性が制限されている
バックテストデータ不足,実際のパフォーマンスがバックテストと異なる可能性があります.
ストップ・ロスは極端な動きで引き出され,大きな損失につながる可能性があります.
高額な取引コストも,実際の利益を低下させる
解決策:
パラメータを最適化し,市場に基づいてボリンジャー期間を調整
異常な市場状況に対処するための追加指標を導入する
安定性を確認するために,さまざまな市場で十分なデータとバックテストを集めます.
極端な動きから大きな損失を防ぐために適切なストップ損失を調整する
取引コストを削減するために低手数料の取引プラットフォームを選択する
この戦略は,次の側面で改善できます.
誤ったブレイクを避けるためにボリューム確認を追加する
トレンド指数と組み合わせて,トレンド方向を特定する
マシン学習を使用して,パラメータを自動調整し,市場に適応します
関連性のない資産の取引を避けるため,相関フィルターを追加する
上向きのトレンド中により多くの利益を得るため,利益/ストップ損失を最適化
勝利率を高めるためにより多くの条件フィルターを導入します
複数の周期から利益を得るため,複数のタイムフレームの組み合わせをテストする
リスク拡大のためのインデックスポートフォリオを構築する
新しい戦略を自動生成&検証するために機械学習を使用
このボリンガーバンドブレイクアウト戦略は,全体的に見ると,バックテストが良好で,レンジ・バインド市場では安定したリターンを生み出すことができる.コア論理はシンプルで明確で,把握し適用しやすい.しかし,複雑な市場で安定した利益を得るためには,パラメータ最適化,リスク管理,ポートフォリオ管理のさらなる改善が必要である.これは基本的なトレンドフォロー戦略であり,より多くの技術指標やリスク管理メカニズムを導入したり,自動化のための機械学習を組み合わせたりすることで強化することができる.要約すると,この戦略は初心者にとってアルゴリズム取引への扉を開き,経験豊富なトレーダーに戦略を最適化するための可能性も提供する.
/*backtest start: 2023-10-30 00:00:00 end: 2023-11-06 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Bollinger Bands BAT/USDT 30min", overlay=true ) /// Indicators ///Bollinger Bands source = close length = input(16, minval=1) mult = input(3, step=0.1, minval=0.001, maxval=50) basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev plot(basis, color=color.red) p1 = plot(upper, color=color.blue) p2 = plot(lower, color=color.blue) fill(p1, p2) //Bollinger bands width bbw = (upper-lower)/basis*1000 //plot(bbw, color=color.blue) upper_bbw_input = input(title="BBW Upper Threshold", step=1, minval=0, defval=50) lower_bbw_input = input(title="BBW Lower Threshold", step=1, minval=0, defval=20) // Backtesting Period testStartYear = input(2019, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2020, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => true // Take Profit tp_inp = input(8, title='Take Profit %', step=0.1)/100 take_level = strategy.position_avg_price * (1 + tp_inp) //Entry Strategy entry_long = crossover(source, lower) and (bbw < upper_bbw_input) and (bbw > lower_bbw_input) exit_long = cross(high,upper) or close < lower if testPeriod() strategy.entry(id="LongBB", long=true, comment="LongBB", when=entry_long) strategy.exit("Take Profit Long","LongBB",limit=take_level) strategy.close(id="LongBB", when=exit_long )