rqalpha:多种方式运行策略

REF

https://rqalpha.readthedocs.io/zh_CN/latest/intro/run_algorithm.html

下载策略示例文件夹

首先获取回测数据:

$ rqalpha update-bundle

bundle 默认存放在 ~/.rqalpha 下,也可以指定 bundle 的存放位置:

$ rqalpha update-bundle -d target_bundle_path

如果使用了指定路径来存放 bundle,那么执行程序的时候也同样需要指定对应的 bundle 路径:

rqalpha run -d target_bundle_path .....	

这里按照默认路径来,后面无需特殊指定:
在这里插入图片描述

获取配置文件

如果运行 RQAlpha 时不指定配置文件,会在 ~/.rqalpha/ 文件夹下创建 config.yml 文件作为默认配置文件。
config.yml:

# see more config
# http://rqalpha.readthedocs.io/zh_CN/stable/intro/run_algorithm.html
version: 0.1.6

# 白名单,设置可以直接在策略代码中指定哪些模块的配置项目
whitelist: [base, extra, validator, mod]

base:
  # 数据源所存储的文件路径
  data_bundle_path: ~
  # 启动的策略文件路径
  strategy_file: strategy.py
  # 策略源代码
  source_code: ~
  # 回测起始日期
  start_date: 2015-06-01
  # 回测结束日期(如果是实盘,则忽略该配置)
  end_date: 2050-01-01
  # 设置保证金乘数,默认为1
  margin_multiplier: 1
  # 运行类型,`b` 为回测,`p` 为模拟交易, `r` 为实盘交易。
  run_type: b
  # 目前支持 `1d` (日线回测) 和 `1m` (分钟线回测),如果要进行分钟线,请注意是否拥有对应的数据源,目前开源版本是不提供对应的数据源的。
  frequency: 1d
  # 在模拟交易和实盘交易中,RQAlpha支持策略的pause && resume,该选项表示开启 resume 功能
  resume_mode: false
  # 在模拟交易和实盘交易中,RQAlpha支持策略的pause && resume,该选项表示开启 persist 功能呢,
  # 其会在每个bar结束对进行策略的持仓、账户信息,用户的代码上线文等内容进行持久化
  persist: false
  persist_mode: real_time
  # 设置策略可交易品种,目前支持 `stock` (股票账户)、`future` (期货账户),您也可以自行扩展
  accounts:
    # 如果想设置使用某个账户,只需要增加对应的初始资金即可
    stock: ~
    future: ~
  # 交易市场,如 cn 中国市场,hk 香港市场
  market: cn
  # 设置初始仓位
  init_positions: {}
  # 根据价格最小变动单位调整发单价格
  round_price: false
  # 用户自定义的期货合约数据,用于设置期货手续菲费率
  future_info: {}


extra:
  # 选择日期的输出等级,有 `verbose` | `info` | `warning` | `error` 等选项,您可以通过设置 `verbose` 来查看最详细的日志,
  # 或者设置 `error` 只查看错误级别的日志输出
  log_level: info
  user_system_log_disabled: false
  user_log_disabled: false
  # 通过该参数可以将预定义变量传入 `context` 内。
  context_vars: ~
  # force_run_init_when_pt_resume: 在PT的resume模式时,是否强制执行用户init。主要用于用户改代码。
  force_run_init_when_pt_resume: false
  # enable_profiler: 是否启动性能分析
  enable_profiler: false
  is_hold: false
  locale: zh_Hans_CN
  logger: []

validator:
  # close_amount: 在执行order_value操作时,进行实际下单数量的校验和scale,默认开启
  close_amount: true

以上为原始的配置文件,想要在当前文件件获取一份配置文件,可以运行一下命令:

rqalpha generate-config

在这里插入图片描述
这里官方文档写错了: (可以通过 rqalpha --help获取帮助)
在这里插入图片描述

获取样例文件夹

执行 rqalpha examples 在当前路径下生成一个示例文件夹:
在这里插入图片描述
示例文件夹的内容:
在这里插入图片描述

(1)命令行运行策略

现在我们的策略存放在了 /Users/furuiyang/desktop/temp/rqa_test/examples/buy_and_hold.py 路径下, 数据源存放在 /Users/furuiyang/.rqalpha/bundle 路径下,回测的起始时间为 2016-06-01, 结束时间为 2016-12-01,我们给策略分配的起始资金为 100000, Benchmark 设置为 000300.XSHG

那么我们就通过如下命令进行回测:

rqalpha run -f /Users/furuiyang/desktop/temp/rqa_test/examples/buy_and_hold.py -d /Users/furuiyang/.rqalpha/bundle -s 2016-06-01 -e 2016-12-01 --account stock 100000 --benchmark 000300.XSHG

在这里插入图片描述

如果我们想要以图形的方式查看回测的结果, 则增加 --plot 参数:

rqalpha run -f /Users/furuiyang/desktop/temp/rqa_test/examples/buy_and_hold.py -d /Users/furuiyang/.rqalpha/bundle -s 2016-06-01 -e 2016-12-01 --account stock 100000 --benchmark 000300.XSHG --plot

