Chiến lược này kết hợp các chỉ số Bollinger Bands (BB), Relative Strength Index (RSI) và Aroon để tận dụng lợi thế của từng chỉ số để cung cấp tín hiệu vào và ra hiệu quả cho giao dịch.
Khi giá vượt qua BRI, một tín hiệu đa đầu sẽ được hiển thị.
Khi RSI vượt qua đường mua, nó sẽ hiển thị tín hiệu xác nhận đa đầu.
Khi Aroon lên và xuống, nó hiển thị tín hiệu xác nhận đa đầu.
Khi ba điều kiện trên được đáp ứng, hãy làm nhiều hơn.
Khi giá vượt qua Brin, một tín hiệu không đầu sẽ được hiển thị.
Khi RSI vượt qua đường bán tháo, nó sẽ hiển thị tín hiệu xác nhận không.
Khi Aroon đi xuống, nó sẽ hiển thị tín hiệu xác nhận đầu không.
Khi ba điều kiện trên được đáp ứng cùng một lúc, hãy làm trống.
Chiến lược này kết hợp các lợi thế của nhiều chỉ số để tạo ra một tín hiệu đầu vào mạnh mẽ hơn. Bằng cách tối ưu hóa tham số, loại bỏ các chỉ số dư thừa và mã tối ưu hóa, hiệu quả của chiến lược có thể được nâng lên một cấp độ cao hơn. Nhìn chung, chiến lược này cung cấp giải pháp tùy chỉnh hiệu quả cho giao dịch.
/*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()