BBチャネルを横切り、SMA200移動平均を突破するトレンドフォロー戦略


作成日: 2023-11-16 11:04:42 最終変更日: 2023-11-16 11:04:42
コピー: 0 クリック数: 700
1
フォロー
1617
フォロワー

BBチャネルを横切り、SMA200移動平均を突破するトレンドフォロー戦略

概要

この戦略はブリン帯と移動平均を組み合わせて,トレンドを追跡する取引システムを設計した. 価格がブリン帯を突破して軌道上になり,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周期パラメータの最適値
    1. 固定ストップの代わりとして自主ストップの導入を検討する
  4. 取引規模を科学的に計算するための変動率定数を導入する研究
  5. トランザクションコストへの再計測をシミュレートする
  6. 戦略の安定性を高めるために,他の指標の組み合わせで検討

要約する

この戦略は,ブリン帯通路と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