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


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

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

    01/

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

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

    示例:

    1. date = '2022-09-09'
    2. all_stocks,all_stocks_str = get_normal_stocks(date)
    3. 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,即目标日期的前一个交易日日期。

    示例:

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

    输出:

    '2022-08-26'

    03/

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

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

    示例:

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

    输出:

    True False False True

    04/

    分区间获取数据

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

    示例:

    1. # 当前不在掘金策略环境中,没有context,先自定义一个。
    2. class Context():
    3. def __init__(self):
    4. self.backtest_end_time = date
    5. context = Context()
    6. close_df = history_new(context,security=all_stocks,frequency='1d',start_time='2022-06-01',end_time='2022-09-09',fields='eob,symbol,close')
    7. 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的封装。

    示例:

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

    输出:

    06/

    账户风险控制

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

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


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

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

  • 相关阅读:
    Hexagon_V65_Programmers_Reference_Manual(31)
    spring框架介绍
    交易积累-RSI
    Python 基础合集5:条件与循环
    【控制】基于白鲸优化算法实现太阳能光伏模型参数估计附matlab代码
    SpringCloud 学习(一)---- 微服务的概念
    Fast-DDS的代码编译及源码安装-2
    虚拟摄像头之六: 《详解 CameraService 都做了什么》之 CameraService 与 CameraProvider 通讯
    PCL的MLS(移动最小二乘)
    一个卡人机混合智能脖子的问题
  • 原文地址:https://blog.csdn.net/weixin_42219751/article/details/127125846