代码拉取完成,页面将自动刷新
同步操作将从 Ricequant/RQAlpha 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
rqalpha run --config
参数rqalpha run --logger
参数可以单独设置特定的 logger 的 levelget_prev_close
is_valid_price
工具函数来判断价格是否有效rqalpha run --position
来设置初始仓位的功能[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 注入的账户类型。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 便可以交易对应自定义账户类型。
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
--source-code
参数可以直接在命令行中传入策略源代码进行回测,这个选项目前主要给 IPython 使用。history_bars
当 fields 为 None 的时候,指定为 ["datetime", "open", "high", "low", "close", "volume"] 。
# 加载 rqalpha 插件
%load_ext rqalpha
# 运行回测
%% rqalpha -s 20160101 -e 20170101 -sc 100000
# 以 order_shares 举例,其他的下单函数同理。
# 原本的下单方式: 以 200 元的价格下单 100 股 000001.XSHE
order_shares("000001.XSHE", 100, style=LimitOrder(200))
# 下单的如下方式都OK:
order_shares("000001.XSHE", 100, 200)
order_shares("000001.XSHE", 100, LimitOrder(200))
order_shares("000001.XSHE", 100, price=200)
order_shares("000001.XSHE", 100, style=LimitOrder(200))
buy_close
和 sell_close
API 增加 close_today
参数,现在您现在可以指定发平今单了。buy_close
和 sell_close
API 返回的 Order
对象。但实际交易过程中,涉及到昨仓今仓的时候,可能会存在发单被拒单的情况,RQAlpha 进行平昨/平今智能拆单的处理,因此在一些情况下会生成多个订单,对应也会返回一个订单列表。期货平仓更新的内容请参考 Issue 116
Order
| Trade
对应的 __from_create__
函数中 calendar_dt
和 trading_dt
的传入,对接第三方交易源,构建订单和成交的 Mod 可能会产生影响,需要进行修改.
# 原先的构建方式
Order.__from_create__(
calendar_dt,
trading_dt,
order_book_id,
amount,
side,
style,
position_effect
)
#修改为
Order.__from_create__(
order_book_id,
amount,
side,
style,
position_effect
)
from rqalpha import subscribe_event
来支持事件订阅(暂时不增加到API中,您如果想在策略里使用,也需要主动 import 该函数), 如下示例所示:
from rqalpha.api import *
from rqalpha import subscribe_event
def on_trade_handler(event):
trade = event.trade
order = event.order
account = event.account
logger.info("*" * 10 + "Trade Handler" + "*" * 10)
logger.info(trade)
logger.info(order)
logger.info(account)
def on_order_handler(event):
order = event.order
logger.info("*" * 10 + "Order Handler" + "*" * 10)
logger.info(order)
def init(context):
logger.info("init")
context.s1 = "000001.XSHE"
update_universe(context.s1)
context.fired = False
subscribe_event(EVENT.TRADE, on_trade_handler)
subscribe_event(EVENT.ORDER_CREATION_PASS, on_order_handler)
def before_trading(context):
pass
def handle_bar(context, bar_dict):
if not context.fired:
order_percent(context.s1, 1)
context.fired = True
# rqalpha run -f ./rqalpha/examples/subscribe_event.py -s 2016-06-01 -e 2016-12-01 --stock-starting-cash 100000 --benchmark 000300.XSHG
run_file
| run_code
| run_func
API, 详情请参见 多种方式运行策略
AbstractStrategyLoader:load
函数的传入参数,现在不需要 strategy
了。UserFuncStrategyLoader
类POSITION_EFFECT
增加 CLOSE_TODAY
类型order(order_book_id, quantity, price=None)
APIorder_to(order_book_id, quantity, price=None)
APIorder
函数一致order
| order_to
一致all_instruments
PR 123
order
和 order_to
高阶下单函数rqalpha run
的时候指定 -st
| --kind
时报错的问题--security
/ -st
现在支持多种模式,可以使用 -st stock -st future
也可以使用 -st stock_future
来设置securityprint(context.portfolio)
时因为调用了 abandon property 会报 warning 的问题 Issue 114
rqalpha mod install xx
不存在的 Mod 也会导致 mod_config.yml 更新的问题 Issue 111
rqalpha plot
无法画图的问题 Issue 109
from rqalpha import cli
方便第三方 Mod 扩展 rqalpha commandhistory_bars
增加 include_now
optionenv.config.mod
获取全部 mod 的配置信息context.config
来获取配置信息from rqalpha import export_as_api
接口,方便扩展自定义 API
from rqalpha import run
config = {
"base": {
"strategy_file": "strategy.py",
"start_date": "2016-06-01",
"end_date": "2016-07-01",
"stock_starting_cash":100000,
"benchmark": '000300.XSHG'
},
"extra":{
"context_vars":{
"short":5,
"middle":10,
"long":21
}
}
}
result_dict = run(config)
# 以下是策略代码:
def handle_bar(context):
print(context.short) # 5
print(context.middle) # 10
print(context.long) # 21
rqalpha generate_config
现在会生成包含所有默认系统配置信息的 config.yml 文件。RUN_TYPE
增加 LIVE_TRADING
history_bars
获取日期错误产生的问题context.run_info
会报错的问题2.0.0 详细修改内容请访问:RQAlpha 2.0.0
Portfolio/Account/Position 相关
Portfolio
, Account
和 Position
的角色和关系Portfolio
层级进行净值/份额的计算,Account级别不再进行净值/份额/收益/相关的计算total_cash
, positions
和 backward_trade_set
即可完成Position
的初始化,可以从 real_broker
直接进行恢复Account
提供 fast_forward
函数,账户现在可以从任意时刻通过 orders
和 trades
快速前进至最新状态benchmark_portfolio
, 其包含一个 benchmark_account
context.portfolio.positions[some_security]
时候,如果 position 不存在,不再每次都创建临时仓位,而是会缓存,从而提高回测速度和性能clone
方法PortfolioProxy
和 PositionProxy
Event 相关
Executor
模块Mod 相关
slippage
相关业务逻辑至 simulation mod
commission
相关业务逻辑至 simulation mod
tax
相关业务逻辑至 simulation mod
Environment 和 ExecutionContext 相关
ExecutionContext
只负责上下文相关的内容,不再可以通过 ExecutionContext
访问其他成员变量。Environment
的功能,RQAlpha 及 Mod 均可以直接通过 Environment.get_instance()
来获取到环境中核心模块的引用Environment
还提供了很多常用的方法,具体请直接参考代码配置及参数相关
rqalpha run
的参数,将其中属于 Mod 的参数全部删除,取代之为Mod提供了参数注入机制,所以现在 Mod 可以自行决定是否要注入参数或者命令来扩展 RQAlpha 的功能rqalpha-cmd
命令,Mod 推荐在该命令下注入自己的命令来实现功能扩展Risk 计算
其他
Order
和 Trade
的字段和函数,使其更通用RqAttrDict
类增加 update
方法,现在支持动态更新了arg_checker
增加 is_greater_or_equal_than
和 is_less_or_equal_than
函数DEFAULT_FUTURE_INFO
变量,现在可以直接通过 data_proxy
获取相关数据update_bundle
直接在代码中调用会报错的问题is_suspended
和 is_st_stock
API 的支持UnboundLocalError: local variable 'signature' referenced before assignment
--short-stock
POSITION_EFFECT
增加 CLOSE_TODAY
ExecutionContext
增加 get_current_close_price
get_future_commission_info
get_future_margin
get_future_info
函数RQInvalidArgument
来处理用户策略代码异常的问题handle_tick(context, tick)
的方式支持tick级别的API支持(未来可能会修改)before_trading
函数输出的时间提前到开盘前半小时rqalpha install/uninstall/list/enable/disable
命令EVENT.POST_SYSTEM_RESTORED
事件side
和 position_effect
total_orders
计算错误inpsect.signature
在 python 2.x 报错的问题。--locale
默认为 cn
(中文), 支持 cn | en
(中文 | 英文)main.run
返回值中 stock_position
为 None
的问题config.yml
的版本号检查及相关流程plot
关于中文字体的校验,如果系统没有中文字体,则显示英文字段Benchmark
在不设置时某些情况下会导致运行失败的错误inspect.unwrap
在 Python 2.7 下不支持的兼容性问题numpy
在某些平台下没有 float128 引起的报错问题--disable-user-system-log
参数,可以独立关闭回测过程中因策略而产生的系统日志--log-level
现在可以正确区分不同类型的日志,同时增加 none
类型,用来关闭全部日志信息。~/.rqalpha/config.yml
文件rqalpha generate_config
命令来获取默认配置文件--kind
参数,替换为 --strategy-type
和配置文件呼应events.py
,现在可以更好的支持基于事件的模块编写了analyser
Modrisk_manager
Modsimulation
Mod-mc
/ --mod-config
参数来传递参数到 mod 中update_bundle
移到 main.py
中,方便直接从代码中调用 update_bundle
rqalpha.run
现在支持直接传入 source_code
了rqalpha.update_bundle
函数from rqalpha import run
接口,现在可以很方便的直接在程序中调用RQAlpha 回测了。rqalpha update_bundle
的目录结构,现在是在指定目录下生成一个 bundle 文件,而不再会直接删除当前文件夹内容了。rqalpha examples -d .
无样例策略生成的问题handle_bar
前用当前的数据更新 portfolio 和 position,因为 ricequant.com 是这样做的。market_value
和 value_percent
# 生成sample策略
rqalpha generate_examples -d ./
# 运行回测
rqalpha run -f examples/simple_macd.py -s 2013-01-01 -e 2015-01-04 -o /tmp/a.pkl
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。