ボリンジャー帯に基づく指数取引戦略

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

img

概要

この戦略は"ボリンジャーバンドベースの量子トレーディング戦略"と呼ばれる.これは改善されたボリンジャーバンドチャネルに基づいた指数と株式取引戦略である.ボリンジャーバンドパラメータを調整することによって,上向きと下向きの市場の両方で利益を得るためのロングとショートポジションの両方の最適化を実現する.

取引の論理

この戦略のコア論理は,中間線,上帯,下帯からなるボリンジャーバンドチャネルに基づいています.中間線は,n日間の閉店価格の移動平均です.上帯と下帯は,中間線の上下からの偏差です.価格が上帯に近づくと,市場は過熱になり,ショートチャンスが起こり得ることを示します.価格が下帯に近づくと,市場は過低評価され,長いチャンスが起こり得ることを示します.

この戦略は,ボリンジャーバンドを2つ使用する.ボリンジャーバンド1はロングトレードに適し,ボリンジャーバンド2はショートトレードに適している.ボリンジャーバンド1のパラメータは長さ25倍,偏差2.9倍で最適化されている.ボリンジャーバンド2のパラメータは長さ36倍,偏差3.2倍で最適化されている.閉じる価格がボリンジャーバンド1の下帯を超えると,ロング信号を生成する.閉じる価格がボリンジャーバンド2の上帯を下回ると,ショート信号を生成する.

利点分析

伝統的なボリンジャー・バンド戦略と比較して,この戦略には以下の利点があります.

  1. ロングとショートの両方の双方向取引を実現し,異なる市場段階での取引機会を利用できます.

  2. パラメータは最適化され,トレード信号を効果的に生成するために,ボリンジャーバンドのパラメータの2つのセットが精密にテストされます.

  3. リスクは制御可能で 移動ストップロスの方法は一方的なリスクを効果的に制御できます

リスク分析

この戦略にはいくつかの潜在的なリスクもあります.

  1. ボリンジャー・バンドの無効性リスク 市場変動が激烈なときにボリンジャー・バンドが無効になる可能性があります

  2. ストップ・ロスのリスクは,ストップ・ロスを拡大するために移動するストップ・ロスは,ストップ・ロスを適切に拡大したり,このリスクを回避するためにタイムリーストップアウトしたりすることができます.

  3. 取引頻度の高いリスク.過度に敏感なパラメータは,頻繁に取引し,取引コストの増加につながる可能性があります.

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

この戦略をさらに最適化できる余地があります.

  1. 他の指標を組み合わせてシグナルをフィルタリングし,ボリンジャーバンドが失敗すると間違った取引を避ける.例えばK線パターン,取引量など.

  2. ダイナミックにパラメータを調整し,異なる期間の市場特性に適合します.例えば,適応ボリンジャー帯を使用します.

  3. リスクを効果的に制御するために,ストップ損失を遅延するストップ損失または指数的な移動ストップ損失を使用してストップ損失方法を最適化します.

  4. マシン学習アルゴリズムを組み合わせて パーマータを自動的に最適化します

概要

概要すると,この戦略は,二重ボリンジャーバンドチャネルとパラメータ最適化に基づいた長方と短方の両方の双方向取引を全体的に最適化します.従来のボリンジャーバンド戦略と比較して,双方向取引とリスク管理の利点があります.それは異なる市場段階での機会を掴むのに適しており,一定の実用的な価値があります.しかし,ボリンジャーバンドの失敗やストップ損失のようなリスクはまだ存在しています.生産化する前にさらなる最適化と検証が必要です.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

//@version=4
strategy("BB NDX strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick = true, commission_type = strategy.commission.percent, commission_value = 0.01)

source = close
length = input(25, minval=1, title="Length BB long")
mult = input(2.9, minval=0.001, maxval=50, step=0.1, title="MULT BB long")

length2 = input(36, minval=1, title="Length BB short")
mult2 = input(3.2, minval=0.001, maxval=50, step=0.1, title="MULT BB short")


basis = sma(source, length)
dev = mult * stdev(source, length)
dev2 = mult2 * stdev(source, length2)

upper = basis + dev2
lower = basis - dev

buyEntry = crossover(source, lower)
sellEntry = crossunder(source, upper)

longEntry=input(true)
shortEntry=input(true)

g(v, p) => round(v * (pow(10, p))) / pow(10, p)
risk     = input(100)
leverage = input(1.0, step = 0.5)
c = g((strategy.equity * leverage / open) * (risk / 100), 4)


tplong=input(0.065, step=0.005, title="Take profit % for long")
sllong=input(0.04, step=0.005, title="Stop loss % for long")
tpshort=input(0.025, step=0.005, title="Take profit % for short")
slshort=input(0.04, step=0.005, title="Stop loss % for short")

if(longEntry)
    strategy.entry("long",1,c,when=buyEntry)
    strategy.exit("short_tp/sl", "long", profit=close * tplong / syminfo.mintick, loss=close * sllong / syminfo.mintick, comment='LONG EXIT',  alert_message = 'closeshort')
    strategy.close("long",when=sellEntry)
if(shortEntry)
    strategy.entry("short",0,c,when=sellEntry)
    strategy.exit("short_tp/sl", "short", profit=close * tpshort / syminfo.mintick, loss=close * slshort / syminfo.mintick, comment='SHORT EXIT',  alert_message = 'closeshort')
    strategy.close("short",when=buyEntry)




もっと