Bollinger Bands をベースにした高周波取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月21日15時37分07秒
タグ:

img

概要

この戦略は,ボリンジャーバンド指標に基づく高周波取引戦略を実装する.価格の標準偏差と移動平均を計算することによって上下ボリンジャーバンドを決定する.価格が中間帯に触ると,ロングまたはショートトレードが実行される.各取引は0.5%の利益範囲ですべての資本を投資する.この戦略は,非常に不安定な取引ペアと手数料なしで取引に適している.

戦略の論理

この戦略は,価格が過剰購入または過剰販売レベルに達したかどうかを判断するためにボリンジャーバンド指標を使用する.バンドは上帯,下帯,中帯から構成される.中帯は価格の単純なn日移動平均である.上帯は中帯プラスk倍 n日標準偏差値である.下帯は中帯マイナスk倍標準偏差値である.kは通常2に設定される.価格が上帯に近づくと,過剰購入を示す.価格が下帯に近づくと,過剰販売を示す.

この戦略では,ボリンジャー期間を20日,kを2に設定する.価格が中間帯に触ると,価格が極端な領域から逆転することを信号し,取引信号を生成する.価格が中間帯を超えるとロング信号が起動する.価格が中間帯を下回るとショート信号が起動する.

ポジションを入力する際に,すべての資本が投資されます (株式および変動利益/損失を含む). 0.5%の利益範囲が設定されます.価格が0.5%を超えると,ポジションは利益のために閉鎖されます.

利点分析

この戦略の利点は次のとおりです.

  1. 取引シグナルを識別するためにボリンジャーバンドを使用することは,単純な移動平均値よりも極端値を検出するのに効果的です.

  2. 高周波アプローチは 短い取引周期で 迅速に利益を得ます

  3. 資本を全部投資すれば 利益の可能性を最大化できます

  4. 利得の範囲を設定することで リスクと利益が効果的に管理されます

リスク分析

リスクもあります:

  1. ボリンジャー帯は入力パラメータに敏感です 間違った設定は誤った信号を生成します

  2. 高周波取引にはゼロ料金取引が必要で そうでなければ利潤が損なわれます

  3. 資本を全部投資するのはリスクが高い ブラック・スワン事件は大きな損失を招くかもしれない

  4. 利得の範囲が狭ければ 取引頻度と業務の複雑性が高まります

解決策:

  1. 理想的な設定を見つけるためにボリンガーパラメータを最適化します

  2. ビナンス・スポットのようなゼロ・フィー取引所を使います

  3. 最大損失を制限するためにストップ損失を設定します.

  4. 取引頻度を減らすために 利益の範囲を広げます

最適化

この戦略は,次の方法で改善できます.

  1. バランス・ボリュームをフィルタリングします

  2. 最良の組み合わせを見つけるためにボリンガーパラメータを最適化します

  3. アダプティブストップ・ロストとテイク・プロフィートの範囲を使用します.例えば,取引や勝利が蓄積するにつれて範囲が拡大します.

  4. 買い/売るシグナルを予測するための機械学習モデルを組み込む

  5. 基本値に基づいた 業績報告のような 大事なイベントの取引を避けます

結論

これは,信号生成,完全なポジションサイズ化,小規模な取利益のためにボリンジャーバンドを使用する高周波戦略である.収益性の利点があるが,パラメータの敏感性やリスク制御などの弱点もある.さらなる改善は,指標の強化,適応停止,機械学習などにより,戦略をより堅牢にすることができる.


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

//@version=5
strategy("Estrategia Bollinger Bands", shorttitle="BB Strategy", overlay=true)

// Parámetros de las Bandas de Bollinger
length = input(20, title="Longitud")
mult = input(2.0, title="Multiplicador")

// Calcula las Bandas de Bollinger
basis = ta.sma(close, length)
upper_band = basis + mult * ta.stdev(close, length)
lower_band = basis - mult * ta.stdev(close, length)

// Condiciones para realizar operaciones
price_touches_basis_up = ta.crossover(close, basis)
price_touches_basis_down = ta.crossunder(close, basis)

// Monto inicial de inversión
monto_inicial = 10

// Lógica de la estrategia
if (price_touches_basis_up)
    qty = strategy.equity + strategy.netprofit // Invertir el total del capital más las ganancias en cada operación
    direction = close > basis ? strategy.long : strategy.short
    strategy.entry("Operacion", direction, qty = 1)

// Lógica para cerrar la operación con un movimiento del 0.5% (take profit)
target_profit = 0.005 // Actualizado a 0.5%

if (strategy.position_size != 0)
    direction = strategy.position_size > 0 ? strategy.long : strategy.short
    strategy.exit("Take Profit/Close", from_entry = "Operacion", profit = close * (1 + target_profit))

// Dibuja las Bandas de Bollinger en el gráfico
plot(upper_band, color=color.blue, title="Upper Band")
plot(lower_band, color=color.red, title="Lower Band")
plot(basis, color=color.green, title="Basis")

// Muestra el monto inicial de inversión en la barra del título
var label lbl = label.new(na, na, "")
label.set_text(lbl, "Monto Inicial: $" + str.tostring(monto_inicial, "#.########"))
label.set_xy(lbl, bar_index, low)
label.set_color(lbl, color.new(color.blue, 0))


もっと