Ý tưởng chính của chiến lược đặt hàng theo thời gian là thực hiện các hoạt động mua và bán tại các thời điểm được xác định bởi người dùng. Chiến lược này cho phép người dùng đặt một thời điểm chính xác. Tại thời điểm này, nó sẽ đầu tiên bán vị trí hiện tại, và sau đó đặt lệnh mua giới hạn ở mức 1% dưới giá hiện tại. Điều này cho phép tái cân bằng định kỳ được thực hiện tại một thời điểm cụ thể mỗi ngày.
Chiến lược đầu tiên sử dụng hàm đầu vào để có được giờ và phút tùy chỉnh được xác định bởi người dùng, và sau đó tạo ra thời gian thực hiện lệnh bằng chức năng dấu thời gian.
Cụ thể, chiến lược kiểm tra trước tiên xem thời gian hiện tại có nằm trong phạm vi ngày bắt đầu và ngày kết thúc do người dùng xác định không. Nếu có, khi đạt đến thời điểm thực hiện lệnh được chỉ định, nó sẽ bán đầu tiên vị trí hiện tại theo giá thị trường, và sau đó đặt lệnh mua giới hạn ở mức 99% giá hiện tại. Điều này đạt được sự cân bằng lại ở mức giá thấp hơn 1% so với giá hiện tại tại thời điểm cụ thể.
Lợi thế lớn nhất của chiến lược này là nó có thể định kỳ cân bằng lại các vị trí tại các thời điểm cụ thể mà không cần can thiệp bằng tay, giảm chi phí lao động.
Những lợi ích cụ thể bao gồm:
Hoạt động hoàn toàn tự động, giảm chi phí thủ công.
Cho phép tái cân bằng định kỳ các vị trí tại các thời điểm cụ thể.
Nhận được cơ hội mua cực thấp khoảng 1% dưới giá hiện tại trong mỗi lần tái cân bằng.
Thời gian tái cân bằng tùy chỉnh, điều chỉnh linh hoạt.
Ngày bắt đầu và kết thúc có thể tùy chỉnh cho các chu kỳ cân bằng lại, thuận tiện cho tối ưu hóa backtesting.
Chiến lược cũng có một số rủi ro cần lưu ý:
Nếu thời điểm tái cân bằng định kỳ được chọn sai, nó có thể bỏ lỡ cơ hội mua tốt hơn hoặc bán ra vào thời điểm không phù hợp.
Giá mua chỉ thấp hơn 1% so với giá bán, có thể không đạt được mức chênh lệch giá mua cực thấp trong mỗi chu kỳ tái cân bằng.
Cả hai bán và mua là lệnh thị trường, có thể bị một số mức độ trượt.
Nếu chiến lược chỉ hoạt động tại các thời điểm cụ thể, thị trường không thể được quản lý giữa các thời điểm đó.
Việc tái cân bằng thường xuyên sẽ gây ra phí giao dịch tương đối cao.
Các giải pháp tương ứng:
Chọn các thời điểm tái cân bằng thích hợp, cũng kết hợp với các chỉ số kỹ thuật khác.
Tăng tham số chênh lệch giá mua nếu thích hợp.
Chọn các sản phẩm có độ sâu tốt và biến động thấp.
Kết hợp với các chiến lược quản lý rủi ro khác trong thời gian không tái cân bằng.
Kiểm soát tần suất tái cân bằng phù hợp để cân bằng lợi thế và chi phí giao dịch.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tối ưu hóa lựa chọn thời điểm tái cân bằng dựa trên các đặc điểm chu kỳ trong ngày của các sản phẩm giao dịch.
Thêm các chỉ số kỹ thuật khác để tránh tái cân bằng vào thời điểm không thuận lợi. ví dụ, kết hợp các chỉ số xu hướng trung bình động.
Tối ưu hóa tham số mua cực thấp để cân bằng lợi thế và chi phí giao dịch.
Sử dụng stop loss/take profit để quản lý các vị trí giữa các lần tái cân bằng.
Sử dụng các thuật toán học máy để đào tạo trên dữ liệu lịch sử và tự động tối ưu hóa các điểm thời gian tái cân bằng.
Thêm điều chỉnh xung quanh chia cổ phiếu, cổ tức vv để theo dõi thay đổi thời gian.
Nói chung, chiến lược đặt hàng theo thời gian có thể tự động hóa quy trình giao dịch và giảm chi phí hoạt động thủ công thông qua tái cân bằng định kỳ. Có nhiều chỗ để tối ưu hóa trong các lĩnh vực như lựa chọn điểm thời gian tái cân bằng, cài đặt tham số mua, dừng lỗ / lấy lợi nhuận và cải thiện thuật toán. Cũng cần lưu ý một số rủi ro giao dịch và thực hiện các biện pháp quản lý rủi ro thích hợp. Nhìn chung, chiến lược này phù hợp với các nhà giao dịch định lượng tìm kiếm tái cân bằng tự động hiệu quả.
/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 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/ // © ytrevor //@version=4 strategy("Order At Specified Time", overlay=true) // -- These inputs are for customizing the times of your desired orders -- // customHour = input(title="Hour for Order Execution", type=input.integer, defval=01, minval=00, maxval=24) // customMinute = input(title="Minute for Order Execution", type=input.integer, defval=00, minval=00, maxval=59) targetTime = timestamp("UTC", year, month, dayofmonth, customHour, customMinute, 00) //Order executes at this time inDateRange = (time >= targetTime) and (time <= targetTime) //Orders are placed everyday at 01:00 UTC, or any other time specified via input // -- These inputs are for back testing. Feel free to change the start and end dates via input -- // startDay = input(title="Start Day", type=input.integer, defval=10, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=2, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2021) endDay = input(title="End Day", type=input.integer, defval=22, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=3, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2021) betweenDates = true // -- Order execution -- // if betweenDates buyPrice = close*0.99 //Buy at 1% lower than selling price strategy.entry("Sell", strategy.short, when=inDateRange) //Sell at 01:00 UTC, or at any other time specified via input strategy.entry("Buy", strategy.long, limit=buyPrice, when=inDateRange) //Buy limit order placed at the same time, 1% lower than selling price