この戦略は,ボリンジャーバンドを使用して価格がオーバーボールドエリアに入ったかどうかを決定し,RSIインジケーターを組み合わせてコールバック機会を特定します.オーバーボールドエリアで死亡クロスが形成されたときにショートになり,価格がボリンジャー上部帯を超えると停止します.
戦略は以下の原則に基づいています.
この戦略の利点:
この戦略におけるリスク:
リスクは以下によって最小限に抑えられます.
この戦略は,次の点において改善できる:
概要すると,これは典型的な過剰購入のショートスカルピング戦略である.取引エントリのためのボリンジャーバンドとRSIをシグナルをフィルタリングするために利用する.リスクは慎重なストップロスの配置によって管理される.パラメータ調節,インジケーターを追加,取引ロジックを拡張などによりさらなる改善がもたらされる.
/*backtest start: 2023-11-01 00:00:00 end: 2023-11-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Coinrule strategy("Bollinger Band Below Price with RSI", overlay=true, initial_capital=1000, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=70, commission_type=strategy.commission.percent, commission_value=0.1) showDate = input(defval=true, title='Show Date Range') timePeriod = time >= timestamp(syminfo.timezone, 2022, 1, 1, 0, 0) notInTrade = strategy.position_size <= 0 //Bollinger Bands Indicator length = input.int(20, minval=1) src = input(close, title="Source") mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev") basis = ta.sma(src, length) 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)) // RSI inputs and calculations lengthRSI = 14 RSI = ta.rsi(close, lengthRSI) // Configure trail stop level with input options longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01 shortTrailPerc = input.float(title='Trail Short Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01 // Determine trail stop loss prices //longStopPrice = 0.0 shortStopPrice = 0.0 //longStopPrice := if strategy.position_size > 0 //stopValue = close * (1 - longTrailPerc) //math.max(stopValue, longStopPrice[1]) //else //0 shortStopPrice := if strategy.position_size < 0 stopValue = close * (1 + shortTrailPerc) math.min(stopValue, shortStopPrice[1]) else 999999 //Entry and Exit strategy.entry(id="short", direction=strategy.short, when=ta.crossover(close, upper) and RSI < 70 and timePeriod and notInTrade) if (ta.crossover(upper, close) and RSI > 70 and timePeriod) strategy.exit(id='close', limit = shortStopPrice)