金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2460|回复: 1

请大神完善多周期指标

[复制链接]

1

主题

7

帖子

7

积分

Rank: 1

等级: 新手上路

注册:
2023-11-8
曾用名:
发表于 2023-11-13 18:28 | 显示全部楼层 |阅读模式
下面是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
哪位可以帮助完善一下,使得多周期指标与软件一样。

回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-11-13 21:16 | 显示全部楼层
抱歉,这不属于金字塔自身python接口问题。已经超出技术支持范畴
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-8-1 20:56 , Processed in 0.085568 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表