移動平均クロスオーバーとボリンジャーバンドブレイクアウト戦略


作成日: 2024-02-19 14:18:00 最終変更日: 2024-02-19 14:18:00
コピー: 0 クリック数: 636
1
フォロー
1617
フォロワー

移動平均クロスオーバーとボリンジャーバンドブレイクアウト戦略

概要

この戦略は,RSI指標を利用して,超買超売シグナルを識別し,ブリン帯で価格突破を判断し,均線の金叉死叉形状を操作し,トレンドの異なる段階で市場を判断して,利益を上げます.

戦略原則

この戦略は以下の指標で構成されています.

  1. RSI指数:RSI指数線が設定されたオーバーバイラインを横切るとか,オーバーセールラインを横切ると,相応の多価または空調操作を行います.

  2. ブリン帯:価格がブリン帯を突破して上線するとき,空白操作を行います.価格がブリン帯を下線したとき,多操作を行います.

  3. 平均線:一定の周期 (例えば5周期) の内での最高価格と最低価格を計算し,価格が最近5周期の最高点より高いときは,多めにし,価格が最近5周期の最低点より低いときは,空っぽにする.

  4. MACD: 判断の補助指標として,Fast,Slow,MACDの金叉死叉を計算する.

これらの指標は相互に結合し,トレンドの状況では,ブリン帯を使用して価格の突破と回帰の中軸の時間点を判断します. 整合の状況では,均線判断の突破を使用してトレンド転換点を把握します. 超買い超売りの状況では,RSI指標の極値領域判断を使用して逆操作を行います.

優位分析

この戦略には以下の利点があります.

  1. 複数の指標の組み合わせにより,判断が精密である. RSI,ブリン帯,均線などの指標は相互検証され,取引信号がより信頼性が高くなります.

  2. 異なる状況に適している。 傾向の動きはブリン帯を利用し,整合の動きは平均線を利用し,超買い超売りの動きはRSIを利用し,複数の動きが対応できる。

  3. 操作頻度は適度である.指標パラメータの設定は慎重であり,頻繁な取引を避ける.

  4. プログラム構造が明確である.コードの書き込みの仕様は,読みやすく二次開発が容易である.

リスク分析

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

  1. パラメータ設定のリスク.指標のパラメータを正しく設定しない場合,取引シグナルが誤りになる可能性がある.パラメータを最適化するために繰り返しテストする必要があります.

  2. 多頭空頭交換リスク.市場転換点では多頭空頭交換がより頻繁になり,取引コストが増加する.所持時間を適切に調整することができる.

  3. プログラミングの実現リスク。コードには,検出に難しそうな論理的エラーが存在し,異常取引に繋がる。異常処理とログの記録を完善する必要がある。

最適化の方向

この戦略は以下の方向から最適化できます.

  1. 利潤を固定し,損失を減らすため,ストップ・ロスの策を導入する.

  2. 取引量指標と組み合わせて,偽信号を避ける.例えばブリン帯突破時に取引量をチェックする.

  3. 機械学習アルゴリズムを追加し,歴史データから訓練し,パラメータを自動的に最適化します.

  4. グラフィカルな表示が加えられ,戦略の実績を直感的に表示できます.

  5. テストを回帰して最適化し,最適なパラメータの組み合わせを選択します.

要約する

この戦略は,均線,ブリン帯,RSIなどの複数の指標を総合的に使用し,指標の組み合わせによって判断し,取引信号を形成する.戦略の優点は,適応性があり,判断が正確である.リスクは,パラメータ設定と手順で主に実現され,テストを継続的に最適化する必要があります.次に,この戦略を継続的に改善し,止損機構を追加し,機械学習訓練の最適なパラメータを利用し,グラフィカルインターフェースを開発し,監視と異常処理機能を完善する.

ストラテジーソースコード
/*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)