Add ATR
This commit is contained in:
+16
-6
@@ -186,11 +186,18 @@ class ChinaStockData:
|
||||
"""将时间周期转换为akshare的period参数"""
|
||||
mapping = {
|
||||
'1m': '1', # 1分钟
|
||||
'3m': '5', # 3分钟 (A股不支持3分钟,使用5分钟替代)
|
||||
'5m': '5', # 5分钟
|
||||
'15m': '15', # 15分钟
|
||||
'30m': '30', # 30分钟
|
||||
'1h': '60', # 60分钟
|
||||
'2h': '60', # 2小时 (A股不支持2小时,使用1小时替代)
|
||||
'4h': '60', # 4小时 (A股不支持4小时,使用1小时替代)
|
||||
'6h': '60', # 6小时 (A股不支持6小时,使用1小时替代)
|
||||
'8h': '60', # 8小时 (A股不支持8小时,使用1小时替代)
|
||||
'12h': '60', # 12小时 (A股不支持12小时,使用1小时替代)
|
||||
'1d': 'daily', # 日线
|
||||
'3d': 'daily', # 3日 (A股不支持3日,使用日线替代)
|
||||
'1w': 'weekly',# 周线
|
||||
'1M': 'monthly'# 月线
|
||||
}
|
||||
@@ -235,7 +242,7 @@ class ChinaStockData:
|
||||
# 分钟级数据,每次获取7天
|
||||
batch_days = 7
|
||||
elif period == '60':
|
||||
# 小时级数据,每次获取30天
|
||||
# 小时级数据(所有小时级别都映射到60分钟),每次获取30天
|
||||
batch_days = 30
|
||||
else:
|
||||
# 日线及以上,每次获取365天
|
||||
@@ -587,7 +594,7 @@ class ChinaStockData:
|
||||
df['date'] = df['date'].dt.normalize() + pd.Timedelta(hours=15)
|
||||
|
||||
# 对于分钟级数据,过滤非交易时间的数据
|
||||
elif timeframe in ['1m', '5m', '15m', '30m', '1h']:
|
||||
elif timeframe in ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h']:
|
||||
# 过滤交易日
|
||||
df = df[df['date'].apply(self.is_trading_day)]
|
||||
|
||||
@@ -651,7 +658,7 @@ class ChinaStockData:
|
||||
return df
|
||||
|
||||
# 对于分钟级数据,创建完整的交易时间序列
|
||||
if timeframe in ['1m', '5m', '15m', '30m', '1h']:
|
||||
if timeframe in ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h']:
|
||||
# 获取数据的开始和结束时间
|
||||
start_date = df['date'].min().date()
|
||||
end_date = df['date'].max().date()
|
||||
@@ -660,8 +667,11 @@ class ChinaStockData:
|
||||
complete_times = []
|
||||
current_date = start_date
|
||||
|
||||
# 获取时间间隔(分钟)
|
||||
freq_map = {'1m': 1, '5m': 5, '15m': 15, '30m': 30, '1h': 60}
|
||||
# 获取时间间隔(分钟)- 注意A股新增的时间周期都映射到了已有的时间间隔
|
||||
freq_map = {
|
||||
'1m': 1, '3m': 5, '5m': 5, '15m': 15, '30m': 30,
|
||||
'1h': 60, '2h': 60, '4h': 60, '6h': 60, '8h': 60, '12h': 60
|
||||
}
|
||||
freq_minutes = freq_map.get(timeframe, 5)
|
||||
|
||||
while current_date <= end_date:
|
||||
@@ -769,7 +779,7 @@ class ChinaStockData:
|
||||
df[col] = df[col].replace([np.nan, np.inf, -np.inf], 0)
|
||||
|
||||
# 确保时间序列连续性(仅对分钟级数据)
|
||||
if timeframe in ['1m', '5m', '15m', '30m', '1h']:
|
||||
if timeframe in ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h']:
|
||||
df = self.fill_trading_gaps(df, timeframe)
|
||||
|
||||
# 最后再次检查并清理任何剩余的NaN值
|
||||
|
||||
Reference in New Issue
Block a user