
この戦略はブリン帯の指標に基づいており,主な考えは,価格がブリン帯を突破して軌道上または軌道下を走った後に,価格がブリン帯の内部に戻ることを待つこと,そして再帰点で突破の方向と同様のポジションを確立することです.この戦略は,価格が極域で反転することが多い特性を利用し,ブリン帯の突破と再帰の組み合わせによって市場の転換点を捕捉し,より高い勝利率を得ることを期待しています.
ブリン帯突破逆戻り取引戦略は,価格が極端な状況に反応することを利用し,ブリン帯ツールを使用して開場条件を構築し,トレンドの開始点と終了点を一定程度に捕捉し,頻繁な取引を制御する簡単な実用的な量化取引戦略である.また,この戦略には,パラメータ選択,振動状況下での不良パフォーマンス,トレンド把握の不足などの問題がある.細部を最適化し,他のシグナルと組み合わせることで,この戦略の適応性と粗略性をさらに向上させる可能性がある.
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-27 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(shorttitle="BB", title="Bollinger Bands", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(1.7, minval=0.001, maxval=50, title="StdDev")
ma(source, length, _type) =>
switch _type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(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))
break_up = close > upper
break_down = close < lower
inside = close > lower and close < upper
sell_condition = break_up[1] and inside
buy_condition = break_down[1] and inside
// Conditions to close trades
close_sell_condition = close > basis
close_buy_condition = close < basis
trade_condition = sell_condition or buy_condition
// Tracking the high of the breakout candle
var float peak = na
if (not trade_condition)
peak := close
if (break_up and peak < high)
peak := high
if (break_down and peak > low)
peak := low
// Entering positions
if (buy_condition)
strategy.entry("Buy", strategy.long)
if (sell_condition)
strategy.entry("Sell", strategy.short)
// Exiting positions when close crosses the basis
if (strategy.position_size > 0 and close_sell_condition) // If in a long position and close crosses above basis
strategy.close("Buy")
if (strategy.position_size < 0 and close_buy_condition) // If in a short position and close crosses below basis
strategy.close("Sell")