移動平均ブレイクとボリンジャーバンドブレイク戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-19 14:18:00
タグ:

img

概要

この戦略は,RSIインジケーターを使用して 過買い・過売の信号,ボリンジャー帯で価格ブレイクを決定し,移動平均クロスオーバーを使用して,市場を異なるトレンド段階で判断し,利益を得ることを組み合わせています.

戦略の論理

戦略は以下の主要指標からなる.

  1. RSI インディケーター: RSI 線が過買い値を超えたり過売り値を下回ったとき,それに応じて長または短取引が行われます.

  2. ボリンジャーバンド:価格がボリンジャー上部バンドを突破すると,ショートトレードが行われます.価格がボリンジャー下部バンドを突破すると,ロングトレードが行われます.

  3. 移動平均: 特定の期間の (例えば5期間の) 最高値と最低値が計算されます. 過去5期間の最高値よりも価格が高くなった場合,ロングトレードが行われます. 過去5期間の最低値よりも価格が低くなった場合,ショートトレードが行われます.

  4. MACD:速線,スローライン,MACDラインのクロスオーバーとデスクロスが補助判断指標として使用されます.

これらの指標は,トレンドとコンソリデーション段階における市場を判断するために一緒に働きます.ボリンジャー帯は,ブレイクアウトと平均へのリバースを特定します.移動平均は,コンソリデーション中にトレンド逆転点を決定します.RSI極端は,反トレンド取引のための過剰購入/過剰販売の市場条件を特定します.

利点分析

この戦略の利点は次のとおりです.

  1. 複数の指標の組み合わせにより,精度が向上します.RSI,ボリンジャー帯,移動平均など,信頼性の高い取引信号を生み出すために相互作用します.

  2. 異なる市場条件に適用可能.トレンドのためのボリンジャー帯,統合のための移動平均,極端のためのRSI.柔軟性が確保されています.

  3. 合理的な取引頻度 過剰な取引を避けるために指標パラメータは保守的に設定されています

  4. シンプルなコード構造で 簡単に理解し 編集し 構築できます

リスク分析

いくつかのリスクには注意が必要です:

  1. パラメータリスク.不適切な指標パラメータは,不正な取引信号を生む可能性があります.パラメータは継続的なテストと最適化が必要です.

  2. ロング・ショート・スイッチリスク.トレンド逆転の際に頻繁にロング・ショート・ポジションが変化すると,取引コストが上昇する.保有期間を調整することができる.

  3. コードに隠された論理的欠陥が異常な取引につながります.例外処理とログアップを改善する必要があります.

最適化

戦略は次の側面で向上することができる:

  1. ストップロスを追加して 利益を固定し 損失を減らす

  2. 誤った信号を避けるために取引量を組み込む.例えば,ボリンジャーブレイクに関する取引量をチェックする.

  3. 機械学習を導入して 過去データに基づいて最適なパラメータを見つけます

  4. 性能を直感的に表示するためのグラフィックインターフェースを構築します

  5. バックテストを行い 最適なパラメータの組み合わせを見つけます

結論

この戦略は,移動平均値,ボリンジャーバンド,RSIなどを組み合わせて取引信号を生成する.その汎用性と精度は明確な強みであり,パラメータ設定とコーディングリスクは管理する必要がある.次のステップはストップを追加すること,パラメータ最適化のための機械学習,モニタリングのためのGUI,例外処理を改善することです.


/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MD strategy", overlay=true)
lengthrsi = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close
source = close
lengthbb = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
direction = input(0, title = "Strategy Direction",minval=-1, maxval=1)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
consecutiveBarsUp = input(3)
consecutiveBarsDown = input(3)
lengthch = input( minval=1, maxval=1000, defval=5)
upBound = highest(high, lengthch)
downBound = lowest(low, lengthch)



ups = price > price[1] ? nz(ups[1]) + 1 : 0
dns = price < price[1] ? nz(dns[1]) + 1 : 0
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

basis = sma(source, lengthbb)
dev = mult * stdev(source, lengthbb)

upper = basis + dev
lower = basis - dev

vrsi = rsi(price, lengthrsi)

if (not na(vrsi))
    if (crossover(vrsi, overSold))
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    if (crossunder(vrsi, overBought))
        strategy.entry("RsiSE", strategy.short, comment="RsiSE")

if (crossover(source, lower))
    strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="BBandLE")

if (crossunder(source, upper))
    strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
    strategy.cancel(id="BBandSE")
    
    
if (not na(close[lengthch]))
    strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE")
    strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")
    
    
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

もっと