Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

order_target_percent表现与文档不符,即便资金不足也会按最大限度下单 #659

Open
LawrentChen opened this issue Sep 19, 2021 · 5 comments
Assignees
Labels

Comments

@LawrentChen
Copy link

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🍺

@Cuizi7
Copy link
Contributor

Cuizi7 commented Sep 21, 2021

感谢提醒,此处是文档的bug,order_target_percent 的行为如您所见,资金不足时会按最大可用资金下单。
文档已在 develop 分支修复,可查看 https://rqalpha.readthedocs.io/zh_CN/develop/api/base_api.html#order-target-percent

@Cuizi7
Copy link
Contributor

Cuizi7 commented Sep 21, 2021

order_target_portfolio 按您的尝试结果看起来是有 bug。待修复

@LawrentChen
Copy link
Author

感谢迅速的反馈,中秋快乐!

@LawrentChen
Copy link
Author

额....我又发现 order_value 也是类似的,资金不足的时候是按最大可用资金下单。

@mar-heaven
Copy link
Contributor

mar-heaven commented Jul 19, 2022

@Cuizi7
order_target_percent('000002.XSHE', 0.7)
order_target_percent('000001.XSHE', 0.3)
关于这种情况可以加一个api,优先执行卖出,场景也说得过去 ~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants