返回列表 发布新帖

生成扩展数据(generate_index_data)

2106 0
发表于 2024-9-24 17:01:04 | 显示全部楼层 阅读模式

场景:在vba写好的函数/策略,如何使用python调取出来

举一个更具体的例子,想检验一个单因子是否有效,如何用最简单的方法,最快速的方法,可以在把所有的原始数据调到python上进行下一步数据分析呢?再比如任意一个在投研端写好的VBA函数/策略,如何使用python调取全市场该函数所计算后的结果呢?

第一步:创建一个VBA策略(假设投研端已经有写好的策略,可直接跳到第二步)

以财务费用TTM这个单因子为例,首先在VBA中新建策略,然后更改策略名字为财务费用TTM

财务费用TTM.gif

代码:

//利润表
ASHAREINCOME:='ASHAREINCOME';
tt : getfindatabyperiod(ASHAREINCOME,'m_timetag',0,0,0);
current_date:=strleft(timestamptostr(tt / 1000),8);
日期: current_date;
nian:=strtonum(strleft(current_date,4));

if strright(current_date, 4)='1231' then begin
   jidu:=4;
end
if strright(current_date, 4)='0331' then begin 
   jidu:=1;
end
if strright(current_date, 4)='0630' then begin 
   jidu:=2;
end
if strright(current_date, 4)='0930' then begin 
   jidu:=3;
end
//财务费用TTM
financial_expense := 'financial_expense';
当期财务费用 := getfindatabyperiod(ASHAREINCOME, financial_expense, nian, jidu, 0), nodraw;
去年同期财务费用 := getfindatabyperiod(ASHAREINCOME, financial_expense, nian-1, jidu, 0), nodraw;
去年末财务费用 := getfindatabyperiod(ASHAREINCOME, financial_expense, nian-1, 4, 0), nodraw;
财务费用TTM : 当期财务费用 - 去年同期财务费用 + 去年末财务费用; 

第二步:打开原生python,导入generate_index_data的函数

先介绍一下generate_index_data这个函数,该函数是生成vba策略中的扩展数据,以下代码为该函数所需要传入的参数说明。生成后的数据为feather格式并储存在用户指定的路径。

Feather 文件格式在读写速度上显著优于 CSV,特别是在处理大规模数据集时。具体来说:

读写速度极快:Feather 文件的读写速度通常比 CSV 快几个数量级,因为它采用高效的二进制列式存储结构,减少了解析文本的时间开销。

CPU 和内存效率高:由于 Feather 是一种二进制格式,它能更有效地利用 CPU 和内存资源,减少加载和处理数据所需的时间。

👀️ def generate_index_data(
    formula_name, formula_param = {}
    , stock_list = [], period = '1d', dividend_type = 'none'
    , start_time = '', end_time = ''
    , fill_mode = 'fixed', fill_value = float('nan')
    , result_path = None
):
    '''
    formula_name:
        str 模型名称
    formula_param:
        dict 模型参数
            例如 {'param1': 1.0, 'param2': 'sym'}
    stock_list:
        list 股票列表
    period:
        str 周期
            '1m' '5m' '1d'
    dividend_type:
        str 复权方式
            'none' - 不复权
            'front_ratio' - 等比前复权
            'back_ratio' - 等比后复权
    start_time:
        str 起始时间 '20240101' '20240101000000'
        '' - '19700101'
    end_time:
        str 结束时间 '20241231' '20241231235959'
        '' - '20380119'
    fill_mode:
        str 空缺填充方式
            'fixed' - 固定值填充
            'forward' - 向前延续
    fill_value:
        float 填充数值
            float('nan') - 以NaN填充
    result_path:
        str 结果文件路径,feather格式
    '''

具体事例:

在第一步当中我们创建了一个财务费用TTM这个因子的公式,下面事例为调取沪深300中,以开始日期为2024年1月1日,到2024年9月21日的所有财务费用TTM的数据。

👀️ 小提示: 需要先下载引用标的的历史数据

代码如下:


from xtquant import xtdata

result_path = r"C:\Users\Administrator\Desktop\a\b\c.fe"
ls = xtdata.get_stock_list_in_sector("沪深300")
k = "财务费用TTM"
xtdata.download_history_data2(ls,'1d')
xtdata.generate_index_data(
    formula_name=k, # 模型名
    formula_param={}, # 模型参数
    stock_list=ls, # 标的列表
    period="1d", # 数据周期
    dividend_type="none" , # 复权方式
    start_time="20240101", # 数据开始时间
    end_time="20240921", # 数据结束时间
    fill_mode="fixed", # 空值填充方式
    fill_value=float("nan"), # 指定填充的值
    result_path=result_path # 扩展数据存放位置
    )   
x=xtdata.read_feather(r'C:\Users\Administrator\Desktop\a\b\c.fe')
print(x)

讲解:

1.首先先建立了一个下载数据存储的路径

2.拿到沪深300的股票标的(ls)

3.k为第一步在投研端VBA所建立的策略名称

4.下载标的的历史数据

5.使用generate_index_data生成扩展数据

6.使用函数read_feather读取生成的扩展数据

读取结果:

image.png

验证:

以最后一个标的的财务费用TTM数据验证:301269.SZ 财务费用TTM,python调取的数据为-62807754元

image.png

投研端:数据一致

image.png

🚀️ 生成好了所需要的单因子数据,接下来用户们可以按照自己的思路,对因子原始值做下一步的处理与研究。单因子数据只是VBA策略里的一个例子,所有的内置指标和VBA里自定义的指标策略,都可以按照上述方法生成扩展数据。

不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!

欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。

只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”

企业微信截图_17235220909173.png

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表