You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动获取排除节假日的最近10个交易日NSE历史数据

自动获取NSE期货最近10个交易日历史数据的修改方案

问题背景

原代码通过固定timedelta(days=15)倒推起始日期获取数据,但无法自动排除周六、周日及NSE交易节假日,需手动调整参数。需求改为自动获取最近10个交易日的数据,无需手动设置天数。

修改思路

直接按自然日倒推无法过滤非交易日,因此采用以下方案:

  1. 先获取一段足够长的日期范围(比如过去30天,确保包含至少10个交易日)的指数数据(如NIFTY,流动性高且数据稳定)。
  2. 从返回的DataFrame中提取已自动过滤好的交易日列表,取最后10个交易日的日期作为起止范围。
  3. 用筛选后的起止日期调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:27:21