3.0.0
[For 开发/运行策略的用户]
3.x 相比 2.x 进行了如下更改,如果您升级到 3.x 版本,请务必阅读以下内容,保证您的策略可以顺利启动和执行:
- 命令行参数做出如下调整
- 不再使用
-sc/—stock-starting-cash
参数 - 不再使用
-fc/—future-starting-cash
参数 - 不再使用
-i/—init-cash
参数 - 不再使用
-s/—security
参数 - 不再使用
-k/—kind
参数 - 不再使用
—strategy-type
参数 - 使用
—account
来替代,具体用法如下
- 不再使用
- # 策略通过命令行运行,设置可交易类型是股票,起始资金为 10000
- $ rqalpha run --account stock 10000
- # 策略通过命令行运行,设置可交易类型为期货,起始资金为 50000
- $ rqalpha run --account future 50000
- # 策略通过命令行运行,设置可交易类型为期货和股票,起始资金分别为 股票 10000, 期货 50000
- $ rqalpha run --account stock 10000 --account future 50000
- # 如果您通过 Mod 扩展,自定义了一种可交易类型(假设是huobi),您也可以增加对于火币的支持和起始资金设置
- $ rqalpha run --account stock 10000 --account future 50000 --account huobi 20000
- 相应,如果您通过
run_file | run_code | run_func
来启动策略,配置文件及配置信息也做了对应的调整:- 不再使用
base.stock_starting_cash
- 不再使用
base.future_starting_cash
- 不再使用
base.securities
- 使用
base.accounts
来替代,具体用法如下:
- 不再使用
- # 策略通过配置,设置可交易类型是股票,起始资金为 10000
- config = {
- "base": {
- "start_date": "...",
- "end_date": "...",
- "frequency": "...",
- "matching_type": "...",
- "benchmark": "...",
- "accounts": {
- "stock": 10000
- }
- }
- }
- # 策略通过配置,设置可交易类型是期货,起始资金为 50000
- config = {
- "base": {
- "start_date": "...",
- "end_date": "...",
- "frequency": "...",
- "matching_type": "...",
- "benchmark": "...",
- "accounts": {
- "future": 50000
- }
- }
- }
- # 策略通过配置,设置可交易类型为期货和股票,起始资金分别为 股票 10000, 期货 50000
- config = {
- "base": {
- "start_date": "...",
- "end_date": "...",
- "frequency": "...",
- "matching_type": "...",
- "benchmark": "...",
- "accounts": {
- "stock": 10000,
- "future": 50000
- }
- }
- }
- # 如果您通过 Mod 扩展,自定义了一种可交易类型(假设是huobi),您也可以增加对于火币的支持和起始资金设置
- config = {
- "base": {
- "start_date": "...",
- "end_date": "...",
- "frequency": "...",
- "matching_type": "...",
- "benchmark": "...",
- "accounts": {
- "stock": 10000,
- "future": 50000,
- "huobi": 20000
- }
- }
- }
[For Mod developer]
本次更新可能导致已实现 Mod 无法正常使用,请按照文档升级您的 Mod,或者使用 2.2.x 版本 RQAlpha
在通过 Mod 扩展 RQAlpha 的时候,由于 RQAlpha 直接定义了 Account 和 Position 相关的 Model, 增加新的 account 和 position 变得非常的困难,想扩展更多类型是一件很麻烦的事情,因此我们决定重构该模块从而解决这些问题。
详情请查看: https://github.com/ricequant/rqalpha/issues/160
主要进行如下更改:
- 增加
AbstractAccount
和AbstractPosition
, 用户可以基于该抽象类进行扩展。 const.ACCOUNT_TYPE
修改为const.DEFAULT_ACCOUNT_TYPE
,并且不再直接使用,您可以通过Environment.get_instance().account_type_dict
来获取包括 Mod 注入的账户类型。- 原先所有使用 ACCOUNT_TYPE 作为 key 的地方,不再使用 Enum 类型作为 Key, 而是修改为对应 Enum 的 name 作为key。比如说原本使用
portfolio.accounts[ACCOUNT_TYPE.STOCK]
更改为portfolio.accounts['STOCK']
Environment
提供set_account_model
|get_account_model
|set_position_model
|get_position_model
API 来注入 自定义Model。Environment
提供set_smart_order
API 来注入自定义账户类型的智能下单函数,从而通过通用的order
|order_to
API 便可以交易对应自定义账户类型。- RQAlpha 将已有的 AccountModel, PositionModel 和 API 抽离至 rqalpha_mod_sys_accounts 中,通过如下方式注入:
- from .account_model import *
- from .position_model import *
- from .api import api_future, api_stock
- class AccountMod(AbstractMod):
- def start_up(self, env, mod_config):
- # 注入 Account
- env.set_account_model(DEFAULT_ACCOUNT_TYPE.STOCK.name, StockAccount)
- env.set_account_model(DEFAULT_ACCOUNT_TYPE.FUTURE.name, FutureAccount)
- env.set_account_model(DEFAULT_ACCOUNT_TYPE.BENCHMARK.name, BenchmarkAccount)
- # 注入 Position
- env.set_position_model(DEFAULT_ACCOUNT_TYPE.STOCK.name, StockPosition)
- env.set_position_model(DEFAULT_ACCOUNT_TYPE.FUTURE.name, FuturePosition)
- env.set_position_model(DEFAULT_ACCOUNT_TYPE.BENCHMARK.name, StockPosition)
- # 注入 API
- if DEFAULT_ACCOUNT_TYPE.FUTURE.name in env.config.base.accounts:
- # 注入期货API
- for export_name in api_future.__all__:
- export_as_api(getattr(api_future, export_name))
- # 注入 smart order
- env.set_smart_order(DEFAULT_ACCOUNT_TYPE.FUTURE.name, api_future.smart_order)
- if DEFAULT_ACCOUNT_TYPE.STOCK.name in env.config.base.accounts:
- # 注入股票API
- for export_name in api_stock.__all__:
- export_as_api(getattr(api_stock, export_name))
- # 注入 smart order
- env.set_smart_order(DEFAULT_ACCOUNT_TYPE.STOCK.name, api_stock.smart_order)
- def tear_down(self, code, exception=None):
- pass