rqalpha
rqalpha copied to clipboard
order_target_percent表现与文档不符,即便资金不足也会按最大限度下单
1. RQAlpha的版本
4.5.1
2. Python的版本
3.9
3. 是Windows/Linux/MacOS or others?
MacOS
4. 您出现问题对应的源码/或者能复现问题的简易代码 以及对应的配置
# !usr/bin/env python3
# -*- coding: utf-8 -*-
from rqalpha.apis import *
__config__ = {
"base": {
"start_date": "2021-01-01",
"end_date": "2021-01-31",
"frequency": "1d",
"accounts": {
"stock": 10000000
},
}
}
def init(context):
"""
策略初始化
"""
pass
def handle_bar(context, bar_dict):
"""
K线数据更新
"""
order_target_percent('000001.XSHE', 0.5)
order_target_percent('000002.XSHE', 0.7)
5. 您出现的错误堆栈日志信息
上述代码分别买入两只股票,仓位比例加总已经超过了 1,在准备购入 000002.XSHE 时已没有足够资金。但实际上它仍会将剩余的 50% 资金全部下单,而且这一过程没有任何显式的提示信息。 这与关于order-target-percent的文档中: 需要注意,如果资金不足,该API将不会创建发送订单 的描述不符。
另外我发现这一 api 在用于调仓时,还是需要遵循先卖出再买入的顺序以保证资金充足。 比如我第一期分别持有 50% 的 000001.XSHE 和 000002.XSHE,第二期我希望调整至 30% 的 000001.XSHE 和 70% 的000002.XSHE,那第二期的操作就必须是
order_target_percent('000001.XSHE', 0.3)
order_target_percent('000002.XSHE', 0.7)
而不能是
order_target_percent('000002.XSHE', 0.7)
order_target_percent('000001.XSHE', 0.3)
后者不会买入 000002.XSHE,只会卖掉 000001.XSHE
这样比较麻烦,用户就必须每次都逐一判断自己当前持仓比例是高是低,并且显式输入交易顺序,不能单单只是给出下一期的目标比例。
我尝试使用
order_target_portfolio({
'000002.XSHE': 0.7,
'000001.XSHE': 0.3
})
结果也是一样的不会买入 000002.XSHE,只会卖掉 000001.XSHE。希望能有个便捷的 api。
Cheers🍺
感谢提醒,此处是文档的bug,order_target_percent 的行为如您所见,资金不足时会按最大可用资金下单。 文档已在 develop 分支修复,可查看 https://rqalpha.readthedocs.io/zh_CN/develop/api/base_api.html#order-target-percent
order_target_portfolio 按您的尝试结果看起来是有 bug。待修复
感谢迅速的反馈,中秋快乐!
额....我又发现 order_value 也是类似的,资金不足的时候是按最大可用资金下单。
@Cuizi7 order_target_percent('000002.XSHE', 0.7) order_target_percent('000001.XSHE', 0.3) 关于这种情况可以加一个api,优先执行卖出,场景也说得过去 ~