步步汇盈
标题:
python多周期指标如何准确表达
[打印本页]
作者:
临沧海
时间:
2023-11-13 18:18
标题:
python多周期指标如何准确表达
本帖最后由 临沧海 于 2023-11-13 18:27 编辑
下面是python语言表达cr指标的代码,日线准确,但多周期线与软件不一致。
import pandas as pd
from stockstats import StockDataFrame
def calculate_CR(filepath):
# 读取文件数据
df = pd.read_table(filepath,
names=['date', 'open', 'high', 'low', 'close', 'vol', 'value'],
index_col=0, sep=' ', parse_dates=['date'])
#获取各周期指标
stock = StockDataFrame.retype(df) # 使用 StockDataFrame 类处理原始数据 df,将其转换为股票数据类型
CR = stock['cr'] # 获取 CR 指标数据
# 将每日数据转换为特定频率下的数据
d2_data = stock.resample('2D').last() # 转换为每两天的数据
d2_data.index -= pd.DateOffset(days=-1) # 调整索引日期,推迟显示1天
weekly_data = stock.resample('W').last() # 转换为每周数据
weekly_data.index -= pd.DateOffset(days=2) # 调整索引日期,提前2天出
monthly_data = stock.resample('M').last() # 转换为每月数据
monthly_data.index = monthly_data.index.to_period('M').to_timestamp('M') + pd.offsets.MonthEnd(1) # 将索引调整为每月最后一天
daily_data = stock.resample('D').last() # 转换为每日数据
# 创建一个日期范围,覆盖您的数据日期范围
date_range = pd.date_range(start=daily_data.index.min(), end=daily_data.index.max(), freq='B')
# 创建一个新的DataFrame,索引为交易日日期
df = pd.DataFrame(index=date_range)
# 将每个交易数据列填充到同一频率,并加入到新的DataFrame中
#上面对df进行了重新索引、填充缺失值以及删除空行操作,行情数据变了,需要重新输入
df['open'] = daily_data['open']
df['high'] = daily_data['high']
df['low'] = daily_data['low']
df['close'] = daily_data['close']
df = df.reindex(daily_data.index) # 重新索引 DataFrame,以保留原始日期顺序并插入缺失的日期
df['CR_1'] = CR
df['CR_2'] = d2_data['cr'].resample('D').last().fillna(method='bfill') # 使用每两天的数据填充缺失值
df['CR_2'].fillna(df['CR_2'].mean(), inplace=True) # 使用均值填充 CR_2 列的缺失值
df['CR_5'] = weekly_data['cr'].resample('D').last().fillna(method='bfill') # 使用每周数据填充缺失值
df['CR_20'] = monthly_data['cr'].resample('D').last().fillna(method='bfill')
# 对新的DataFrame进行重新索引,以保留原始日期顺序并插入缺失的日期
df = df.reindex(pd.date_range(start=df.index.min(), end=df.index.max(), freq='B'))
df = df.dropna(subset=['CR_1']) # 以 CR_1 列为基准,删除空行
#df.to_excel('output.xlsx') #输出df
return df[['CR_1', 'CR_2', 'CR_5', 'CR_20']]
if __name__ == '__main__':
filepath = 'stockdata.txt' # 文件路径,请根据实际情况修改
result = calculate_CR(filepath)
print(result)
result.to_excel('output.xlsx') #输出df
哪位可以帮助完善一下,使得多周期指标与软件一样。
欢迎光临 步步汇盈 (http://bbs.58851.com/)
Powered by Discuz! X3.2