Chiến lược tín hiệu giao dịch phù hợp bậc hai


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

Tổng quan

Chiến lược này sử dụng đường cong thứ hai phù hợp với đường K cao và thấp để tạo ra tín hiệu giao dịch. Khi giá thực tế phá vỡ đường cong phù hợp, nó tạo ra tín hiệu mua và bán. Chiến lược này cố gắng sử dụng mô hình toán học để xác định mức hỗ trợ và kháng cự quan trọng để thực hiện giao dịch phá vỡ.

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

Các thành phần và quy tắc chính của chiến lược này là:

  1. Phù hợp điểm cao thấp: sử dụng đường cong bậc hai để phù hợp điểm cao thấp của đường K.

  2. Tín hiệu mua: Tín hiệu mua được tạo ra khi giá đóng cửa đường K phá vỡ đường cong trên đường.

  3. Tín hiệu bán: Tín hiệu bán được tạo ra khi giá đóng cửa K vượt qua đường cong.

  4. Xác minh chu kỳ N: yêu cầu phá vỡ liên tục N chu kỳ để có hiệu lực, tránh phá vỡ giả.

  5. Tín hiệu vị trí yên: Không có tín hiệu vị trí yên rõ ràng, thời gian giữ vị trí được xác định bằng cách tối ưu hóa phản hồi.

Chiến lược này cố gắng xác định giá quan trọng thông qua mô hình toán học và tham gia vào khi phá vỡ, thuộc hệ thống phá vỡ điển hình.

Phân tích lợi thế

Những ưu điểm chính của chiến lược này so với các hệ thống đột phá khác là:

  1. Sử dụng mô hình toán học phù hợp, đánh giá khách quan hơn chủ quan.

  2. Các nhà nghiên cứu đã nghiên cứu một số phương pháp mới trong việc kết hợp các công nghệ giao dịch với các mô hình thống kê.

  3. Tiếp theo, các nhà nghiên cứu đã đưa ra một số giải pháp khác.

  4. Phản hồi tối ưu hóa tìm kiếm thời gian nắm giữ tốt nhất.

  5. Có thể điều chỉnh một cách linh hoạt.

  6. Mô hình được cập nhật tự động, không cần bảo trì bằng tay.

  7. Có thể kiểm tra sức khỏe tham số của các giống và chu kỳ khác nhau.

  8. Có thể giới thiệu máy học để tối ưu hóa và xác minh hơn nữa.

  9. Nhìn chung, nó rất mới mẻ và đáng để khám phá.

Phân tích rủi ro

Tuy nhiên, chiến lược này cũng có những rủi ro:

  1. Hiệu quả phù hợp phụ thuộc vào lựa chọn tham số, có thể được tối ưu hóa quá mức.

  2. Các đường cong phù hợp có sự chậm trễ, không thể hoàn toàn tránh mất mát.

  3. Không tính đến khối lượng giao dịch, có nguy cơ bị phá vỡ.

  4. Thống kê arbitrage khó có thể đạt được lợi nhuận vượt mức trong thời gian dài.

  5. Chu kỳ phản hồi ngắn, cần xác minh tính ổn định của mô hình.

  6. Khả năng thích ứng với môi trường đa giống đang được kiểm tra.

  7. Vị trí cố định không thể được điều chỉnh động.

  8. Tỷ lệ thu hồi thu nhập cần được đánh giá nghiêm ngặt.

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

Dựa trên những phân tích trên, chiến lược này có thể được cải thiện trong một số khía cạnh:

  1. Kiểm tra sức mạnh của các tham số trong các môi trường thị trường khác nhau.

  2. Tham gia chỉ số xác minh khối lượng giao dịch.

  3. Tối ưu hóa logic xuất cảnh và cải thiện chất lượng tín hiệu.

  4. Xây dựng mô hình quản lý vị thế động.

  5. Tiến hành chiến lược hạn chế lỗ hổng.

  6. Tối ưu hóa chiến lược quản lý tài chính.

  7. Đánh giá xác thực cuộn cửa sổ phản hồi.

  8. Đánh giá khả năng thu nhập ổn định của nhiều giống.

  9. Mô hình được tối ưu hóa bằng cách học máy.

Tóm tắt

Nhìn chung, chiến lược này có một số giá trị sáng tạo và thử nghiệm. Tuy nhiên, lợi nhuận ổn định lâu dài của Statistical Arbitrage vẫn phải đối mặt với thử nghiệm. Cần xem xét toàn diện về sức mạnh, rủi ro và lợi nhuận của chiến lược trong phản hồi, ngăn chặn quá phù hợp, để chiến lược duy trì khả năng thích ứng trong thị trường biến đổi.

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