モメンタムブレイクアウトボリンジャーバンド取引戦略


作成日: 2024-02-05 10:53:46 最終変更日: 2024-02-05 10:53:46
コピー: 0 クリック数: 699
1
フォロー
1617
フォロワー

モメンタムブレイクアウトボリンジャーバンド取引戦略

概要

この戦略はブリン帯の指標と取引量指標を組み合わせて,高い取引量環境で,ブリン帯を突破して軌道に乗る強大な機会を識別し,買取操作を行う.移動平均指標を組み合わせて,トレンドの方向を決定し,死守ポジションのリスクを減らす.

戦略原則

  1. ブリン帯の指標を用いて,価格がブリン帯を突破したかどうかを判断する.
  2. 取引量指標を用いて,現在の取引量が過去の一時期の平均取引量より明らかに高いかどうかを判断する.
  3. 取引量が活発で,価格がブリンを突破して軌道に乗った場合,買取操作を行う.
  4. 移動平均の指標を用いて短期および中期トレンドを判断し,トレンドが不利なときに適時に平仓を停止する.

この戦略は主に3つの側面の要因を考慮します:価格,動量およびトレンド.価格がブリンを突破して買い領域に入ると,大量の資金の流れが取引量の急増を引き起こし,強力なトレンドサポートと動きがあることを示し,その時にポジションを多く開きます.そして,移動平均と組み合わせてトレンドの動きを判断し,死守ポジションを避ける.価格選択,資金のタイムリー追跡および空置のリスクを減らす方法によって,トレンドのもたらす利益を得ます.

戦略的優位性

  1. 取引信号は正確で,偽の突破を避けます.取引量指標と組み合わせて,真の強さの状況でのみ購入し,ポジションのリスクを軽減します.

  2. 移動平均でトレンドの方向を判断することで,空き仓の損失を減らすことができます.

  3. 多種多様な指標を統合した意思決定のための量化戦略を実現し,パラメータは異なる品種と周期に合わせて柔軟に調整できます.

  4. コード構造が明確で,策略の読みやすさを増した.分別モジュールで指数計算,取引シグナル,開平倉のロジックなどを組織し,後期維持を容易にした.

戦略リスク

  1. ブリン帯は波動範囲の指標として,極端な状況には有効ではない.異常な波動が発生した場合,買取信号を逃すか,偽信号を生成する.

  2. 取引量が不足すると,戦略は利益を得ることができない.市場全体の取引量が不足すると,購入シグナルを生成しても利益を得ることが困難である.

  3. 移動平均はトレンド判断の指標として機能しなくなることもあり,完全には止損を保証できない.

  4. パラメータの設定が不適切であることも戦略の利益に影響する.例えば,取引時間ウィンドウがあまりにも短く設定され,トレード反転が逃れることなどである.

戦略最適化の方向性

  1. より多くの判断トレンド,抵抗位をサポートする技術指標,K線形状,通路指標,重要な支柱位など,止損効果を向上させることを考慮することができます.

  2. 機械学習モデルの真の突破を判断する可能性を高め,偽信号率を下げる.例えばLSTMなどの深層学習モデル.

  3. ポジションを動的に調整し,ストップラインを追跡するなど,資金管理戦略の最適化.単一の損失の影響を減らす.

  4. より多くの品種と時間周期のパラメータをテストする. ブリン帯のパラメータ,取引量パラメータなどを調整し,市場への適応戦略を最適化する.

要約する

この戦略は,ブリン帯指数と取引量指数を統合し,強気な状況で購入のタイミングを識別する.同時に,移動平均指数を使用してトレンドを判断し,タイムリーで止まる.単一の技術指標と比較して,より高い精度と止まる能力を有する.モジュール化設計,トレンド判断と止まる戦略の付加により,最適化され,維持しやすい突破取引戦略を形成する.

ストラテジーソースコード
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
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/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, 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)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")