この戦略はボリンジャーバンド指標に基づいている.価格が上または下帯に達するとポジションを開き,ダイナミック・テイク・プロフィートとダイナミック・ポジション・アドディング・ロジックを設定する.価格が下帯からリバウンドして中帯を突破すると,戦略は上昇傾向が形成されたと考えられる.この時点で,価格が中帯の一定のパーセントまで引き戻したとき,戦略はポジションを追加する.価格が最終的に上帯を突破すると,戦略は利益を得るためにポジションを閉じる.ダウントレンドでは,戦略は反対の運用論理を採用する.ボリンジャーバンドに基づいたダイナミック・テイク・プロフィートとダイナミック・ポジション・アドディングを通じて,この戦略はトレンド市場でより多くの利益を得ることができる.
この戦略の主な原則は以下のとおりです.
ボリンジャー帯の上位,中位,下位帯を計算する.上位,下位帯は,中位帯から標準偏差の N 倍を足し,減算することによって計算される.ここで,N をカスタマイズすることができます.
閉じる価格が下帯を割って,これまでポジションが開かれていない場合,ストラテジーはロングポジションを開く.閉じる価格が上帯を割って,これまでポジションが開かれていない場合,ストラテジーはショートポジションを開く.ここでのオープニングロジックは伝統的なボリンジャーバンドブレイクアウトシステムに似ている.
ロングポジションを開いた後,閉じる価格が中間帯を通って上向きに突破した場合,上昇傾向が形成されたと考えられ,変数 basisCrossed は true とマークされます.ショートポジションを開いた後,閉じる価格が中間帯を通って下向きに突破した場合, basisCrossed も true とマークされます.
ロングポジションの場合,閉じる価格が下の帯とベースCrossedを割って true となり,現在の価格が元の開口価格から2%以上下がった場合,戦略はこの時点でポジションを追加し,同時に false にbaseCrossed をリセットします.ショートポジションの場合は逆です.ここでのポジション追加論理は,トレンド・プルバック中に低水準のポジションを追加し,利益空間を増やすことができます.
ロングポジションを保持する際に閉じる価格が上位帯を突破するか,ショートポジションを保持する際に閉じる価格が下位帯を突破する場合は,戦略はすべてのポジションを閉じて,利益を得て,次のオープンに備えるために様々なマーカー変数をリセットします.
上記のダイナミックなオープン,ポジション追加,利益の論理により,この戦略は傾向市場で柔軟に動作し,より高い利益を得ることができます.同時に,トレンドを把握するためにボリンジャーバンドのクラシック技術指標を使用することで,戦略には一定の適応性と安定性があります.
ダイナミック・テイク・プロフィート:この戦略は,ボリンジャー・バンドの上下帯を通じたテイク・プロフィートのレベルをダイナミックに調整する.固定ポイントテイク・プロフィートと比較して,市場の変動により順応し,柔軟に利益を保護することができる.
動的ポジション追加:トレンドが形成された後の引き下げ段階では,戦略は徐々にポジションを追加し,トレンド市場でより高い利益を得ることができます.動的ポジション追加は,トレンド取引においてこの戦略をより有利にします.
柔軟なパラメータ: N値とP値などのボリンジャー帯のパラメータは,異なる市場特性や取引スタイルに適応するために柔軟に調整できます.
柔軟性:ボリンジャー帯は,トレンドを把握する優れた能力を持つクラシックな技術指標です.動的ポジション管理と組み合わせると,さまざまな金融市場で安定した役割を果たします.
明確な論理: この戦略の開閉条件と追加・減額の論理は,非常に明確で理解しやすいので,トレーダーが理解し制御することが便利です. 明確な論理はまた,二次開発と戦略最適化を行うことが容易であることを意味します.
振動市場:ボリンジャーバンド戦略は振動市場ではしばしば不良なパフォーマンスを発揮する.この時点で,ポジションの頻繁な開閉は,取引コストの増加につながり,全体的な収益に影響を与える.
トレンド逆転: トレンド逆転の重要な瞬間,この戦略は判断が遅れており,間違った方向にポジションを追加し,より大きな引き下げにつながる可能性があります.
極端な状況:極端な状況 (急激な上昇と減少など) では,ボリンジャー帯のトレンドが異常になり,戦略が失敗する可能性があります.
パラメータ設定:不適切なパラメータ設定は,この戦略のパフォーマンスに深刻な影響を与える.例えば,N値が小さすぎると,取引が頻繁になり,N値が大きすぎると,信号遅延が生じる.
ブラック・スワン・イベント: 大きな政治・経済的な出来事がある場合,この戦略はより大きなリスクにさらされる可能性があります.
上記のリスクをコントロールするには,次の2つの側面からスタートすることができます: 1) 異なるターゲットや市場状況に適したパラメータを合理的に設定し,パラメータを最適化すること; 2) 戦略にトレンド判断,波動性フィルタリングなど,より多くのフィルタリング条件を追加して,シグナル品質を改善することです. さらに,実際の使用では,ポジション制御とリスク管理の良い仕事をする必要があり,単一の取引のリスク露出を厳格に制御する必要があります.
トレンドフィルタリング: ポジションを開設する際にトレンド判断のロジックを追加します. 例えば,ロングに行くためのフィルタリング条件としてMAのバリース・アレンジ,ショートに行くためのフィルタリング条件としてMAのベアッシュ・アレンジを使用することで,トレンド把握の成功率を向上させることができます.
波動性フィルタリング:ボリンジャー帯は実際には波動性の指標の一種である.市場波動性の状態を特定するために,ATRや歴史的な波動性などの波動性指標を導入することができる.リスクをよりよく制御するために,波動性が高い状態ではポジションを適切に減少させ,波動性が低い状態では増加させることができる.
ダイナミックパラメータ最適化:ボリンジャー帯のパラメータは,市場の状況に応じて動的に調整することができます.例えば,N値はトレンド市場では増加し,振動市場では減少することができます.これは,機械学習やその他の技術を使用して,歴史的なデータへのトレーニングを通じて最適なパラメータを見つける必要があります.
組み合わせ戦略:この戦略は,MACDやRSIなどの他のクラシック戦略と組み合わせて組み合わせた戦略を形成し,システムの安定性と収益性を向上させる.
ストップ・ロスのロジックを追加: 現在,この戦略には明確なストップ・ロスのロジックがない.単一の取引の最大損失を制御するために,トライリング・ストップまたは固定パーセントストップ・ロスのようなメカニズムを追加することを検討することができます.
ポジション管理の最適化:ポジションを追加・削減する過程で,制御可能なリスク下で利益を最大化するために,ケリー式や最適なF値などの古典的なポジション管理方法が使用できます.
上記の最適化により,この戦略のリスク・リターン比はさらに改善され,変化する市場環境により良く適応し,トレーダーに安定したリターンをもたらすことができます.
ボリンジャーバンド動的取利益と動的ポジション追加戦略は,古典的なトレンド追跡戦略である.ボリンジャーバンドをベースに,ポジションを動的に調整することで,より高いトレンド利益を追求する.この戦略は明確な論理,柔軟なパラメータ,強力な適応性を持っています.これは,深く研究および適用に値する定量的な取引戦略です.しかし,同時に,この戦略が振動する市場では不具合で,極端な状況やブラック・スワンイベントに対処する能力が欠けていることも確認する必要があります.これは,パラメータ最適化,リスク制御,組み合わせ戦略を実際の適用に集中し,さまざまな市場条件で戦略の有効性を定期的にテストする必要があります.この戦略の内部論理を深く理解し,継続的に最適化し,改善することで,この戦略は定量的なトレーダーと長期投資家に安定した収益をもたらす重要なツールになることができます.
/*backtest start: 2024-03-01 00:00:00 end: 2024-03-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // Bollinger Bands 1Bb 상하한 크로스 롱숏 실행 strategy(shorttitle="BB", title="Bollinger Bands", overlay=true ) // bb length = input.int(12, minval=1) src = input(close, title="Source") mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev") basis = ta.sma(src, length) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) add = input.float(0.98, step = 0.001) // plot(upper - lower, "Basis", color=color.red, offset = offset) var bool entryMade = false var bool basisCrossed = false var bool upperCrossed = false var bool lowerCrossed = false strategy.initial_capital = 50000 if close < lower and not entryMade strategy.entry("롱", strategy.long, qty = strategy.initial_capital/10000) entryMade := true if ta.crossover(close, basis) and entryMade and not upperCrossed basisCrossed := true if close > upper upperCrossed := true if close < lower and entryMade and basisCrossed and not upperCrossed and close < strategy.position_avg_price*add strategy.entry("추가롱", strategy.long, strategy.initial_capital/10000) basisCrossed := false if close > upper strategy.close("롱") strategy.close("추가롱") entryMade := false basisCrossed := false upperCrossed := false ///////////반대 포지션 if close > upper and not entryMade strategy.entry("s", strategy.short, qty = strategy.initial_capital/10000) entryMade := true if ta.crossunder(close, basis) and entryMade and not lowerCrossed basisCrossed := true if close < lower lowerCrossed := true if close > upper and entryMade and basisCrossed and not lowerCrossed and close > strategy.position_avg_price*add strategy.entry("추가s", strategy.short, strategy.initial_capital/10000) basisCrossed := false if close < lower strategy.close("s") strategy.close("추가s") entryMade := false basisCrossed := false upperCrossed := false