BB21_SMA200 戦略をフォローする傾向

作者: リン・ハーンチャオチャン,日付: 2023-11-16 11:04:42
タグ:

img


概要

この戦略は,ボリンジャーバンドと移動平均を組み合わせて,トレードシステムをフォローするトレンドをデザインする.価格がボリンジャーバンドの上部バンドを突破し,下部バンドがSMA200を超えるとロングになり,価格が下部バンドを突破すると部分的なポジションを閉じて,価格がSMA200を下回るとすべて退場する.この戦略はトレンドをフォローし,トレンドが変化するときに時間内に損失を削減する.

戦略の論理

  1. 主なトレンドを決定するために,指数関数移動平均としてSMA200を計算します.
  2. 上部帯,中部帯,下部帯を含むボリンガー帯を計算し,利益範囲として色を記入します.
  3. 上下両帯がSMA200を超えると上昇傾向を示します
  4. 価格がボリンジャー帯の中央帯を突破すると,長引く.
  5. 価格が下方帯を突破すると,部分的なポジションを閉じる.
  6. 価格がSMA200を下回ると,主要トレンドの逆転を示します. すべてのポジションを閉じる.
  7. 過剰な損失を防ぐために停止損失点を設定します.
  8. 取引規模を計算する際,口座資本と可承リスクに基づいて計算する.

このトレンドを特定する戦略の前提は,ボリンジャー帯がSMA200を完全に上回り,明らかに上昇傾向が示された場合にのみ長引くということです.ダウントレンドが起こると,リスクは部分ストップ損失と完全なストップ損失によって制御されます.

利点分析

  1. 明確なトレンドを特定するために,単一の指標の代わりにボリンジャー帯を使用します.
  2. SMA200は主要なトレンド方向を決定し,範囲限定市場での不必要な取引を回避します
  3. トレンドランスをフォローする部分的なストップ損失
  4. 損失を最小限に抑えるための重要なポイントで時速ストップ損失
  5. 取引サイズを計算する リスク管理を導入する 単一の取引で過度の損失を防ぐ

リスク分析

  1. ボリンジャー・バンドから生成されるブレイクアウト・シグナルには,比較的高い偽信号がある可能性があります.
  2. 初期停止損失を防ぐために,部分停止損失点を最適化する必要があります.
  3. ストップ・ロスのポイントが狭すぎると,ストップ・ロスは頻繁すぎます.
  4. 遅延と感受性をバランスさせるため,SMA期間をテストし最適化する必要があります.
  5. 取引のサイズを計算する方法は,単一の取引で過剰なサイズを防ぐために最適化が必要かもしれません.

これらのリスクは,ボリンジャー・バンドのパラメータを慎重にテストし,部分ストップ損失戦略を最適化し,SMA期間を調整し,より科学的リスク管理方法を導入することで軽減できる.

オプティマイゼーションの方向性

  1. 偽信号を低減するためにボリンジャーバンドのパラメータをテストし最適化します
  2. 適切な部分停止損失点を設定する方法の研究
  3. 最適のSMA期間をテストする
  4. 固定ストップ・ロストポイントの代わりに適応型ストップを検討する
  5. より科学的な取引サイズ計算のために波動性に基づくポジションサイジングを用いた研究
  6. 実際の取引をシミュレートするための取引コストのバックテスト
  7. 戦略の安定性を高めるために他の指標と組み合わせることを検討する

結論

この戦略は,ボリンジャーバンドとSMAを統合して,比較的完全なトレンドフォローシステムを作成する.トレンドの存在を特定するのに信頼性があり,強力なトレンド追跡能力を持っています.ストップ損失戦略を継続的に最適化し,信号エラーを削減し,科学的リスク管理技術を導入することで,この戦略はライブ取引で追跡する価値のあるシステムになることができます.量的な取引戦略設計のための複数の指標を組み合わせるアプローチを提供します.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
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="BB9_MA200_Strategy", overlay=true, pyramiding=1,     default_qty_type=strategy.cash,  initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed, 


var stopLossVal=0.00

//variables BEGIN
smaLength=input(200,title="MA Length")
bbLength=input(21,title="BB Length")  

bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")


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

riskCapital = input(title="Risk % of capital  == Based on this trade size is claculated    numberOfShares = (AvailableCapital*risk/100) / stopLossPoints", defval=10, minval=1)


sma200=ema(close,smaLength)

plot(sma200, title="SMA 200", color=color.orange)


//bollinger calculation
basis = sma(bbsrc, bbLength)
dev = mult * stdev(bbsrc, bbLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)


strategy.initial_capital = 50000

//Entry---

strategy.entry(id="LE", comment="LE capital="+tostring(strategy.initial_capital + strategy.netprofit ,"######.##"), qty=( (strategy.initial_capital + strategy.netprofit ) * riskCapital / 100)/(close*stopLoss/100) , long=true,  when=strategy.position_size<1 and upperBand>sma200 and lowerBand > sma200 and crossover(close, basis) )     //  // aroonOsc<0  //(strategy.initial_capital * 0.10)/close


barcolor(color=strategy.position_size>=1? color.blue: na)

//partial Exit
tpVal=strategy.position_size>1 ? strategy.position_avg_price * (1+(stopLoss/100) ) : 0.00
strategy.close(id="LE", comment="Partial points="+tostring(close - strategy.position_avg_price, "####.##"),  qty_percent=30 , when=abs(strategy.position_size)>=1 and close>tpVal and crossunder(lowerBand, sma200)   )   //close<ema55 and rsi5Val<20 //ema34<ema55


//close All on stop loss
//stoploss
stopLossVal:=   strategy.position_size>1 ? strategy.position_avg_price * (1-(stopLoss/100) ) : 0.00

strategy.close_all( comment="SL Exit points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close < stopLossVal  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89//

strategy.close_all( comment="BB9 X SMA200 points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and  crossunder(basis, sma200)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89
    

もっと