如何自动获取排除节假日的最近10个交易日NSE历史数据
自动获取NSE期货最近10个交易日历史数据的修改方案
问题背景
原代码通过固定timedelta(days=15)倒推起始日期获取数据,但无法自动排除周六、周日及NSE交易节假日,需手动调整参数。需求改为自动获取最近10个交易日的数据,无需手动设置天数。
修改思路
直接按自然日倒推无法过滤非交易日,因此采用以下方案:
- 先获取一段足够长的日期范围(比如过去30天,确保包含至少10个交易日)的指数数据(如NIFTY,流动性高且数据稳定)。
- 从返回的DataFrame中提取已自动过滤好的交易日列表,取最后10个交易日的日期作为起止范围。
- 用筛选后的起止日期调用
get_history获取目标期货数据。
修改后的完整代码
from datetime import timedelta, date from nsepy import get_history def get_last_n_trading_days(n=10): # 取过去30天作为初始范围,确保覆盖足够多的交易日 end_date = date.today() start_date = end_date - timedelta(days=30) # 借助NIFTY指数获取这段时间的交易日数据(index=True表示获取指数数据) dummy_index_data = get_history(symbol="NIFTY", start=start_date, end=end_date, index=True) # 提取交易日列表,取最后n个 trading_days = dummy_index_data.index[-n:] # 返回最早和最晚的交易日作为起止日期 return trading_days[0].date(), trading_days[-1].date() def importdata(stock): # 获取最近10个交易日的起止日期 start_date, end_date = get_last_n_trading_days(10) stock_fut = get_history(symbol=stock, start=start_date, end=end_date, futures=True, expiry_date=date(2022,7,28)) print(stock_fut[["Underlying","Change in OI","Open Interest"]]) # 目标股票列表 stock_list = ["MARUTI","HEROMOTOCO","BAJAJ-AUTO","M&M","EICHERMOT"] for stock in stock_list: print(stock) importdata(stock)
关键说明
get_last_n_trading_days函数:通过获取NIFTY指数的历史数据,利用其返回结果的index(已自动过滤非交易日)提取准确的交易日,避免手动处理节假日和周末。- 初始范围设为30天是为了确保即使遇到连续节假日,也能覆盖足够多的交易日,保证能取到10个有效交易日。
- 遍历股票列表时改用
for stock in stock_list的写法,比原代码的range遍历更简洁易读。
内容的提问来源于stack exchange,提问作者Brijesh Chaurasia
相关产品推荐
相关产品推荐

