Chiến lược đầu tư định lượng dựa trên ngày mua hàng tháng

Tác giả:ChaoZhang, Ngày: 2023-11-24 14:10:23
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là tìm ngày mua tốt nhất mỗi tháng bằng cách mua tài sản kỹ thuật số vào ngày đó và bán chúng vào cuối tháng, để đạt được lợi nhuận đầu tư tối ưu.

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

Chiến lược này chạy dựa trên ngày mua hàng tháng và ngày bán được xác định bởi người dùng. Nó đi dài vào ngày mua bằng cách mua tài sản và đóng vị trí vào ngày bán nếu được đặt. Nếu không, nó đóng vị trí vào ngày kết thúc chiến lược. Điều này có thể kiểm tra sự khác biệt lợi nhuận từ các ngày mua hàng tháng khác nhau.

Lý luận cho tín hiệu mua là: nếu đó là ngày mua được xác định bởi người dùng và trong phạm vi ngày hiệu quả của chiến lược, mua dài.

Lý thuyết cho tín hiệu vị trí đóng là: nếu ngày bán được thiết lập và đó là ngày bán bây giờ, đóng vị trí; nếu không có ngày bán nhưng sau ngày kết thúc chiến lược, cũng đóng vị trí.

Ưu điểm của Chiến lược

  1. Có thể tìm ngày biến động giá lớn nhất mỗi tháng để có được lợi nhuận dư thừa thông qua giao dịch nội ngày tần suất cao
  2. Có thể xác định điểm mua tối ưu bằng cách so sánh các mô hình lợi nhuận từ các ngày mua khác nhau
  3. Có thể xác định liệu ngày mua tối ưu thay đổi dựa trên các sự kiện chính của tháng
  4. Có thể cân bằng giao dịch ngắn hạn và dài hạn bằng cách đặt ngày bán khác nhau

Rủi ro và giải pháp

  1. Rủi ro sụp đổ giá sau khi mua

    • Thiết lập stop loss để giới hạn lỗ tối đa
    • Chọn tài sản có tính thanh khoản cao để tránh biến động giá cực đoan
  2. Thay đổi ngày mua tối ưu

    • Theo dõi lịch sử thay đổi dữ liệu và điều chỉnh điểm mua tối ưu kịp thời
    • Giảm kích thước vị thế trong thời gian rủi ro cao
  3. Mất do cài đặt tham số không chính xác

    • Kiểm tra các thông số khác nhau từng bước và so sánh sự khác biệt lợi nhuận
    • Chọn phạm vi thời gian đại diện cho thử nghiệm

Hướng dẫn tối ưu hóa

  1. Xem xét nhiều yếu tố khác trong việc xác định điểm nhập cảnh

    • Xem xét tác động của các sự kiện tin tức chính của tháng trên giá
    • Phân tích xu hướng giá của các tài sản kỹ thuật số liên quan
    • Thêm các mô hình học máy để xác định thời gian tối ưu
  2. Tối ưu hóa cơ chế quản lý vị trí

    • Thiết lập động lợi nhuận để đóng vị trí
    • Điều chỉnh kích thước vị trí dựa trên sự biến động
    • Xem xét vị thế nắm giữ qua các giai đoạn
  3. Mở rộng sang các thị trường giao dịch khác

    • Áp dụng cho nhiều cặp giao dịch tiền kỹ thuật số hơn
    • Áp dụng cho cổ phiếu, ngoại hối vv.
    • Thiết lập các chiến lược phân phối giữa các thị trường

Tóm lại

Chiến lược này tìm ra ngày dao động giá nội ngày lớn nhất mỗi tháng bằng cách kiểm tra sự khác biệt lợi nhuận từ các ngày mua khác nhau. Nó có thể mang lại lợi nhuận dư thừa cho các nhà đầu tư tìm kiếm lợi nhuận từ giao dịch nội ngày tần suất cao. Cải thiện hơn nữa về xác định thời gian nhập cảnh, quản lý vị trí và mở rộng phạm vi ứng dụng sẽ tăng cường tính ổn định và lợi nhuận của chiến lược.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
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/
// © dennis.decoene

//@version=4
strategy(title="Buy and Hold, which day of month is best to buy?", overlay=true)

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Starting From")
     
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Starting From")
     
startYear = input(title="Start Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group="Starting From")

endDate = input(title="End Date", type=input.integer,
     defval=2, minval=1, maxval=31, group="Until")
endMonth = input(title="End Month", type=input.integer,
     defval=10, minval=1, maxval=12, group="Until")
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group="Until")

entryday = input(title="Entry Day", type=input.integer,
     defval=26, minval=1, maxval=31, tooltip="When to enter (buy the asset) each month")
exitday = input(title="Exit Day", type=input.integer,
     defval=6, minval=1, maxval=31, tooltip="When to exit (sell the asset) each month")
     
useExitDay= input(title="Close position on exit day?", type=input.bool, defval=false, tooltip="Use the Exit Day to close each months position it true or close at the end of the period (if false)")
     
isEntryDay= (dayofmonth(time)==entryday)
isExitDay= (dayofmonth(time)==exitday-1)


inDateRange = true

if (isEntryDay and inDateRange)
    strategy.entry(id="Buy", long=true)
    
if (isExitDay and useExitDay)
    strategy.close_all()


// Exit open market position when date range ends
if (not inDateRange and not useExitDay)
    strategy.close_all()
     

Thêm nữa