Chiến lược định lượng theo xu hướng dựa trên tối ưu hóa tham số


Ngày tạo: 2024-01-02 11:01:22 sửa đổi lần cuối: 2024-01-02 11:01:22
sao chép: 0 Số nhấp chuột: 682
1
tập trung vào
1621
Người theo dõi

Chiến lược định lượng theo xu hướng dựa trên tối ưu hóa tham số

Tổng quan

Ý tưởng chính của chiến lược này là kết hợp các chỉ số percentrank và các tham số tối ưu hóa để đánh giá và theo dõi xu hướng giá. Chiến lược này tạo ra tín hiệu giao dịch bằng cách so sánh giá hiện tại với tỷ lệ phần trăm của giá trong một khoảng thời gian lịch sử nhất định, để nắm bắt hiệu ứng hình ảnh phản chiếu giữa, theo dõi xu hướng và thu được lợi nhuận dư thừa.

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

Chiến lược này sử dụng chỉ số percentrank để xác định xu hướng giá. Percentrank cho biết mức giá hiện tại có độ mạnh tương đối trong chu kỳ xem.

Phạm vi giá trị của percentrank nằm trong khoảng từ 0 đến 100. Khi giá trị percentrank gần 0 thì giá hiện tại gần giá thấp nhất trong chu kỳ xem, thuộc vùng giá trị đánh giá thấp; Khi gần 100 thì giá hiện tại gần giá cao nhất trong chu kỳ xem, thuộc vùng giá trị đánh giá cao.

Chiến lược này cũng giới thiệu tham số scale như là độ lệch. Làm cho phạm vi từ 0 đến 100 di chuyển đến phạm vi scale đến 100 + scale. Đồng thời thiết lập hai đường tín hiệu level_1 và level_2. Trong đó level_1 cho thấy mức độ xem nhiều, level_2 cho thấy mức độ xem không.

Khi chỉ số percentrank giá từ dưới lên vượt qua level_1, nó tạo ra tín hiệu xem nhiều; khi từ trên xuống vượt qua level_2, nó tạo ra tín hiệu xem hẹp.

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

  1. Sử dụng chỉ số percentrank để đánh giá cường độ của xu hướng giá, tránh bị mắc kẹt và theo đuổi
  2. Ứng dụng phương pháp tối ưu hóa tham số, điều chỉnh độ lệch scale và ngưỡng tín hiệu, điều chỉnh tham số cho các giống và chu kỳ khác nhau, tăng sự ổn định
  3. Kết hợp theo dõi xu hướng và tư duy giao dịch đảo ngược để theo dõi xu hướng kịp thời sau khi phá vỡ đường tín hiệu

Phân tích rủi ro

  1. Những xu hướng sai lệch dẫn đến những tổn thất không cần thiết
  2. Những tín hiệu sai lầm có thể được tạo ra khi xu hướng biến động giá không rõ ràng
  3. Thiết lập tham số không đúng có thể dẫn đến giao dịch thường xuyên hoặc không đủ khối lượng giao dịch

Đối với các rủi ro trên, có thể tối ưu hóa bằng cách điều chỉnh các tham số len, scale, level; đồng thời có thể kết hợp với các chỉ số khác để xác nhận, tránh giao dịch sai.

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

Chiến lược này có thể được tối ưu hóa hơn nữa:

  1. Có thể giới thiệu điểm dừng để giảm tổn thất đơn lẻ
  2. Có thể kết hợp với các chỉ số như đường trung bình di chuyển để xác nhận và lọc ra một số tín hiệu sai
  3. Các tham số có thể tự động tối ưu hóa với phương pháp học máy
  4. Có thể chạy song song trong nhiều chu kỳ thời gian

Tóm tắt

Chiến lược này có tư duy tổng thể rõ ràng, sử dụng phương pháp định lượng tối ưu hóa tham số để đánh giá và theo dõi xu hướng giá. Có giá trị thực tế nhất định, nhưng vẫn cần được thử nghiệm và tối ưu hóa hơn nữa, giảm rủi ro thực tế và tăng khả năng lợi nhuận ổn định.

Mã nguồn chiến lược
/*backtest
start: 2023-12-02 00:00:00
end: 2024-01-01 00:00:00
period: 4h
basePeriod: 15m
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/
// © Alex_Dyuk

//@version=4
strategy(title="percentrank", shorttitle="percentrank")
src = input(close, title="Source")
len = input(title="lookback - Период сравнения", type=input.integer, defval=10, minval=2)
scale = input(title="scale offset - смещение шкалы", type=input.integer, defval=50, minval=0, maxval=100)
level_1 = input(title="sygnal line 1", type=input.integer, defval=30)
level_2 = input(title="sygnal line 2", type=input.integer, defval=-30)

prank = percentrank(src,len)-scale
plot(prank, style = plot.style_columns)
plot(level_2, style = plot.style_line, color = color.red)
plot(level_1, style = plot.style_line, color = color.green)

longCondition = (crossunder(level_1, prank) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)
longExitCondition = (crossover(level_2, prank) == true)
if (longExitCondition)
    strategy.close("Long")
    
shortCondition = (crossover(level_2, prank) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)
shortexitCondition = (crossunder(level_1, prank) == true)
if (shortexitCondition)
    strategy.close("Short")