この戦略は,より多くの取引機会を発見するためのインプットとして異なる種類の移動平均値でボリンジャーバンドを構築する.最適なパラメータのための柔軟な組み合わせを可能にする12種類の移動平均値から選択できます.
この戦略の核心は,SMA,EMA,WMA,DEMA,TMA,VAR,WWMA,ZLEMA,TSF,HULL,TILLなど,合計12のユーザ入力によって選択された移動平均をボリンジャーバンドと組み合わせて取引信号を形成することにある.ボリンジャーバンドの中間帯は選択された移動平均を採用し,上下帯は中間帯から1つの正/負標準偏差である.価格が上帯を突破すると短く,価格が下帯を突破すると長い.異なる種類の移動平均を組み合わせることで,パラメータはより安定的かつ正確な取引信号のために最適化することができる.
このコードの主な構成要素は以下のとおりです.
この戦略の最大の利点は,複数の種類の移動平均値を提供することです.異なる市場環境は反応感度に関して異なる移動平均値に適しています.複数の移動平均値のタイプを採用することで,戦略の適応性が大幅に向上します.また,この戦略は,最適な組み合わせを見つけ,より正確な取引信号を得るために,移動平均値の長さのパラメータ最適化を可能にします.
この戦略の主なリスクは,複数の誤ったブレイクアウトの可能性のある移動平均値自体の混沌とした信号にあります.また,ボリンジャーバンド指標は,ワイルド価格変動に非常に敏感であり,中間帯が価格を効果的に追跡することは困難です.これは,適切なパラメータ調節とともに,より安定したタイプの移動平均値を使用する必要があります.
戦略は以下の側面から最適化できます.
この戦略は全体的に非常に革新的で,より洗練されたアプリケーションでボリンジャーバンド指標を豊かにしています.組み合わせた移動平均を調整することで,より正確で安定した信号を得ることができます.また,ボリンジャーバンド戦略を最適化するための新しいアイデアを開きます.パラメータチューニングと最適化により,この戦略は非常に実践的な取引ツールになることができます.
/*backtest start: 2023-01-30 00:00:00 end: 2023-10-13 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Bollinger Bands Strategy (MA type)", overlay=true) src = input(close, title="Source") length = input(20,step=10, minval=1) mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev") length1=input(26, "Long Moving Average Length", minval=1) length2=input(9, "Trigger Length", minval=1) T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1) //////////// mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"]) Var_Func(src,length)=> valpha=2/(length+1) vud1=src>src[1] ? src-src[1] : 0 vdd1=src<src[1] ? src[1]-src : 0 vUD=sum(vud1,9) vDD=sum(vdd1,9) vCMO=nz((vUD-vDD)/(vUD+vDD)) VAR=0.0 VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1]) VAR=Var_Func(src,length) DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) ) Wwma_Func(src,length)=> wwalpha = 1/ length WWMA = 0.0 WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1]) WWMA=Wwma_Func(src,length) Zlema_Func(src,length)=> zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2 zxEMAData = (src + (src - src[zxLag])) ZLEMA = ema(zxEMAData, length) ZLEMA=Zlema_Func(src,length) Tsf_Func(src,length)=> lrc = linreg(src, length, 0) lrc1 = linreg(src,length,1) lrs = (lrc-lrc1) TSF = linreg(src, length, 0)+lrs TSF=Tsf_Func(src,length) HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length))) T3e1=ema(src, length) T3e2=ema(T3e1,length) T3e3=ema(T3e2,length) T3e4=ema(T3e3,length) T3e5=ema(T3e4,length) T3e6=ema(T3e5,length) T3c1=-T3a1*T3a1*T3a1 T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1 T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1 T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1 T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3 getMA(src, length) => ma = 0.0 if mav == "SMA" ma := sma(src, length) ma if mav == "EMA" ma := ema(src, length) ma if mav == "WMA" ma := wma(src, length) ma if mav == "DEMA" ma := DEMA ma if mav == "TMA" ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) ma if mav == "VAR" ma := VAR ma if mav == "WWMA" ma := WWMA ma if mav == "ZLEMA" ma := ZLEMA ma if mav == "TSF" ma := TSF ma if mav == "HULL" ma := HMA ma if mav == "TILL" ma := T3 ma ma ////////// basis = getMA(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev offset = input(0, "Offset",minval = -500, maxval = 500) plot(basis, "Basis",color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) ///////// buyEntry = crossover(src, lower) sellEntry = crossunder(src, upper) if (crossover(src, lower)) strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="BBandLE") else strategy.cancel(id="BBandLE") if (crossunder(src, upper)) strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="BBandSE") else strategy.cancel(id="BBandSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)