
この戦略はブリン帯に基づく動量波動追跡戦略である.ブリン帯指標を組み合わせて市場の傾向と逆転点を判断し,多空ポジションを設定することで市場の波動を追跡する.
この戦略の核心指標はブリン帯である。ブリン帯は中軌,上軌,下軌で構成されている。中軌はn日の移動平均であり,上軌は中軌加減標準差の偏移である。価格が上下軌に近づくと超買い超売の信号とみなされる。戦略は,価格が中軌を突破する時にトレンド偏差をポジションの基礎として加える。偽の突破が損失をもたらすのを防ぐために,戦略は,ポジションを大きく平均値より突破するように要求する。平仓は,中軌を突破した後に価格が再び引き戻すものである。
この戦略は同時に,トレンドの建置と逆転の建置を加え,それぞれ異なる取引機会に対応する.トレンドの建置は,中軌を支える抵抗基準として要求し,突破偏移の効果を形成する.反転の建置は,ブリン帯の下軌の近くに直接逆転して形成される.この戦略は,この2つの啓示を組み合わせることで,トレンド追跡と逆転操作を兼ねることができる.
この戦略はブリン帯の超買い超売特性を組み合わせ,反転点判断を加えた.これは,異なる種類の取引機会を捕捉するために,トレンド市場と振動市場の両方に同時に適用できるようにする.戦略の止損エクジット設定は,損失の拡大を防ぐ.多空二方向取引の特徴も,戦略の適用性を強化する.
単純なブリン帯戦略に比べて,この戦略が加えたトレンドの論理判断は,ポジションを建設することをより安定させ,反転の機会を捉える.これは信噪比を向上させる.第二に,多空双方向取引は,異なる市場の取引機会をより全面的に利用する.
この戦略は主にブリン帯の超買超売特性に依存する.したがって,価格が激しく波動するとき,ブリン帯の区間が増加し,複数の負債設定につながりやすい.これは潜在的リスクポイントである.さらに,逆転判断には依然として一定の不確実性と誤差があり,失敗したポジション設定と負債停止を引き起こす.
ブリン帯の失効状況に対して,n日パラメータを短縮してブリン帯をより敏感にすることができる。または,その幅範囲を縮小して損失を引き起こす可能性を減らすことができる。逆転曲線判断については,突破のパラメータを最適化することで誤りを減らすことができる。
この戦略の最適化には,以下のポイントが挙げられます.
この戦略は,ブリン帯標準戦略の有効な拡張と最適化を行います. 加入されたトレンド偏差判断は,安定性を高め,反転の機会をうまく利用します. 多空の二方向取引とストップ・損失設定は,戦略をさらに強固にします. パラメータの最適化とより多くのフィルターを追加することで,効果をさらに向上させることができます.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=3
strategy("Noro's Bollinger Strategy v1.3", shorttitle = "Bollinger str 1.3", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 5)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")
uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
showbands = input(true, defval = true, title = "Show Bollinger Bands")
//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
//Lines
col = showbands ? black : na
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)
//Body
body = abs(close - open)
abody = ema(body, 30)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and ohlc4 >= basis and ohlc4 < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset
dn1 = bar == 1 and ohlc4 <= basis and ohlc4 > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset
up2 = close <= lower and usect
dn2 = close >= upper and usect
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2
//Trading
if up1 or up2
strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn1 or dn2
strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
strategy.close_all()