scheduler.run_monthly - 每月运行

  • scheduler.runmonthly(_function, tradingday=t)
  • 每月运行一次指定的函数,只能在init内使用。

注意:

  • tradingday的负数表示倒数。
  • tradingday表示交易日,如某月只有三个交易日,则此月的tradingday=3与tradingday=-1表示同一。参数:
  • function (func) – 使传入的function每日交易开始前运行。注意,function函数一定要包含(并且只能包含)context, bar_dict两个输入参数。
  • tradingday (int) – 范围为[-23,1], [1,23] ,例如,1代表每月第一个交易日,-1代表每月倒数第一个交易日,用户必须指定。Example:

以下的代码片段非常简单的展示了每个月第一个交易日的时候我们进行一次财务数据查询,这对根据财务数据来调节股票组合的策略会非常有用:

  1. #scheduler调用的函数需要包括context, bar_dict两个参数
  2. def query_fundamental(context, bar_dict):
  3. # 查询revenue前十名的公司的股票并且他们的pe_ratio在25和30之间。打fundamentals的时候会有auto-complete方便写查询代码。
  4. fundamental_df = get_fundamentals(
  5. query(
  6. fundamentals.income_statement.revenue, fundamentals.eod_derivative_indicator.pe_ratio
  7. ).filter(
  8. fundamentals.eod_derivative_indicator.pe_ratio > 25
  9. ).filter(
  10. fundamentals.eod_derivative_indicator.pe_ratio < 30
  11. ).order_by(
  12. fundamentals.income_statement.revenue.desc()
  13. ).limit(
  14. 10
  15. )
  16. )
  17.  
  18. # 将查询结果dataframe的fundamental_df存放在context里面以备后面只需:
  19. context.fundamental_df = fundamental_df
  20.  
  21. # 实时打印日志看下查询结果,会有我们精心处理的数据表格显示:
  22. logger.info(context.fundamental_df)
  23. update_universe(context.fundamental_df.columns.values)
  24.  
  25. # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
  26. def init(context):
  27. # 每月的第一个交易日查询以下财务数据,以确保可以拿到最新更新的财务数据信息用来调整仓位
  28. scheduler.run_monthly(query_fundamental, tradingday=1)