이 전략은 볼링거 밴드 (BB), 상대 강도 지수 (RSI) 및 아론 지표를 결합하여 효율적인 엔트리 및 출구 신호 거래를 위해 각자의 강점을 활용합니다.
가격 경류 BB 하단 밴드는 긴 신호를 보여줍니다.
RSI가 과잉 판매선을 넘으면 긴 확인이 됩니다.
아론의 크로스오버는 긴 확인을 보여줍니다.
모든 3가지 조건이 충족되면 긴 입력
BB 상단파가 신호가 짧아졌어요
RSI가 오버바운드를 넘으면 짧은 확인이 됩니다.
아론의 크로스오버는 짧은 확인을 보여줍니다.
모든 3가지 조건이 충족되면 짧은 출입.
이 전략은 여러 지표의 강점을 강력한 입시 신호로 결합합니다. 매개 변수 최적화, 과다 지표 감소 및 코드 최적화를 통해 추가 개선은 성능을 향상시킬 수 있습니다. 전반적으로 효과적인 사용자 정의 가능한 솔루션 거래.
/*backtest start: 2023-09-13 00:00:00 end: 2023-09-20 00:00:00 period: 5m basePeriod: 1m 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/ // Developed by Marco Jarquin as part of Arkansas 22 Project for Binary Options // CBRA for binary options (Configurable Bollinger Bands, RSI and Aroon) //@version=4 // ==================================================================================== //strategy("A22.CBRA.Strat", overlay=true, initial_capital=10000, currency="USD", calc_on_every_tick=true, default_qty_type=strategy.cash, default_qty_value=4000, commission_type=strategy.commission.cash_per_order, commission_value=0) // Aroonish Parameters // ==================================================================================== Aroonish_length = input(4, minval=1, title="Aroonish Lenght") Aroonish_ConfVal = input(50, minval=0, maxval=100, step=25, title="Aroonish Confirmation Value") Aroonish_upper = 100 * (-highestbars(high, Aroonish_length+1) + Aroonish_length)/Aroonish_length Aroonish_lower = 100 * (-lowestbars(low, Aroonish_length+1) + Aroonish_length)/Aroonish_length // Aroonish confirmations // ==================================================================================== Aroonish_ConfLong = (Aroonish_lower >= Aroonish_ConfVal) and (Aroonish_upper < Aroonish_lower) Aroonish_ConfShrt = (Aroonish_upper >= Aroonish_ConfVal) and (Aroonish_upper > Aroonish_lower) plotshape(crossover(Aroonish_lower, Aroonish_upper), color = color.red, style = shape.triangledown, location = location.abovebar, size = size.auto, title = "Ar-B") plotshape(crossover(Aroonish_upper, Aroonish_lower), color = color.green, style = shape.triangleup, location = location.belowbar, size = size.auto, transp = 0, title = "Ar-S") // RSI Parameters // ==================================================================================== RSI_length = input(4, title="RSI Lenght") RSI_overSold = input(20, title="RSI Oversold Limit") RSI_overBought = input(80, title="RSI Overbought Limit" ) RSI = rsi(close, RSI_length) plotshape(crossover(RSI, RSI_overSold), color = color.orange, style = shape.square, location = location.belowbar, size = size.auto, title = "RSI-B") plotshape(crossunder(RSI, RSI_overBought), color = color.orange, style = shape.square, location = location.abovebar, size = size.auto, transp = 0, title = "RSI-S") // Bollinger Parameters // ==================================================================================== BB_length = input(20, minval=1, title="Bollinger Lenght") BB_mult = input(2.5, minval=0.1, maxval=50, step=0.1, title="Bollinger Std Dev") // BB_bars = input(3, minval=1, maxval=5, title="Check bars after crossing") BB_basis = sma(close, BB_length) BB_dev = BB_mult * stdev(close, BB_length) BB_upper = BB_basis + BB_dev BB_lower = BB_basis - BB_dev p1 = plot(BB_upper, color=color.blue) p2 = plot(BB_lower, color=color.blue) // Bars to have the operation open // ==================================================================================== nBars = input(3, minval=1, maxval=30, title="Bars to keep the operation open") // Strategy condition short or long // ==================================================================================== ConditionShrt = ((crossunder(close, BB_upper) or crossunder(close[1], BB_upper[1])) and Aroonish_ConfShrt) and (crossunder(RSI, RSI_overBought) or crossunder(RSI[1], RSI_overBought[1])) ConditionLong = ((crossover(close, BB_lower) or crossover(close[1], BB_lower[1])) and Aroonish_ConfLong) and (crossover(RSI, RSI_overSold) or crossover(RSI[1], RSI_overSold[1])) plotshape(crossover(close, BB_lower), color = color.blue, style = shape.circle, location = location.belowbar, size = size.auto, title = "BB-B") plotshape(crossunder(close, BB_upper), color = color.blue, style = shape.circle, location = location.abovebar, size = size.auto, transp = 0, title = "BB-S") // Make input options that configure backtest date range // ==================================================================================== iMo = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12) iDy = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31) iYr = input(title="Start Year", type=input.integer, defval=(2020), minval=1800, maxval=2100) eMo = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12) eDy = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31) eYr = input(title="End Year", type=input.integer, defval=(2021), minval=1800, maxval=2100) // Look if the close time of the current bar falls inside the date range // ==================================================================================== inDateRange = true // Evaluates conditions to enter short or long // ==================================================================================== if (inDateRange and ConditionLong) strategy.entry("A22.L", strategy.long) if (inDateRange and ConditionLong[nBars]) strategy.close("A22.L", comment="A22.L Exit") if (inDateRange and ConditionShrt) strategy.entry("A22.S", strategy.short) if (inDateRange and ConditionShrt[nBars]) strategy.close("A22.S", comment="A22.S Exit") if (not inDateRange) strategy.close_all()