ボリンジャーバンドのゴールデンクロスとデッドクロス戦略


作成日: 2023-11-23 14:01:57 最終変更日: 2023-11-23 14:01:57
コピー: 0 クリック数: 548
1
フォロー
1617
フォロワー

ボリンジャーバンドのゴールデンクロスとデッドクロス戦略

概要

この戦略は,ブリン帯の金叉死叉に基づく多空の策である.価格がブリン帯を突破して上線したとき,空白する.価格がブリン帯を突破して下線したとき,多空する.ポジション保持期間中は,加仓とストップ損失追跡が行われる.

戦略原則

この戦略は,ブリン帯の上下3つの軌道を用いる.ブリン帯の中央軌道はn日の移動平均で,上軌道は中軌道の+k倍のn日の標準差で,下軌道は中軌道の-k倍のn日の標準差である.nは一般的に20であり,kは一般的に2である.

価格が上から下を突破すると,価格が上昇し始めたことを示す,このとき,多めに;価格が上から下を突破すると,価格が下を突破し始めたことを示す,このとき,空きをする.

負債の引き上げは,すでに保有しているポジションに基づいて行われ,価格が再び平均線に触れた場合,再び負債の引き上げまたは空白を行う.

すべての保有者のストップ・トラッキングもリアルタイムで更新されます.ストップ・ラインは,現在の保有者の平均価格とブリン帯価格の差値に基づいて設定されます.

優位分析

この戦略の利点は以下の通りです.

  1. ブリン帯の指数を使って,価格の突破を捉え,多空を正確に行う
  2. 黄金叉死叉法による入院の規則化
  3. 投資家は,投資先の利益を得るために,投資先の利益を増やすことができます.
  4. ストップダメージをリアルタイムで更新し,ストップダメージが衝撃を受けないようにします.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. ブリン・バンドは市場変動に敏感で,利回りになりかねない指標である.
  2. 投資はリスクの拡大に繋がり,損失は拡大される
  3. ストップダメージラインは絶対的ではないが,隠された可能性もある.

これらのリスクに対して,以下のように最適化できます.

  1. ブリン帯のパラメータを異なる周期に対応するように調整する
  2. ポジションの幅と頻度を最適化する
  3. 中央線を追加し,さらなる止損線となる.

最適化の方向

この戦略は以下の点で最適化できます.

  1. ブリン帯のパラメータを最適化し,より多くの市場環境に適応する
  2. リスクとリターンのバランスをとる
  3. 中道停止などの止損線を増やす
  4. 予防策を増やし,予防策を積極的に取ろう
  5. 他の指標と組み合わせた入場時刻をフィルターする
  6. 資金管理の最適化と単一リスクの管理

要約する

この戦略は,全体として典型的なトレンド追跡戦略である。それは順番を踏まえて,トレンドが発生したときに利益を得ることができる。同時に,ある程度のリスクも伴う.さらなる最適化と改善が必要であり,より多くの市場状況に適応し,偽突破によるリスクを減らす必要がある。

ストラテジーソースコード
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title='Bollinger Band strategy with split, limit, stop', shorttitle='bb strategy', overlay=true,commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, pyramiding = 4)



//Summary: Going Long or Short when Entering after Breaking the Bollinger Bands\
//At this time, the stop-loss, profit-taking price, and pyramiding standard\
// are determined from the difference between the position average price and the band price.

//After entering the position, if the price crosses the mid-band line, the stop loss is adjusted to the mid-band line.



//each trade, entry position size = 10% of total cash
//max pyramiding is 4
//commission = 0.01%





in_period = true


bb_length = input.int(20)
bb_mult = input.int(2)

[middle, upper, lower] = ta.bb(close,bb_length, bb_mult)
plot(middle, color=color.aqua)
plot(upper, color=color.orange)
plot(lower, color=color.orange)
long_cond = ta.crossover(close,lower)
short_cond = ta.crossunder(close,upper)

var saved_ph = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size > 0
    saved_ph := upper[1]
var saved_pl = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size < 0
    saved_pl := lower[1]

avg = strategy.position_avg_price

long_diff = saved_ph-avg
short_diff = saved_pl-avg

long_stoploss = avg - 1*long_diff
short_stoploss = avg - 1*short_diff

long_avgdown = avg - 0.5*long_diff
short_avgup = avg - 0.5*short_diff

long_profit_price = avg + 0.5*long_diff
short_profit_price = avg + 0.5*short_diff

var label _label = na
if in_period
    if long_cond and strategy.opentrades==0
        strategy.entry("Long",strategy.long)
    if long_cond and strategy.opentrades >0 and (close[1]<long_avgdown or close[2]<long_avgdown)
        strategy.entry("Long",strategy.long)

    if short_cond and strategy.opentrades==0
        strategy.entry("Short", strategy.short)
    if short_cond and strategy.opentrades>0 and (close[1]>short_avgup or close[2]>short_avgup)
        strategy.entry("Short",strategy.short)

plot(avg, style=plot.style_linebr)


plot(strategy.position_size > 0? long_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0? long_avgdown: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size > 0? long_stoploss: na,color=color.red, style=plot.style_linebr)

plot(strategy.position_size < 0? short_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0? short_avgup: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size < 0? short_stoploss: na,color=color.red, style=plot.style_linebr)

if strategy.position_size > 0
    if ta.crossover(close, middle)
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=middle)
    else
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=long_stoploss)
if strategy.position_size < 0
    if ta.crossunder(close, middle)
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=middle)
    else
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=short_stoploss)