场景:在vba写好的函数/策略,如何使用python调取出来
举一个更具体的例子,想检验一个单因子是否有效,如何用最简单的方法,最快速的方法,可以在把所有的原始数据调到python上进行下一步数据分析呢?再比如任意一个在投研端写好的VBA函数/策略,如何使用python调取全市场该函数所计算后的结果呢?
第一步:创建一个VBA策略(假设投研端已经有写好的策略,可直接跳到第二步)
以财务费用TTM这个单因子为例,首先在VBA中新建策略,然后更改策略名字为财务费用TTM

代码:
//利润表
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读取生成的扩展数据
读取结果:

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

投研端:数据一致

🚀️ 生成好了所需要的单因子数据,接下来用户们可以按照自己的思路,对因子原始值做下一步的处理与研究。单因子数据只是VBA策略里的一个例子,所有的内置指标和VBA里自定义的指标策略,都可以按照上述方法生成扩展数据。
不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!
欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。
只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”