在这里插入图片描述

在这里插入图片描述
如果想把回测的数据保存下来,可以通过 -o 参数将结果保存成 pkl 文件。
在这里插入图片描述
在这里插入图片描述
等回测结束后可以通过 pandas.read_pickle 函数来读取数据进行之后的数据分析。

import pandas as pd

result_dict = pd.read_pickle('result.pkl')

result_dict.keys()
# [out]dict_keys(['total_portfolios', 'summary', 'benchmark_portfolios', 'benchmark_positions', 'stock_positions', 'trades', 'stock_portfolios'])

在这里插入图片描述

(2) 使用配置文件运行策略

在每次运行策略时,有一些参数是固定不变的,我们可以将不经常改变的参数写入配置文件。

RQAlpha 在运行策略时候会在当前目录下寻找 config.yml 或者 config.json 文件作为用户配置文件来读取。

我们假设在当前目录下存在 buy_and_hold.py 策略文件:

# config.yml
base:
  # 启动的策略文件路径
  strategy_file: ./buy_and_hold.py
  # 回测起始日期
  start_date: 2015-06-01
  # 回测结束日期(如果是实盘,则忽略该配置)
  end_date: 2050-01-01
  # 目前支持 `1d` (日线回测) 和 `1m` (分钟线回测),如果要进行分钟线,请注意是否拥有对应的数据源,目前开源版本是不提供对应的数据源的。
  frequency: 1d
  # Benchmark,如果不设置,默认没有基准参照。
  benchmark: ~
  accounts:
    # 设置 股票为交易品种  初始资金为 100000 元
    stock:  100000
extra:
  # 开启日志输出
  log_level: verbose
mod:
  sys_analyser:
    enabled: true
    # 开启 plot 功能
    plot: true

当创建好 config.yml 文件后,执行 $ rqalpha run 即可运行策略

在策略内配置参数信息

RQAlpha 提供了策略内配置参数信息的功能,您可以方便的在策略文件中配置参数,我们以 test_f_buy_and_hold 文件 为例来介绍此种策略运行方式。

# test_f_buy_and_hold.py
def init(context):
    context.s1 = "IF88"
    subscribe(context.s1)
    logger.info("Interested in: " + str(context.s1))


def handle_bar(context, bar_dict):
    buy_open(context.s1, 1)


__config__ = {
    "base": {
        "start_date": "2015-01-09",
        "end_date": "2015-03-09",
        "frequency": "1d",
        "matching_type": "current_bar",
        "benchmark": None,
        "accounts": {
            "future": 1000000
        }
    },
    "extra": {
        "log_level": "error",
    },
    "mod": {
        "sys_progress": {
            "enabled": True,
            "show": True,
        },
    },
}

在这里插入图片描述

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

使用 run_file 函数来运行策略

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

# run_file_demo
from rqalpha import run_file

config = {
  "base": {
    "start_date": "2016-06-01",
    "end_date": "2016-12-01",
    "benchmark": "000300.XSHG",
    "accounts": {
        "stock": 100000
    }
  },
  "extra": {
    "log_level": "verbose",
  },
  "mod": {
    "sys_analyser": {
      "enabled": True,
      "plot": True
    }
  }
}

strategy_file_path = "./buy_and_hold.py"

run_file(strategy_file_path, config)

在这里插入图片描述

使用 run_code 函数来运行策略

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

# run_code_demo
from rqalpha import run_code

code = """
from rqalpha.api import *


def init(context):
    logger.info("init")
    context.s1 = "000001.XSHE"
    update_universe(context.s1)
    context.fired = False


def before_trading(context):
    pass


def handle_bar(context, bar_dict):
    if not context.fired:
        # order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
        order_percent(context.s1, 1)
        context.fired = True
"""

config = {
  "base": {
    "start_date": "2016-06-01",
    "end_date": "2016-12-01",
    "benchmark": "000300.XSHG",
    "accounts": {
        "stock": 100000
    }
  },
  "extra": {
    "log_level": "verbose",
  },
  "mod": {
    "sys_analyser": {
      "enabled": True,
      "plot": True
    }
  }
}

run_code(code, config)

使用 run_func 来运行策略

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

# run_func_demo
from rqalpha.api import *
from rqalpha import run_func


def init(context):
    logger.info("init")
    context.s1 = "000001.XSHE"
    update_universe(context.s1)
    context.fired = False


def before_trading(context):
    pass


def handle_bar(context, bar_dict):
    if not context.fired:
        # order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
        order_percent(context.s1, 1)
        context.fired = True


config = {
  "base": {
    "start_date": "2016-06-01",
    "end_date": "2016-12-01",
    "benchmark": "000300.XSHG",
    "accounts": {
        "stock": 100000
    }
  },
  "extra": {
    "log_level": "verbose",
  },
  "mod": {
    "sys_analyser": {
      "enabled": True,
      "plot": True
    }
  }
}

# 您可以指定您要传递的参数
run_func(init=init, before_trading=before_trading, handle_bar=handle_bar, config=config)

# 如果你的函数命名是按照 API 规范来,则可以直接按照以下方式来运行
# run_func(**globals())
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值