分享

免费开源!常用策略函数的复用与累积

 0371xianren 2022-10-25 发布于河南
图片

俗话说,磨刀不误砍柴工!当你在写策略时,是否还在查询所有股票代码,剔除B股、新股、ST股,从而获取A股代码呢?是否还在重复循环获取历史前N天交易日?是否还在重复编写单因子分析?

现在,我们将掘金策略小哥常用的策略函数免费开源给大家,帮助大家提高策略编写速度。(文中代码用Jupyter Notebook实现,用户运行时需更换token。)

图片

01/

获取目标日期下的A股代码

功能介绍:获取目标日期下的可交易A股代码,同时剔除退市股、停牌股、ST股、次新股,默认次新股天数为365个自然日。

示例:

date = '2022-09-09'all_stocks,all_stocks_str = get_normal_stocks(date)print(all_stocks[:10])

\ | /

['SHSE.600000', 'SHSE.600004', 'SHSE.600006', 'SHSE.600007', 'SHSE.600008', 'SHSE.600009', 'SHSE.600010', 'SHSE.600011', 'SHSE.600012', 'SHSE.600015']

图片

02/

获取前N个交易日日期

功能介绍:获取目标日期的前N个交易日日期,不包含输入日期,默认N为1,即目标日期的前一个交易日日期。

示例:

date = '2022-09-09'get_previous_N_trading_date(date,counts=10)

\ | /

'2022-08-26'

图片

03/

判断日期是否为周/月的第1个交易日

功能介绍:判断目标日期是否为 周/月 的第1个交易日,包含“周”和“月”两种模式,常作为周频和月频定时任务的替代方案。

示例:

# 示例:判断 2022-09-26 是否为 周 的第1个交易日status1 = is_Week_or_Month_first_day('2022-09-26',periods_type='week')
# 示例:判断 2022-09-27 是否为 周 的第1个交易日status2 = is_Week_or_Month_first_day('2022-09-27',periods_type='week')
# 示例:判断 2022-10-01 是否为 月 的第1个交易日status3 = is_Week_or_Month_first_day('2022-10-01',periods_type='month')
# 示例:判断 2022-10-10 是否为 月 的第1个交易日status4 = is_Week_or_Month_first_day('2022-10-10',periods_type='month')
print(status1,status2,status3,status4)

\ | /

True False False True

图片

04/

分区间获取数据

功能介绍:自动分区间获取数据,以避免超出数据的数量限制;fields参数需包含eob和symbol,当前仅支持单字段形式,adjust_end_time参数默认为回测结束时间:context.backtest_end_time,其余参数同history()参数一致。

示例:

# 当前不在掘金策略环境中,没有context,先自定义一个。class Context():    def __init__(self):        self.backtest_end_time = datecontext = Context()
close_df = history_new(context,security=all_stocks,frequency='1d',start_time='2022-06-01',end_time='2022-09-09',fields='eob,symbol,close')print(close_df.iloc[:,:3])

\ | /

symbol                     SHSE.600000 SHSE.600004  SHSE.600006

eob                                                             2022-06-01 00:00:00 08:00       7.4937        12.40       7.4215 

2022-06-02 00:00:00 08:00       7.4747        12.23       8.1656 

2022-06-06 00:00:00 08:00       7.4463        12.24       8.9792 

2022-06-07 00:00:00 08:00       7.4653        12.34       9.1875

2022-06-08 00:00:00 08:00       7.4463        12.41       9.9813 

...                                ...          ...          ...2022-09-05 00:00:00 08:00       7.2600        13.07       6.2100 

2022-09-06 00:00:00 08:00       7.2600        13.43       6.4800 

2022-09-07 00:00:00 08:00       7.2200        13.36       6.4100 

2022-09-08 00:00:00 08:00       7.2400        13.79       6.4200 

2022-09-09 00:00:00 08:00       7.3100        13.86       6.4000

 [72 rows x 3 columns]

图片

05/

因子分析

功能介绍:因子分析模块,包括去极值,标准化,有效样本数量限制、市值中性化和单因子分析。其中去极值采用方法为N倍标准差去极值,支持两种极值处理,是否将inf数值调整为NaN;市值中性化是以最小二乘回归循环取残差的方式;单因子分析功能基于alphalens的封装。

示例:

# 计算因子:日频收益率的标准差rate = (close_df/close_df.shift(1)-1).iloc[1:,:]factor = rate.rolling(window=5,min_periods=5).std().iloc[5:,:]# 去极值、标准化、有效样本数量限制、市值中性化alpha_factor = factor.Talpha_factor = winsorize_med(alpha_factor)alpha_factor = standardlize(alpha_factor)alpha_factor = valid_sample_size(alpha_factor)alpha_factor = neutralize_MarketValue(alpha_factor)# 单因子分析alphalens_analyse(alpha_factor.T,close_df)

\ | /

图片
图片
图片

06/

账户风险控制

功能介绍:对账户风险进行控制,在传入策略初始资金后,当账户最大回撤触碰阈值时,对所有可用仓位进行清仓并停止策略,可指定最大回撤阈值,默认为20%。

\ | /

由于当前非仿真状态,暂无示例和输出。



如果你还有一些常见的策略场景补充,欢迎在下方留言,策略小哥没准能帮您免费实现!
代码文件已分享至掘金量化社区,欢迎自行下载。
传送门:https://bbs./thread/3180

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约