Chiến lược BB+RSI+Aroon có thể cấu hình


Ngày tạo: 2023-09-21 15:05:38 sửa đổi lần cuối: 2023-09-21 15:05:38
sao chép: 0 Số nhấp chuột: 739
1
tập trung vào
1617
Người theo dõi

Tổng quan

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.

Nguyên tắc chiến lược

  1. Khi giá vượt qua BRI, một tín hiệu đa đầu sẽ được hiển thị.

  2. Khi RSI vượt qua đường mua, nó sẽ hiển thị tín hiệu xác nhận đa đầu.

  3. Khi Aroon lên và xuống, nó hiển thị tín hiệu xác nhận đa đầu.

  4. Khi ba điều kiện trên được đáp ứng, hãy làm nhiều hơn.

  5. Khi giá vượt qua Brin, một tín hiệu không đầu sẽ được hiển thị.

  6. 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.

  7. Khi Aroon đi xuống, nó sẽ hiển thị tín hiệu xác nhận đầu không.

  8. Khi ba điều kiện trên được đáp ứng cùng một lúc, hãy làm trống.

Lợi thế chiến lược

  • Các tham số có thể cấu hình, tối ưu hóa cho sự kết hợp tốt nhất
  • Xác nhận nhiều chỉ số, tăng độ chính xác tín hiệu
  • Thích ứng với nhiều môi trường thị trường
  • Logic giao dịch đơn giản, dễ thực hiện

Rủi ro chiến lược

  • Các tham số được tối ưu hóa không đúng, có thể tạo ra quá nhiều tín hiệu sai
  • Nhiều chỉ số tăng chậm lại, có thể bỏ lỡ sự thay đổi nhanh chóng
  • Hoạt động ngược làm tăng tần suất và chi phí giao dịch

Hướng tối ưu hóa

  • Thử nghiệm nhiều khung thời gian đa thị trường để tìm các tham số tốt nhất
  • Đánh giá hiệu quả của mỗi chỉ số, loại bỏ nếu cần thiết
  • Cố gắng tối ưu hóa tham số dựa trên học máy
  • Tối ưu hóa mã chiến lược, giảm lượng tính toán
  • Kiểm tra các tham số thời gian giữ khác nhau

Tóm tắt

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.

Mã nguồn chiến lược
/*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()