通过引用 RQAlpha 库在代码中运行策略

并不是所有业务场景下都需要使用 rqalpha run 命令行的方式来运行策略,您也可以在您的脚本/程序中直接运行 RQAlpha。

注解

即使通过代码方式启动策略,RQAlpha 也会寻找代码执行目录是否存在 config.yml / config.json 文件,作为用户配置文件来加载配置。但代码中传入的 config 优先级更高。

使用 run_file 函数来运行策略

此种模式下,您需要指定策略文件路径,并传入配置参数以启动策略

  1. # run_file_demo
  2. from rqalpha import run_file
  3.  
  4. config = {
  5. "base": {
  6. "start_date": "2016-06-01",
  7. "end_date": "2016-12-01",
  8. "benchmark": "000300.XSHG",
  9. "accounts": {
  10. "stock": 100000
  11. }
  12. },
  13. "extra": {
  14. "log_level": "verbose",
  15. },
  16. "mod": {
  17. "sys_analyser": {
  18. "enabled": True,
  19. "plot": True
  20. }
  21. }
  22. }
  23.  
  24. strategy_file_path = "./buy_and_hold.py"
  25.  
  26. run_file(strategy_file_path, config)

使用 run_code 函数来运行策略

此种模式下,您需要以字符串的方式传入策略源码,并传入配置参数以启动策略

  1. # run_code_demo
  2. from rqalpha import run_code
  3.  
  4. code = """
  5. from rqalpha.api import *
  6.  
  7.  
  8. def init(context):
  9. logger.info("init")
  10. context.s1 = "000001.XSHE"
  11. update_universe(context.s1)
  12. context.fired = False
  13.  
  14.  
  15. def before_trading(context):
  16. pass
  17.  
  18.  
  19. def handle_bar(context, bar_dict):
  20. if not context.fired:
  21. # order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
  22. order_percent(context.s1, 1)
  23. context.fired = True
  24. """
  25.  
  26. config = {
  27. "base": {
  28. "start_date": "2016-06-01",
  29. "end_date": "2016-12-01",
  30. "benchmark": "000300.XSHG",
  31. "accounts": {
  32. "stock": 100000
  33. }
  34. },
  35. "extra": {
  36. "log_level": "verbose",
  37. },
  38. "mod": {
  39. "sys_analyser": {
  40. "enabled": True,
  41. "plot": True
  42. }
  43. }
  44. }
  45.  
  46. run_code(code, config)

使用 run_func 函数来运行策略

此种模式下,您只需要在当前环境下定义策略函数,并传入指定运行的函数,即可运行策略。

  1. # run_func_demo
  2. from rqalpha.api import *
  3. from rqalpha import run_func
  4.  
  5.  
  6. def init(context):
  7. logger.info("init")
  8. context.s1 = "000001.XSHE"
  9. update_universe(context.s1)
  10. context.fired = False
  11.  
  12.  
  13. def before_trading(context):
  14. pass
  15.  
  16.  
  17. def handle_bar(context, bar_dict):
  18. if not context.fired:
  19. # order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
  20. order_percent(context.s1, 1)
  21. context.fired = True
  22.  
  23.  
  24. config = {
  25. "base": {
  26. "start_date": "2016-06-01",
  27. "end_date": "2016-12-01",
  28. "benchmark": "000300.XSHG",
  29. "accounts": {
  30. "stock": 100000
  31. }
  32. },
  33. "extra": {
  34. "log_level": "verbose",
  35. },
  36. "mod": {
  37. "sys_analyser": {
  38. "enabled": True,
  39. "plot": True
  40. }
  41. }
  42. }
  43.  
  44. # 您可以指定您要传递的参数
  45. run_func(init=init, before_trading=before_trading, handle_bar=handle_bar, config=config)
  46.  
  47. # 如果你的函数命名是按照 API 规范来,则可以直接按照以下方式来运行
  48. # run_func(**globals())