この戦略はブリン帯の指数に基づいており,価格がブリン帯の上下軌道に触れたときにポジションを開き,ダイナミックストップとダイナミック加仓の論理を設定する.価格が下下軌道から反発してブリン帯の中間軌道を破るとき,戦略は上昇傾向が形成されると考え,この時戦略は価格が中間軌道に一定割合で戻ったときに加仓する.価格が最終的にブリン帯の上下軌道に突破したとき,戦略平仓は利益を得て終了する.下下走勢では,戦略は逆の操作の論理をとる.ブリン帯のダイナミックストップとダイナミック加仓を介して,この戦略はトレンドの動きの中でより多くの利益を得ることができる.
この戦略の基本原則は以下の通りです.
ブリン帯の上線,中線,下線を計算する.上線と下線の計算式は,中線加減標準差のN倍であり,Nはカスタマイズできる.
閉盘価格がブリン帯の下線に落下し,前には開口していない時,多ポジションを打つ戦略;閉盘価格がブリン帯上線に突破し,前には開口していない時,空きポジションを打つ戦略。ここでの開口ポジションの論理は,従来のブリン帯突破システムに似ています。
ポジション開設後,閉店価格がブリン帯中軌を上方突破した場合,上昇傾向が形成されたと考えられ,変数 basisCrossed を true としてマークします. ポジション開設後,閉店価格がブリン帯中軌を下方突破した場合,また basisCrossed を true としてマークします.
多頭状況では,閉店価格が下落し,basisCrossedが true であり,現在の価格が元の開場価格より 2% 以上の下落した場合,このとき戦略は,ベースCrossedを false に再設定する.空頭状況は,その逆である.ここでの加仓ロジックは,戦略がトレンドが逆戻りする時に低位加仓をさせ,利益の余地を増やすことができる.
複数頭ポジションで閉店価格がブリン帯を突破し,空頭ポジションで閉店価格がブリン帯を下落させると,戦略はすべてのポジションを平らにして,利潤を集めて,各標識変数をリセットして,次のポジション開設の準備をする.
上述の動的なポジション開き,ポジション加減,ストップの論理により,この戦略は,トレンドの状況で柔軟に操作し,より高い利益を得ることができます. ブリン帯というクラシックな技術指標を介してトレンドを捕捉すると同時に,この戦略には一定の適応性と安定性があります.
ダイナミックストップ:この戦略はブリン帯を下線にすることでストップを動的に調整し,固定ポイントストップと比較して,市場の波動に適応し,利潤を柔軟に守ることができる.
動的加仓:トレンドが形成された後,撤回段階では,戦略は徐々に加仓し,トレンドの状況でより高い利益を得ることができます.動的加仓は,この戦略をトレンドの取引でより優位にします.
パラメータの柔軟性: ブリン帯のパラメータは,N,P値など,異なる市場特性と取引スタイルに合わせて柔軟に調整できます.
適応性: ブリン帯は,トレンドを捉える優れた能力を持つ古典的な技術指標である.ダイナミックなポジション管理と組み合わせると,さまざまな金融市場で安定した効果を発揮することができる.
論理的明瞭性:この戦略のポジション開設条件とポジション増減の論理は非常に明瞭で,トレーダーが理解し,掌握しやすくなります.明確な論理は,二次開発と戦略の最適化も容易になります.
振動市場:ブリン帯戦略は振動市場ではよくうまく行かない.このとき,頻繁に開拓するポジションは,取引コストが高くなり,総利益に影響する.
トレンド転換:トレンド転換の重要な瞬間に,この戦略は判断遅れになり,誤った方向でポジションを上げ,その結果,より大きな引き下がりを生み出す可能性があります.
極端な状況: 極端な状況 (暴風雨の暴落など) で,ブリン帯の動きが異常になり,この戦略が効かなくなる可能性があります.
パラメータ設定:不適切なパラメータ設定は,この戦略のパフォーマンスに重大な影響を及ぼします.例えば,N値が小さすぎると,頻繁に取引が起こります.N値が大きすぎると,信号遅れが起こります.
ブラック・スイーン事件:この戦略は,大きな政治・経済的な事件が起きた場合,大きなリスクの余地がある可能性がある.
上記のリスクに対して,2つの側面から制御を始めることができる:1) 合理的な設定パラメータ,異なる指標と市場状態に対してパラメータ最適化;2) 戦略にトレンド判断,波動率フィルターなどのフィルタリング条件を追加し,信号の質を向上させる.また,実際の適用では,ポジション制御とリスク管理をよくし,単一取引のリスクを厳格に制御する必要があります.
トレンドフィルター:ポジション開設時にトレンド判断の論理を添加する.例えば,多頭MAを多頭フィルター条件として並べ,空頭MAを空頭フィルター条件として並べ,このようにトレンド把握の成功率を向上させることができる.
波動率フィルター:ブリン帯は実際には波動率指標であり,ATR,歴史波動率などの指標を導入することで市場の波動状態を識別することができ,高波の状態ではポジションを適切に低下させ,低波の状態ではポジションを拡大させ,リスクをよりよく制御することができる.
動的パラメータ最適化:ブリン帯のパラメータは,市場の状況に応じて動的に調整することができる.例えば,トレンドの状況ではN値を増やし,震動の市場では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