ボリンジャーバンド黄金比法に基づくバランス回帰取引戦略


作成日: 2023-11-16 16:52:55 最終変更日: 2023-11-16 16:52:55
コピー: 0 クリック数: 774
1
フォロー
1617
フォロワー

ボリンジャーバンド黄金比法に基づくバランス回帰取引戦略

概要

この策略は,ブリン帯の黄金分割線を利用して,均線形状判断と組み合わせて,回帰取引を行う.価格がブリン帯の黄金分割線に接触すると,購入信号として見,価格の均衡回帰特性を利用して利益を得る.

戦略原則

  1. ブリン帯の中線,上線,金分割下線を計算する
  • 中軌道:n周期の加重移動平均vwma
  • 上軌道:中軌道 + k * n周期の標準差
  • ゴールド分割下軌道:中軌道 - 0.618 * n周期の標準差
  1. 判断の形
  • 50日平均線を200日平均線に移動し,上昇傾向に合致する
  • 価格がゴールドの割れ目下線に接触し,またはそれ以下で購入シグナルとして使用
  1. 退出する
  • 価格が下線から戻ったと判断し,平仓した.
  1. ストップダスト
  • 固定パーセンテージのストップを設定します.

戦略的優位性

  1. ブリン帯の中線としてsmaではなくvwmaを使用すると,価格の移動傾向をよりよく反映できます.

  2. 黄金分割は重要なサポート/レジスタンス領域であり,これは回帰の基礎となる

  3. 平均線は多頭列で,大きな上昇傾向を保証します.

  4. 固定ストップは単一損失のコントロールを保証する

戦略リスク

  1. 黄金の分割線は確固たる支柱ではないので,価格が直ぐに下落する可能性がある.

  2. 固定ストップは過度に恣意的であり,市場の変動に応じて調整することを考慮する

  3. 均線多頭並びも偽突破である可能性があり,より多くの指標と組み合わせて判断すべきである.

  4. 回帰の長さは不確定で,合理的な停止点を設定する必要がある.

最適化の方向

  1. ブリン帯周期,標準差倍数,固定停止比率などの異なるパラメータの組み合わせをテストできます.

  2. MACD,KDなど,市場動向とリターン確率を判断する指標を追加できます.

  3. 動的ストップ,ATRによるストップまたは追跡ストップを考慮することができます.

  4. 移動止まりや分量止まりなどの止まり戦略を最適化できます.

要約する

この戦略は,ブリン帯金分割線を利用して平衡回帰取引を行うことで,取引論理の明確性,パラメータ設定の簡素性,撤回の制御性などの利点がある.しかし,一定のリスクも存在し,さらにテストと最適化,より多くの技術指標判断と止損/停止ツールを加えることで,実用化される必要がある.全体的に,この戦略は,金分割法を利用して量化取引を行うための考え方を提供しており,さらに探索する価値があります.

ストラテジーソースコード
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
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/
// © mohanee

//@version=4

strategy(title="Bollinger Band with Fib Golden Ratio (0.618)",  shorttitle="Bollinger Band with Fib Golden Ratio" , overlay=true, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  

length = input(50,title="BB Length" , minval=1)
src1 = input(hlc3, title="Source")
//mult1 = input(1.33, minval=0.001, maxval=50)
mult = input(1.5,title="multplier", minval=0.001, maxval=50)

stopLoss=input(5,title="Stop Loss",minval=1)

basis = vwma(src1, length)
dev = mult * stdev(src1, length)

//dev3 = mult3 * stdev(src, length)

upper_618= basis + (0.618*dev)
lower_618= basis - (0.618*dev)

//lower_618_dev3= basis - (0.618*dev3)



plot_upper618= plot(upper_618, color=color.purple, linewidth=2, title="0.618")
plot(basis, color=color.purple,style=plot.style_circles,  linewidth=2)

plot_lower618= plot(lower_618, color=color.purple, linewidth=2, title="0.618 entry")
//plot_lower618_dev3= plot(lower_618_dev3, color=color.red, linewidth=1, title="0.618 stop")

//plot_lower618= plot(lower_618, color=color.purple, linewidth=1, title="0.618 entry")

ema200=ema(close,200)
ema50=ema(close,50)

plot (ema200, title="ema200", color=color.orange, linewidth=2)
plot (ema50, title="ema50", color=color.blue , linewidth=2)


longCondition= ema50 > ema200

strategy.entry(id="BB_Fib618", long=true, when = longCondition and ( close < lower_618  or  low <= lower_618)  )

strategy.close(id="BB_Fib618",  comment="points="+tostring(close - strategy.position_avg_price,  "###.##") , when = strategy.position_size >= 1  and crossover(close,upper_618 )) 

//stoploss exit
stopLossVal = strategy.position_size>=1 ?  strategy.position_avg_price * ( 1 - (stopLoss/100) ) : 0.00
strategy.close(id="BB_Fib618", comment="SL="+tostring(close - strategy.position_avg_price,  "###.##"), when=abs(strategy.position_size)>=1 and close < stopLossVal ) //and close > strategy.position_avg_price )