一个非常好用的获取指定交易日期的函数,可以指定以星期为单位调仓,指定星期几。也可以指定以月为单位调仓,指定第几天。
我们指定的调仓时间为周一,即使周一为节假日休市,也不使用周二作为调仓日。这里用到一个日期是星期几的获取函数:weekday()。如果 weekday() == 0,说明这个日期是周一。
import jqdata
import datetime
trans_fq = 'weekly' #设置调仓周期
start_date = '2023-01-01' #研究开始时间
end_date= '2023-01-31' #研究结束时间
# 获取交易日期
def get_tradedays(start_date, end_date, frq='weekly'):
result = []
tradedays_list = jqdata.get_trade_days(start_date = start_date, end_date=end_date)
if frq == 'daily':
result = tradedays_list
elif frq == 'weekly':
for i in range(len(tradedays_list)):
if tradedays_list[i].weekday() == 0:
result.append(tradedays_list[i])
elif frq == 'monthly':
for i in range(len(tradedays_list)):
if i == 0:
result.append(tradedays_list[i])
elif tradedays_list[i - 1].month < tradedays_list[i].month:
result.append(tradedays_list[i])
return result
trade_date_list = get_tradedays(start_date = start_date, end_date=end_date, frq = trans_fq)
print('\n调仓日:', trade_date_list)
输出:
[datetime.date(2023, 1, 9), datetime.date(2023, 1, 16), datetime.date(2023, 1, 30)]