俗话说,磨刀不误砍柴工!当你在写策略时,是否还在查询所有股票代码,剔除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 = date
context = 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.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%。
\ | /
★
由于当前非仿真状态,暂无示例和输出。
联系客服