58 lines
2.5 KiB
Python
58 lines
2.5 KiB
Python
# 导入必要的模块
|
||
import json # 用于处理JSON格式的数据
|
||
import os # 用于文件路径操作
|
||
|
||
|
||
def get_data_in_range(ticker, start_date, end_date, data_type, data_dir, period=None):
|
||
"""
|
||
从本地磁盘获取已保存和处理的FinnHub数据
|
||
|
||
这个函数不是直接调用FinnHub API,而是从本地JSON文件中读取预先下载的数据
|
||
|
||
参数说明:
|
||
ticker (str): 股票代码,例如 'AAPL' 代表苹果公司
|
||
start_date (str): 开始日期,格式为 YYYY-MM-DD,例如 '2024-01-01'
|
||
end_date (str): 结束日期,格式为 YYYY-MM-DD,例如 '2024-01-31'
|
||
data_type (str): 要获取的数据类型,可以是以下之一:
|
||
- 'insider_trans': 内部交易数据
|
||
- 'SEC_filings': SEC文件数据
|
||
- 'news_data': 新闻数据
|
||
- 'insider_senti': 内部人员情绪数据
|
||
- 'fin_as_reported': 财务报告数据
|
||
data_dir (str): 数据保存的目录路径
|
||
period (str): 报告周期,默认为None。如果指定,应该是 'annual'(年度)或 'quarterly'(季度)
|
||
|
||
返回值:
|
||
dict: 过滤后的数据字典,键为日期,值为该日期的数据列表
|
||
"""
|
||
|
||
# 根据是否有报告周期来构建文件路径
|
||
if period:
|
||
# 如果有报告周期,文件名包含周期信息
|
||
data_path = os.path.join(
|
||
data_dir, # 数据目录
|
||
"finnhub_data", # FinnHub数据子目录
|
||
data_type, # 数据类型子目录
|
||
f"{ticker}_{period}_data_formatted.json", # 文件名格式:股票代码_周期_数据格式.json
|
||
)
|
||
else:
|
||
# 如果没有报告周期,使用默认文件名
|
||
data_path = os.path.join(
|
||
data_dir, "finnhub_data", data_type, f"{ticker}_data_formatted.json"
|
||
)
|
||
|
||
# 打开并读取JSON文件
|
||
data = open(data_path, "r") # 以只读模式打开文件
|
||
data = json.load(data) # 将JSON文件内容解析为Python字典
|
||
|
||
# 根据日期范围过滤数据
|
||
# 只保留在指定日期范围内且有数据的条目
|
||
filtered_data = {}
|
||
for key, value in data.items():
|
||
# key是日期字符串,value是该日期的数据列表
|
||
# 检查日期是否在范围内,且数据不为空
|
||
if start_date <= key <= end_date and len(value) > 0:
|
||
filtered_data[key] = value # 将符合条件的数据添加到结果中
|
||
|
||
return filtered_data # 返回过滤后的数据
|