この戦略は,ボリンジャーバンドと移動平均を組み合わせて,トレードシステムをフォローするトレンドをデザインする.価格がボリンジャーバンドの上部バンドを突破し,下部バンドがSMA200を超えるとロングになり,価格が下部バンドを突破すると部分的なポジションを閉じて,価格がSMA200を下回るとすべて退場する.この戦略はトレンドをフォローし,トレンドが変化するときに時間内に損失を削減する.
このトレンドを特定する戦略の前提は,ボリンジャー帯がSMA200を完全に上回り,明らかに上昇傾向が示された場合にのみ長引くということです.ダウントレンドが起こると,リスクは部分ストップ損失と完全なストップ損失によって制御されます.
これらのリスクは,ボリンジャー・バンドのパラメータを慎重にテストし,部分ストップ損失戦略を最適化し,SMA期間を調整し,より科学的リスク管理方法を導入することで軽減できる.
この戦略は,ボリンジャーバンドと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