単一移動平均交差ボリンジャーバンド戦略


作成日: 2023-12-22 14:10:14 最終変更日: 2023-12-22 14:10:14
コピー: 1 クリック数: 491
1
フォロー
1237
フォロワー

単一移動平均交差ボリンジャーバンド戦略

概要

この戦略は,単一均線とブリン帯の指標に基づいており,価格がブリン帯を突破して上線または下線するとき,買入または売却を行う.また,均線の方向判断のトレンドを組み合わせて,均線が上昇するときにのみ買入し,均線が低下するときにのみ売却する.

戦略原則

この戦略は以下の指標によって判断されます.

  1. 平均線 ((SMA):CLOSEの終了価格のシンプル移動平均を計算し,価格の傾向を表します.
  2. ブリン帯は軌道上:仰角抵抗線を表し,その線を突破することは強い突破を表す.
  3. ブリン線下落: サポートラインを表し,その線を下落することはトレンドの逆転の可能性を示します.

具体的取引シグナルは以下の通りです.

  1. 買入シグナル:閉盤価格がブリン帯を突破して軌道に乗ったとき,平均線が上昇状態にあるとき,買入を行う.
  2. 売出シグナル: 閉盘価格がブリン帯下線に下落し,均線が下落状態にあるとき,売出を行う.

この方法では,トレンドとブレークを組み合わせて,取引シグナルを信頼性のあるものにして,偽のブレークを回避します.

戦略的優位性

  1. 規則はシンプルで明快で,理解し実行しやすい.
  2. 平均線を使って大トレンドの方向を判断し,空白の牛市や多額の熊市を避けましょう.
  3. ブリンが上下線で局所的な突破点を判断し,突破信号を正確に捕捉した.
  4. 引き下げは比較的小さく,ほとんどの人のリスク偏好に合致します.

戦略リスク

  1. 単一の指標は誤り信号を容易に発し,最適化パラメータによって誤り率を低減することができる.
  2. 大規模な市場動揺に対応できない場合,ストップポイントを適正に調整できます.
  3. 市場が大きくて利益を得られない場合,ポジションの拡大を検討する.

戦略の最適化

  1. 平均線周期パラメータを最適化して,より多くの品種に適応する。
  2. MACDなどの他の指標のフィルターを追加して,誤信号を減らす.
  3. 動的にストップポイントを調整し,最大撤退を制限する.
  4. 資金管理の理念を組み合わせて,利益と損失を平らにする.

要約する

この戦略は全体的に比較的シンプルで実用的で,ほとんどの人のために適しています.いくつかの最適化調整によって,戦略をより粗に,より多くの市場状況に適応させることが推奨される戦略です.

ストラテジーソースコード
/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="single sma cross", shorttitle="single sma cross",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,overlay=true,currency="USD")
s=input(title="s",defval=90)
p=input(title="p",type=float,defval=.9,step=.1)

sa=sma(close,s)
plot(sa,color=red,linewidth=3)
band=stdev(close,s)*p
plot(band+sa,color=lime,title="")
plot(-band+sa,color=lime,title="")

// ===Strategy Orders============================================= ========
inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na

longCondition = crossover(close,sa+band) and rising(sa,5)
shortCondition = crossunder(close,sa-band) and falling(sa,5)
crossmid = cross(close,sa)


strategy.entry(id = "Long", long=true, when = longCondition)
strategy.close(id = "Long", when = shortCondition)
strategy.entry(id = "Short", long=false, when = shortCondition)
strategy.close(id = "Short", when = longCondition)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=crossmid)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=crossmid)