生成α因子

alpha-factor的Python项目详细描述


这个程序是自动生成α因子和滤波器 相对较好的因素与反测试方法。耗时部件 使用numba包进行优化。

依赖关系

  • python>;=3.5
  • 熊猫>;=0.22.0
  • numpy=1.14.0
  • rnws>;=0.2.1
  • numba=0.38.0
  • 单因素模型>;=0.3.0
  • iPython 5.1.0版
  • 英语
  • 字母镜头

注意:最好使用最新版本的llvmlite,以便 使numba正常工作。否则可能导致内核死亡 情况。

示例

加载包并读入数据

fromalpha_factoryimportgenerator_class,get_memory_use_pct,cleanfromRNWSimportreadimportnumpyasnpimportpandasaspdstart=20180101end=20180331factor_path='.'frame_path='.'df=pd.read_csv(frame_path+'/frames.csv')## read in datare=read.read_df('./re',file_pattern='re',start=start,end=end)cap=read.read_df('./cap',file_pattern='cap',header=0,dat_col='cap',start=start,end=end)open_price,close,vwap,adj,high,low,volume,sus=read.read_df('./mkt_data',file_pattern='mkt',start=start,end=end,header=0,dat_col=['open','close','vwap','adjfactor','high','low','volume','sus'])ind1,ind2,ind3=read.read_df('./ind',file_pattern='ind',start=start,end=end,header=0,dat_col=['level1','level2','level3'])inx_weight=read.read_df('./ZZ800_weight','Stk_ZZ800',start=start,end=end,header=None,inx_col=1,dat_col=3)

注意:frames包含列为: df_name,equation,dependency,type,其中type包括 df,cap,group。在这种情况下frames.csvdf_namere,cap,open_price,close,vwap,high,low,volume,ind1,ind2,ind3

还可以直接使用pd.read_csv读取数据,具体取决于 如何存储数据。

开始生成

parms={'re':close.mul(adj).pct_change(),'cap':cap,'open_price':open_price,'close':close,'vwap':vwap,'high':high,'low':low,'volume':volume,'ind1':ind1,'ind2':ind2,'ind3':ind3}withgenerator_class(df,factor_path,**parms)asgen:gen.generator(batch_size=3,name_start='a')gen.generator(batch_size=3,name_start='a')gen.output_df(path=frame_path+'/frames_new.csv')

用现有帧和因子< /H2>继续生成
withgenerator_class(df,factor_path,**parms)asgen:gen.reload_df(path=frame_path+'/frames_new.csv')gen.reload_factors(align=True)clean()foriinrange(5):gen.generator(batch_size=2,name_start='a')print('step %d memory usage:\t%.1f%%\n'%(i,get_memory_use_pct()))ifget_memory_use_pct()>80:breakgen.output_df(path=frame_path+'/frames_new2.csv')

注意:非常重要的是align所有因素和初始值 生成前的数据帧。

也可以通过设置来选择如何存储因子 store_method

分层抽样法和ic-ir生成后平均值的回溯检验

data_box_param={'ind':ind1,'price':vwap*adjfactor,'sus':sus,'ind_weight':inx_weight,'path':'./databox'}back_test_param={'sharpe_ratio_thresh':3,'n':5,'out_path':'.','back_end':'loky','n_jobs':6,'detail_root_path':None,'double_side_cost':0.003,'rf':0.03}icir_param={'ir_thresh':0.4,'out_path':'.','back_end':'loky','n_jobs':6}withgenerator_class(df,factor_path,**parms)asgen:foriinrange(5):gen.generator(batch_size=2,name_start='a')gen.output_df(path=frame_path+'/frames_new.csv')gen.getOrCreate_databox(**data_box_param)gen.back_test(**back_test_param)gen.icir(**icir_param)clean()ifget_memory_use_pct()>90:print('Memory exceeded')break

要临时保存(和重新加载)可以使用的系数数据 create_tmp_memoryreload_tmp_memory方法。这通常是 在back_testicir之前使用,以释放更多内存 平行运行。

生成因子脚本

fromalpha_factoryimportwrite_fileimportpandasaspddf2=pd.read_csv(frame_path+'/frames_new.csv')write_file(df2,'script.py')

找到系数

fromalpha_factory.utiliseimportget_factor_pathfactor_name='a0'path=get_factor_path(factor_path,factor_name)

只有当storage_method='byTime'

使用自己的功能

要使用自己的函数,需要在类中附加代码 functions来自源文件中的basic_functions.py,以及 在data文件的functions.csv中追加相应的名称 在灵魂档案里。

之后,您可以在generator函数中设置debug=True来检查 如果所有这些函数都有错误。如果真的有,一个新的 嵌入的ipython将被激活以帮助您了解发生了什么 在循环中。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用户界面如何在JavaGUI中为按钮创建各种颜色?   使用MSCAPI的RSA密钥包装的java使用   java Spring数据Redis JedisConnectionException:意外的流结束   java饼图未显示预期输出   java hystrixCommand注释commandKey的用途是什么   windows java可以从cmd运行jar,但不能通过双击来运行   java在单击按钮时遍历XML节点   java试图使用日期(int,int,int)构造函数   带有Buildship 2子项目的java不作为项目依赖项链接   java jsonrpc4j:如何从服务器获取列表<SomeObject>?   用于Java应用程序的内存设置MaxDirectMemory和MaxHeapMemory   java如何从以下类型格式化日期   javayoutube。搜索列表搜索不返回任何内容   java My参数在方法中不起作用,因为泛型存在问题   java如何将Map<Key1Type,Val1Type>转换为Map<Key1Type,Val2Type>   JavaJUnit测试:测试用例的改进,测试数组列表的长度?   java如何在Android中解析带有属性值的xml数据?   使用Hibernate对枚举类型进行Java8bean验证