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

俗话说,磨刀不误砍柴工!当你在写策略时,是否还在查询所有股票代码,剔除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%。

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


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

传送门:https://bbs.myquant.cn/thread/3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值