俗话说,磨刀不误砍柴工!当你在写策略时,是否还在查询所有股票代码,剔除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,即目标日期的前一个交易日日期。 示例:
\ | / ★ '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()参数一致。 示例:
\ | / ★ 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.T alpha_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%。 \ | / ★ 由于当前非仿真状态,暂无示例和输出。 |
|
来自: 0371xianren > 《股票》