Chiến lược tín hiệu giao dịch phù hợp với hình vuông

Tác giả:ChaoZhang, Ngày: 2023-09-23 15:40:57
Tags:

Tổng quan

Chiến lược này phù hợp với đường cong hình vuông với các điểm cao / thấp của thanh để tạo ra tín hiệu giao dịch khi giá vượt qua các đường phù hợp. Nó cố gắng xác định các mức hỗ trợ / kháng cự chính theo toán học cho giao dịch phá vỡ.

Chiến lược logic

Các thành phần và quy tắc chính là:

  1. Phụ hợp đường cong ở các điểm cao / thấp bằng cách sử dụng hồi quy bậc hai.

  2. Nhận tín hiệu khi phá vỡ gần trên dải trên.

  3. Bán tín hiệu khi gần phá vỡ dưới dải dưới.

  4. N thời gian xác minh để tránh vỡ sai.

  5. Không có quy tắc thoát cố định, tối ưu hóa lối ra thông qua backtesting.

Chiến lược này cố gắng xác định các giá chính bằng toán học và giao dịch các sự đột phá, một hệ thống đột phá điển hình.

Ưu điểm

So với các hệ thống thoát khác, những lợi thế chính là:

  1. Sự phù hợp toán học là khách quan hơn là phán đoán chủ quan.

  2. Cách tiếp cận mới kết hợp phân tích kỹ thuật và mô hình thống kê.

  3. Kiểm tra nhiều thời gian tránh các sự phá vỡ sai.

  4. Kiểm tra ngược có thể tối ưu hóa các lối ra và thời gian chờ.

  5. Dễ thực hiện với các điều chỉnh linh hoạt.

  6. Bản cập nhật mô hình tự động mà không cần can thiệp bằng tay.

  7. Có thể kiểm tra độ bền của các tham số trên các sản phẩm và khung thời gian.

  8. Khả năng tối ưu hóa hơn nữa với máy học.

  9. Phương pháp tiếp cận tổng thể mới với giá trị khám phá.

Rủi ro

Tuy nhiên, những rủi ro là:

  1. Hiệu suất điều chỉnh phụ thuộc vào điều chỉnh tham số, rủi ro quá mức.

  2. Các dây chuyền gắn chậm, không thể tránh hoàn toàn tổn thất.

  3. Không xác nhận âm lượng, có nguy cơ bị mắc kẹt.

  4. Kiểm tra thống kê là một thách thức cho alpha liên tục.

  5. Thời gian kiểm tra hậu quả hạn chế, cần xác minh độ bền.

  6. Khả năng thích nghi với nhiều thị trường đòi hỏi phải được xác nhận.

  7. Kích thước cố định thiếu điều chỉnh năng động.

  8. Cần đánh giá chặt chẽ về tỷ lệ phần thưởng/ rủi ro.

Những cải tiến

Dựa trên phân tích, các cải tiến có thể bao gồm:

  1. Kiểm tra độ bền của các tham số trên các chế độ thị trường.

  2. Thêm các chỉ số xác nhận khối lượng.

  3. Tối ưu hóa logic nhập / xuất để có tín hiệu chất lượng cao hơn.

  4. Xây dựng các mô hình kích thước vị trí năng động.

  5. Bao gồm dừng để hạn chế tổn thất.

  6. Tối ưu hóa các chiến lược quản lý rủi ro.

  7. Kiểm tra hậu quả thử nghiệm cửa sổ lăn.

  8. Đánh giá sự ổn định của nhiều thị trường.

  9. Tận dụng máy học để tối ưu hóa mô hình.

Kết luận

Tóm lại, chiến lược này có một số giá trị sáng tạo và giá trị thử nghiệm. Nhưng tính khả thi lâu dài của sự điều chỉnh thống kê vẫn chưa được chứng minh. Kiểm tra toàn diện trong mẫu về độ bền, rủi ro / phần thưởng là chìa khóa để ngăn ngừa quá mức và duy trì khả năng thích nghi.


/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy Quadratic Semaphore ",
         shorttitle = "SQS",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=5,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2019, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

Config            = input(title = "══════════════ Config ══════════════", defval = true, type = input.bool)
p = input(6)
length = input(30)
//
backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))
//
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

x1 = bar_index
x2 = sqrt(x1)
y = high
//
S11 = sum(x2,length) - sqrt(sum(x1,length)) / length  
S12 = sum(x1*x2,length) - (sum(x1,length) * sum(x2,length)) / length  
S22 = sum(sqrt(x2),length) - sqrt(sum(x2,length)) / length            
Sy1 = sum (y*x1,length) - (sum(y,length) * sum(x1,length)) / length   
Sy2 = sum (y*x2,length) - (sum(y,length) * sum(x2,length)) / length   
//
max1 = sma(x1,length) 
max2 = sma(x2,length)
may = sma(y,length)
b2 = ((Sy1 * S22) - (Sy2*S12))/(S22*S11 - sqrt(S12))
b3 = ((Sy2 * S11) - (Sy1 * S12))/(S22 * S11 - sqrt(S12))
b1 = may - b2*max1 - b3*max2
qr = b1 + b2*x1 + b3*x2
//
yl = low
//
Sy1l = sum(yl*x1,length) - (sum(yl,length) * sum(x1,length)) / length  
Sy2l = sum(yl*x2,length) - (sum(yl,length) * sum(x2,length)) / length  
//
mayl = sma(yl,length)
b2l = ((Sy1l * S22) - (Sy2l*S12))/(S22*S11 - sqrt(S12))
b3l = ((Sy2l * S11) - (Sy1l * S12))/(S22 * S11 - sqrt(S12))
b1l = mayl - b2l*max1 - b3l*max2
qrl = b1l + b2l*x1 + b3l*x2
//
period = round(p/2)+1
hh = qr[period]
ll = qrl[period]
countH = 0
countL = 0
buy=0
sell=0
//
for i = 1 to period-1
    if qr[i]<hh
        countH:=countH+1
    if qrl[i]>ll
        countL:=countL+1

for i = period+1 to p+1
    if qr[i]<hh
        countH:=countH+1
    if qrl[i]>ll
        countL:=countL+1

if countH==p
    pivotH = high[period]
    buy := 1
    
if countL==p
    pivotL = low[period]
    sell := 1
//    
plotshape(buy == 1 , text='💣', style=shape.arrowup, location=location.belowbar, color=#32CD32, textcolor=color.white, offset=0, transp=0,size=size.auto)
plotshape(sell == 1 , text='🔨', style=shape.arrowdown, location=location.abovebar, color=#FF0000, textcolor=color.white, offset=0, transp=0,size=size.auto)
//

if (backTestPeriod())
    strategy.entry("long", true, 1, when = buy == 1)
    strategy.entry("short", false, 1, when = sell == 1) 


Thêm nữa