
Chiến lược quyền mua và bán theo khoảng thời gian là một chiến lược sử dụng giá cả của cổ phiếu trong các khoảng thời gian khác nhau trong ngày. Nó sẽ xác định thời gian giao dịch tốt nhất trong khoảng thời gian 48 giờ rưỡi trong ngày.
Lý luận cốt lõi của chiến lược này là cổ phiếu có thể di chuyển theo quy luật trong các khoảng thời gian khác nhau trong ngày. Chiến lược này được thiết lập bằng cách thiết lập một khoảng thời gian 48 giờ rưỡi và trong mỗi khoảng thời gian, bạn có ba lựa chọn để thực hiện nhiều, trống hoặc không hoạt động. Khi thời gian vào một khoảng thời gian, nếu thiết lập nhiều, bạn sẽ mở một vị trí nhiều; nếu thiết lập trống, bạn sẽ mở một vị trí trống.
Ví dụ, nếu thiết lập để làm nhiều từ 6 giờ 30 phút đến 7 giờ, chiến lược sẽ làm nhiều vào lúc 6 giờ 30 phút; nếu thiết lập để làm trống từ 7 giờ đến 7 giờ 30 phút, chiến lược sẽ xóa nhiều lệnh trước đó trước 7 giờ, sau đó mở trống vào 7 giờ.
Ưu điểm của chiến lược này là có thể nắm bắt các định luật thay đổi giá của cổ phiếu trong một ngày. Rủi ro là các định luật thay đổi giá có thể thay đổi theo thời gian, do đó dẫn đến chiến lược không hiệu quả.
Ưu điểm lớn nhất của chiến lược này là sử dụng tính năng của giá trị cổ phiếu là đúng, tức là giá có giá trị trung bình và chênh lệch khác nhau trong các khoảng thời gian khác nhau. Điều này cho phép chiến lược sử dụng chiến lược giao dịch phạm vi trong thời gian có biến động lớn, sử dụng chiến lược xu hướng trong thời gian có biến động nhỏ, và linh hoạt đối phó với sự thay đổi của thị trường.
Một lợi thế khác là tính linh hoạt trong thiết lập các tham số. Bạn có thể chọn các tham số phù hợp nhất dựa trên các đặc điểm của các cổ phiếu khác nhau, để bảo hiểm rủi ro không chắc chắn một phần.
Rủi ro chính là do sự biến động giả định. Nếu giá cổ phiếu thay đổi trong một ngày, thì kỳ vọng lợi nhuận của chiến lược sẽ bị ảnh hưởng. Sự thay đổi này có thể xuất phát từ các nguyên tắc cơ bản của cổ phiếu hoặc có thể xuất phát từ các sự kiện thiên nga đen trong môi trường lớn.
Ngoài ra, giao dịch quá thường xuyên cũng gây ra rủi ro về phí giao dịch. Nếu không có đủ khối lượng giao dịch hỗ trợ, sự tích tụ phí giao dịch cũng sẽ ảnh hưởng đến thu nhập cuối cùng.
Có thể xem xét việc giới thiệu mô hình học máy để thực hiện điều chỉnh động của tham số. Ví dụ, đào tạo mô hình LSTM để dự đoán giá cổ phiếu trong khoảng thời gian tiếp theo và điều chỉnh các tham số để làm thêm trống.
Hoặc, bạn có thể thử kết hợp các chỉ số cơ bản của cổ phiếu để xác định xem có khả năng thay đổi quy luật biến động giá hay không, để xác định thời điểm bắt đầu chiến lược.
Chiến lược giao dịch quyền lực thời gian bằng cách phân tích các quy luật thay đổi giá của cổ phiếu trong một ngày, thực hiện các hành động tối ưu trong các khoảng thời gian khác nhau để có được Alpha. Đây là một chiến lược giao dịch thuật toán hiệu quả, có thể điều chỉnh các tham số linh hoạt, có thể kiểm soát rủi ro.
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 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/
//@version=4
strategy("Timeframe Time of Day Buying and Selling Strategy", overlay=true)
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_string(48, '')
timeframes_options = array.new_string(49, 'None')
array.set(timeframes,0,'2330-0000')
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='0000-0030'))
array.set(timeframes,1,'0000-0030')
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='0030-0100'))
array.set(timeframes,2,'0030-0100')
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='0100-0130'))
array.set(timeframes,3,'0100-0130')
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='0130-0200'))
array.set(timeframes,4,'0130-0200')
array.set(timeframes_options,4, input(defval='Long', options=['Long','Short','None'], title='0200-0230'))
array.set(timeframes,5,'0200-0230')
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='0230-0300'))
array.set(timeframes,6,'0230-0300')
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='0300-0330'))
array.set(timeframes,7,'0300-0330')
array.set(timeframes_options,7, input(defval='None', options=['Long','Short','None'], title='0330-0400'))
array.set(timeframes,8,'0330-0400')
array.set(timeframes_options,8, input(defval='None', options=['Long','Short','None'], title='0400-0430'))
array.set(timeframes,9,'0400-0430')
array.set(timeframes_options,9, input(defval='None', options=['Long','Short','None'], title='0430-0500'))
array.set(timeframes,10,'0430-0500')
array.set(timeframes_options,10, input(defval='None', options=['Long','Short','None'], title='0500-0530'))
array.set(timeframes,11,'0500-0530')
array.set(timeframes_options,11, input(defval='None', options=['Long','Short','None'], title='0530-0600'))
array.set(timeframes,12,'0530-0600')
array.set(timeframes_options,12, input(defval='None', options=['Long','Short','None'], title='0600-0630'))
array.set(timeframes,13,'0600-0630')
array.set(timeframes_options,13, input(defval='None', options=['Long','Short','None'], title='0630-0700'))
array.set(timeframes,14,'0630-0700')
array.set(timeframes_options,14, input(defval='None', options=['Long','Short','None'], title='0700-0730'))
array.set(timeframes,15,'0700-0730')
array.set(timeframes_options,15, input(defval='None', options=['Long','Short','None'], title='0730-0800'))
array.set(timeframes,16,'0730-0800')
array.set(timeframes_options,16, input(defval='None', options=['Long','Short','None'], title='0800-0830'))
array.set(timeframes,17,'0800-0830')
array.set(timeframes_options,17, input(defval='None', options=['Long','Short','None'], title='0830-0900'))
array.set(timeframes,18,'0830-0900')
array.set(timeframes_options,18, input(defval='None', options=['Long','Short','None'], title='0900-0930'))
array.set(timeframes,19,'0900-0930')
array.set(timeframes_options,19, input(defval='None', options=['Long','Short','None'], title='0930-1000'))
array.set(timeframes,20,'0930-1000')
array.set(timeframes_options,20, input(defval='None', options=['Long','Short','None'], title='1000-1030'))
array.set(timeframes,21,'1000-1030')
array.set(timeframes_options,21, input(defval='None', options=['Long','Short','None'], title='1030-1100'))
array.set(timeframes,22,'1030-1100')
array.set(timeframes_options,22, input(defval='None', options=['Long','Short','None'], title='1100-1130'))
array.set(timeframes,23,'1100-1130')
array.set(timeframes_options,23, input(defval='None', options=['Long','Short','None'], title='1130-1200'))
array.set(timeframes,24,'1130-1200')
array.set(timeframes_options,24, input(defval='None', options=['Long','Short','None'], title='1200-1230'))
array.set(timeframes,25,'1200-1230')
array.set(timeframes_options,25, input(defval='None', options=['Long','Short','None'], title='1230-1300'))
array.set(timeframes,26,'1230-1300')
array.set(timeframes_options,26, input(defval='None', options=['Long','Short','None'], title='1300-1330'))
array.set(timeframes,27,'1300-1330')
array.set(timeframes_options,27, input(defval='None', options=['Long','Short','None'], title='1330-1400'))
array.set(timeframes,28,'1330-1400')
array.set(timeframes_options,28, input(defval='None', options=['Long','Short','None'], title='1400-1430'))
array.set(timeframes,29,'1400-1430')
array.set(timeframes_options,29, input(defval='None', options=['Long','Short','None'], title='1430-1500'))
array.set(timeframes,30,'1430-1500')
array.set(timeframes_options,30, input(defval='None', options=['Long','Short','None'], title='1500-1530'))
array.set(timeframes,31,'1500-1530')
array.set(timeframes_options,31, input(defval='None', options=['Long','Short','None'], title='1530-1600'))
array.set(timeframes,32,'1530-1600')
array.set(timeframes_options,32, input(defval='None', options=['Long','Short','None'], title='1600-1630'))
array.set(timeframes,33,'1600-1630')
array.set(timeframes_options,33, input(defval='None', options=['Long','Short','None'], title='1630-1700'))
array.set(timeframes,34,'1630-1700')
array.set(timeframes_options,34, input(defval='None', options=['Long','Short','None'], title='1700-1730'))
array.set(timeframes,35,'1700-1730')
array.set(timeframes_options,35, input(defval='None', options=['Long','Short','None'], title='1730-1800'))
array.set(timeframes,36,'1730-1800')
array.set(timeframes_options,36, input(defval='None', options=['Long','Short','None'], title='1800-1830'))
array.set(timeframes,37,'1800-1830')
array.set(timeframes_options,37, input(defval='None', options=['Long','Short','None'], title='1830-1900'))
array.set(timeframes,38,'1830-1900')
array.set(timeframes_options,38, input(defval='None', options=['Long','Short','None'], title='1900-0930'))
array.set(timeframes,39,'1900-0930')
array.set(timeframes_options,39, input(defval='None', options=['Long','Short','None'], title='1930-2000'))
array.set(timeframes,40,'1930-2000')
array.set(timeframes_options,40, input(defval='None', options=['Long','Short','None'], title='2000-2030'))
array.set(timeframes,41,'2000-2030')
array.set(timeframes_options,41, input(defval='None', options=['Long','Short','None'], title='2030-2100'))
array.set(timeframes,42,'2030-2100')
array.set(timeframes_options,42, input(defval='None', options=['Long','Short','None'], title='2100-2130'))
array.set(timeframes,43,'2100-2130')
array.set(timeframes_options,43, input(defval='None', options=['Long','Short','None'], title='2130-2200'))
array.set(timeframes,44,'2130-2200')
array.set(timeframes_options,44, input(defval='None', options=['Long','Short','None'], title='2200-2230'))
array.set(timeframes,45,'2200-2230')
array.set(timeframes_options,45, input(defval='None', options=['Long','Short','None'], title='2230-2300'))
array.set(timeframes,46,'2230-2300')
array.set(timeframes_options,46, input(defval='None', options=['Long','Short','None'], title='2300-2330'))
array.set(timeframes,47,'2300-2330')
array.set(timeframes_options,47, input(defval='None', options=['Long','Short','None'], title='2330-0000'))
string_hour = hour<10?'0'+tostring(hour):tostring(hour)
string_minute = minute<10?'0'+tostring(minute):tostring(minute)
current_time = string_hour+string_minute
f_strLeft(_str, _n) =>
string[] _chars = str.split(_str, "")
int _len = array.size(_chars)
int _end = min(_len, max(0, _n))
string[] _substr = array.new_string(0)
if _end <= _len
_substr := array.slice(_chars, 0, _end)
string _return = array.join(_substr, "")
f_strRight(_str, _n) =>
string[] _chars = str.split(_str, "")
int _len = array.size(_chars)
int _beg = max(0, _len - _n)
string[] _substr = array.new_string(0)
if _beg < _len
_substr := array.slice(_chars, _beg, _len)
string _return = array.join(_substr, "")
for i = 0 to array.size(timeframes) - 1
start_time = f_strLeft(array.get(timeframes, i), 4)
end_time = f_strRight(array.get(timeframes, i), 4)
if current_time == end_time and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==47?0:i+1) and timestamp(toyear, tomonth, today, 00, 00)
strategy.close_all()
if current_time == start_time and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?47: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)))