Chiến lược giao dịch tùy chỉnh ngày trong tuần

Tác giả:ChaoZhang, Ngày: 2023-09-26 20:49:44
Tags:

Tổng quan

Đây là một chiến lược giao dịch dài / ngắn tùy chỉnh cho bitcoin cho phép kiểm tra lại sự khao khát hoặc mua bán ngắn vào những ngày khác nhau trong tuần. Giá có thể có xu hướng di chuyển theo một hướng hoặc hướng khác vào mỗi ngày trong tuần, và chiến lược này cho phép kiểm tra trên một loạt các ngày để tận dụng điều này.

Hãy chắc chắn rằng bạn đang trên khung thời gian hàng ngày khi xem hiệu suất và lịch sử giao dịch để đảm bảo kịch bản hoạt động như dự định và bạn có dữ liệu lịch sử tối đa từ TradingView.

Chiến lược logic

Logic cốt lõi của chiến lược là cho phép người dùng chọn giao dịch dài, ngắn hoặc không giao dịch cho mỗi ngày trong tuần.

Đầu tiên, nó cho phép người dùng thiết lập phạm vi ngày cho backtesting, bao gồm bắt đầu tháng, ngày, năm và cuối tháng, ngày, năm.

Sau đó, nó sử dụng một khung thời gian mảng để lưu trữ đại diện số của mỗi ngày trong tuần, từ Chủ nhật 0 đến thứ Bảy 6.

Một mảng khác timeframes_options được sử dụng để lưu trữ lựa chọn giao dịch dài, ngắn hoặc không giao dịch cho mỗi ngày.

Trong vòng lặp for, chiến lược kiểm tra xem ngày giao dịch hiện tại có phù hợp với một ngày trong mảng khung thời gian không.

Nếu tùy chọn không phải là Không có , nó mở một vị trí theo hướng thích hợp dựa trên lựa chọn dài hoặc ngắn.

Do đó, chiến lược có thể giao dịch dài / ngắn trong phạm vi ngày đã thiết lập dựa trên các cài đặt cho mỗi ngày trong tuần.

Phân tích lợi thế

Ưu điểm chính của chiến lược này là cung cấp giao dịch dài / ngắn có thể tùy chỉnh cao. Người dùng có sự tự do hoàn toàn trong việc chọn hướng giao dịch cho mỗi ngày trong tuần.

Không giống như các chiến lược giao dịch hàng tuần cố định, chiến lược này có thể được điều chỉnh linh hoạt.

Phạm vi ngày backtest cũng rất linh hoạt, cho phép thử nghiệm bất kỳ khoảng thời gian nào được người dùng chỉ định để xem kết hợp ngày nào hoạt động tốt nhất.

Logic giao dịch rất rõ ràng và đơn giản, dễ hiểu và sửa đổi. Người dùng có thể điều chỉnh các tham số mà không cần mã hóa.

Chiến lược cũng tự động đóng các vị trí trên thay đổi hướng mỗi ngày, tránh rủi ro không cần thiết.

Phân tích rủi ro

Rủi ro chính là các lựa chọn giao dịch hàng ngày mà người dùng chọn có thể không phù hợp với tất cả các phạm vi ngày.

Ví dụ, ngày làm việc dài và cuối tuần ngắn có thể hiệu quả trong một số thời gian nhưng không hiệu quả trong những thời gian khác.

Vì vậy, phạm vi ngày phải được kiểm tra cẩn thận, và không dựa vào một kết quả backtest.

Một rủi ro khác là không thể cắt giảm lỗ kịp thời khi hướng thay đổi hàng ngày.

Nhìn chung, chiến lược phụ thuộc rất nhiều vào tối ưu hóa và đòi hỏi phải thử nghiệm đủ để tìm các bộ tham số phù hợp với các điều kiện thị trường khác nhau.

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

Chiến lược có thể được cải thiện trong một số khía cạnh:

  1. Thêm logic dừng lỗ trên thay đổi hướng hàng ngày, thiết lập dừng lại khi các vị trí có lợi nhuận để hạn chế rút tiền.

  2. Thêm một bộ lọc, chỉ nhận tín hiệu khi phá vỡ mức cao / thấp trong ngày nhất định, tránh giao dịch mà không có xu hướng.

  3. Giảm kích thước vị trí trong các giai đoạn biến động cao và tăng khi biến động thấp để kiểm soát rủi ro.

  4. Thêm máy học để lựa chọn ngày giao dịch, đánh giá xác suất của mỗi ngày dựa trên dữ liệu lịch sử, tạo ra các hướng hàng ngày năng động.

  5. Thêm logic để xử lý các sự kiện đột ngột như tin tức lớn bằng cách tạm dừng giao dịch để tránh bị đánh bại.

Kết luận

Chiến lược này cung cấp khả năng giao dịch dài / ngắn rất linh hoạt thông qua lựa chọn hướng hàng ngày. Người dùng có thể tự do kết hợp thử nghiệm cho các thông số tối ưu. Nhưng nó có yêu cầu tối ưu hóa cao, cần thử nghiệm rộng rãi để tìm các thiết lập phù hợp với các thị trường khác nhau. Thêm các cải tiến như dừng, bộ lọc, điều chỉnh động có thể làm giảm rủi ro và cải thiện độ bền. Với tối ưu hóa tham số thận trọng, chiến lược có thể trở thành một công cụ giao dịch hướng hàng ngày hiệu quả.


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
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/

//@version=4
// strategy("Day of Week Custom Buy/Sell Strategy", overlay=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

timeframes = array.new_int(7, 1)
timeframes_options = array.new_string(7, 'None')

array.set(timeframes,0,7)
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='sunday'))
array.set(timeframes,1,1)
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='monday'))
array.set(timeframes,2,2)
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='tuesday'))
array.set(timeframes,3,3)
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='wednesday'))
array.set(timeframes,4,4)
array.set(timeframes_options,4, input(defval='None', options=['Long','Short','None'], title='thursday'))
array.set(timeframes,5,5)
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='friday'))
array.set(timeframes,6,6)
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='saturday'))



for i = 0 to array.size(timeframes) - 1
    
    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        strategy.close_all()

    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        if array.get(timeframes_options, i) == 'Long'
            strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
        else if array.get(timeframes_options, i) == 'Short'
            strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))


Thêm nữa