Skip to content

RQAlpha mod to connect shipane with config options rather than intrusiving strategy code

Notifications You must be signed in to change notification settings

xingetouzi/rqalpha-mod-shipane-wrapper

Repository files navigation

Shipane SDK wrapper for Rqalpha

介绍

本mod基于实盘易的 官方SDK ,目的是使用不侵入策略代码的方式本地接入实盘易。信号发送使用了 推送模型 中的 同步仓位模式

特点

  • 不需要修改策略代码,而是通过修改运行rqalpha的config来接入实盘易。
  • 实盘易通过自身的配置文件(默认脚本工作目录下的shipane_sdk_config.yaml)来配置

依赖

  • 使用本mod需要先安装实盘易官方SDK,安装方法请见 这里

安装

  1. 安装shipane-sdk
  2. 安装本mod
$ pip install git+https://github.com/xingetouzi/rqalpha-mod-shipane-wrapper.git
$ rqalpha mod install shipane-wrapper

用例

# /bin/env python
# -*- coding: utf-8 -*-
from collections import defaultdict

from rqalpha import run_file
from rqalpha.api import *


def init(context):
    logger.info("init")
    context.symbol = [
        "000001.XSHE",
        "002415.XSHE",
        "600004.XSHG",
        "600006.XSHG",
    ]
    update_universe(context.symbol)
    if not hasattr(context, "fired"):
        context.fired = defaultdict(lambda: False)


def before_trading(context):
    pass


def handle_bar(context, bar_dict):
    # test order
    for symbol in context.symbol:
        if not context.fired:
            # order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
            percent = 1.0 / len(context.symbol)
            logger.info("Buy %s" % symbol)
            order_target_percent(symbol, percent)
            p = context.portfolio.positions[symbol]
            logger.info("Position of %s,总: %s 今: %s 昨: %s " % (
                symbol, p.quantity, p.quantity - p.sellable, p.sellable
            ))
            context.fired[symbol] = True
        else:
            percent = 0.9 / len(context.symbol)
            logger.info("Sell %s" % symbol)
            order_target_percent(symbol, percent)
            p = context.portfolio.positions[symbol]
            logger.info("Position of %s,总: %s 今: %s 昨: %s " % (
                symbol, p.quantity, p.quantity - p.sellable, p.sellable
            ))
            context.fired[symbol] = False


# 您可以指定您要传递的参数
if __name__ == "__main__":
    import os

    config = {
        "base": {
            "start_date": "2016-06-01",
            "end_date": "2016-06-05",
            "accounts": {"stock": 100000},
            "frequency": "1m",
            "benchmark": None,
            "data_bundle_path": os.path.expanduser("~/.rqalpha/bundle"),
            "strategy_file": __file__,
            "run_type": "p"
        },
        "extra": {
            "log_level": "verbose",
        },
        "mod": {
            "fxdayu_source": {
                "enabled": True,
                "source": "quantos",
                "enable_cache": False,
            },
            "shipane_wrapper": {
                "enabled": True,
                "manager_id": "manager-1"  # 此处和实盘易配置中的manager.id一致
            }
        }
    }

    run_file(__file__, config=config)

Note

上述代码以实时交易的模式运行rqalpha,其中实时数据源使用了rqalpha-mod-fxdayu-source中提供的quantos(tushare-pro)数据源。 所以需要关于quantos接口的一些配置,详见 rqalpha-mod-fxdayu-source配置 ,建议通过环境变量来配置。

环境变量配置示例:

QUANTOS_USER=13XXXXXXX60
QUANTOS_TOKEN=eyJhXXXXXXXXXXXXXXUzI1NiJ9.eyJjcmVhdGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMTM5NTUxMzM3NjAifQ.ZW_HgnsYl_XXXXXXXXXXXXXXXXXXXXH5r7Qo8lw

quantos 账号只需要去其 官网 申请

# *********************************************************
# 实盘易 SDK 配置
# 如无特别说明,配置项修改后,将在策略重启后生效
# 注意:
# - 请勿在策略运行期间修改结构,比如 id 等关键信息
# - 配置项冒号后需保留一个空格
# - <xxx> 为必选项,[xxx] 为可选项;需要将括号移除
# - <xxx|yyy> 为多选一项,使用其中一项即可
# *********************************************************

# *********************************************************
# 代理配置
# *********************************************************
proxies:
    -   id: default
        base-url: http://www.iguuu.com/proxy/trade
        # 爱股网用户名
        username: <username>
        # 爱股网密码
        password: <password>

# *********************************************************
# 实盘易配置
# *********************************************************
gateways:
    # 实盘易-1 配置
    -   id: gateway-1
        # 连接方式
        # DIRECT:直连,适用于有公网 IP 的环境
        # PROXY: 通过爱股网代理连接
        connection-method: <DIRECT|PROXY>
        # IP 地址
        host: xxx.xxx.xxx.xxx
        # 端口
        port: 8888
        # 代理 ID
        # 连接方式为“代理”时需要设置
        proxy: default
        # 实例 ID,即运行实盘易的计算机名
        # 连接方式为“代理”时需要设置
        instance-id: <instance-id>
        # 密钥
        key: [key]
        # 超时
        timeout:
            # 连接超时
            connect: 5.0
            # 读取超时
            read: 10.0
        # 交易客户端
        clients:
            # 客户端-1
            # 注意:id 需全局唯一
            -   id: client-1
                # 查询串,对应于 API 的 client 参数
                # 其中 xxxx 为交易账号或交易账号后半段
                query: account:xxxx
                # 是否默认?
                # 1 个实盘易只允许设置 1 个交易客户端为默认
                default: true
                # 其他资产价值
                # 基金及其他非场内资产价值,该项配置用于校验账户
                other-value: 0
                # 总资产价值偏差率
                # 该项配置用于校验账户
                total-value-deviation-rate: 0.001
                # 保留名单,每行一个
                # 股票代码,注意使用 str 标签
                # 例如:!!str 000001
                # 注意:该配置在下次 handle_data 调用时生效
                reserved-securities:
                    # 含有非数字的代码
                    - \D
                    # B股代码
                    - ^[92]
                    # 港股代码
                    - ^[\d]{5}$
                    # 逆回购代码
                    - ^(204|131)
                    # 新标准券代码
                    - !!str 888880
            # 客户端-2
            -   id: client-2
                query: account:xxxx
                other-value: 0
                total-value-deviation-rate: 0.001
                reserved-securities:
                    - \D
                    - ^[92]
                    - ^[\d]{5}$
                    - ^(204|131)
                    - !!str 888880
    # 实盘易-2 配置
    -   id: gateway-2
        # 连接方式
        connection-method: DIRECT
        host: xxx.xxx.xxx.xxx
        port: 8888
        key:
        timeout:
            connect: 5.0
            read: 10.0
        clients:
            -   id: client-3
                query: title:monijiaoyi
                default: true
                other-value: 0
                total-value-deviation-rate: 0.001
                reserved-securities:
                    - \D
                    - ^[92]
                    - ^[\d]{5}$
                    - ^(204|131)
                    - !!str 888880
            -   id: client-4
                query: title:xxx,account:xxx
                other-value: 0
                total-value-deviation-rate: 0.001
                reserved-securities:
                    - \D
                    - ^[92]
                    - ^[\d]{5}$
                    - ^(204|131)
                    - !!str 888880

# *********************************************************
# 策略配置
# 实体关系
#
# manager 1 ---- N trader 1 ---- 1 交易客户端(client)
#
# *********************************************************
managers:
    # manager-1 配置
    -   id: manager-1
        traders:
            # trader-1
            -   id: trader-1
                client: client-1
                # 是否开启?
                # 正式运行时设置为 true
                enabled: true
                # 是否排练?排练时不会下单。
                # 正式运行时设置为 false
                dry-run: true
                # 工作模式
                # 1. SYNC:  指按模拟交易的持仓进行同步
                # 2. FOLLOW:指按模拟交易的下单进行跟单
                # 目前米筐只支持 SYNC 模式
                mode: SYNC
                # 同步选项
                # 如果该策略无需同步操作,可以省略 sync 配置项
                # 注意:该配置在下次 handle_data 调用时生效
                sync:
                    # 同步前是否撤销模拟盘未成交订单
                    # 如果该选项未启用,并且模拟盘有未成交订单,SDK 将不会做同步
                    pre-clear-for-sim: false
                    # 同步前是否撤销实盘未成交订单
                    pre-clear-for-live: false
                    # 最小订单金额,低于该值的订单将被忽略,以防因为价格波动导致的频繁调仓
                    # 取值可以为数值,或者百分比
                    min-order-value: 1%
                    # 最大订单金额,用于分单
                    # 取值为数值
                    max-order-value: 200000
                    # 轮次间隔时间,单位为毫秒
                    # 建议不小于 5 秒,以防交易软件持仓刷新过慢
                    round-interval: 5000
                    # 批次间隔时间,单位为毫秒
                    batch-interval: 1000
                    # 下单间隔时间,单位为毫秒
                    order-interval: 1000
                    # 默认为 2 轮,该选项用于增加额外轮次
                    # 额外轮次
                    extra-rounds: 0
    -   id: manager-2
        traders:
            -   id: trader-2
                client: client-1
                enabled: true
                dry-run: true
                mode: SYNC
                sync:
                    pre-clear-for-sim: false
                    pre-clear-for-live: false
                    min-order-value: 1%
                    max-order-value: 200000
                    round-interval: 5000
                    batch-interval: 1000
                    order-interval: 1000
                    extra-rounds: 0

Note

以上模板需要按自己的实盘易运行情况和交易需求来配置

  • 运行

将以上两个文件放置于同一目录下,做好相应配置,从该目录运行strategy.py

$ python strategy.py

配置选项

选项 默认值 含义
shipane_wrapper.enabled False 是否开启mod
shipane_wrapper.manager_id "manager-1" 和shipane_sdk_config.yaml中保持一致

FAQ

1. 运行时提示找不到某品种的数据: 实时数据需要安装rqalpha-mod-fxdayu-source模块,检查是否已安装和正确配置

2. better_exceptions模块报错 两种情况:

  • 比较常见的是better_exceptions模块的报错是另一个报错引起的,只要找到最源头的报错信息然后debug。
  • 运行或读取的文件中有特殊字符编码, better_exceptions模块无法识别而报错。解决方法:检查文件以utf-8编码打开是否有乱码,使用支持utf-8的编辑器编辑,

推荐VSCODE,PYCHARM等。对于示例中的文件,建议直接下载而不是复制粘贴。

3.实盘易运行出错: 往往是因为实盘易配置不正确,实盘易的配置方法参加 大鱼学院

加入开发

github地址

欢迎提交各种Issue和Pull Request。

About

RQAlpha mod to connect shipane with config options rather than intrusiving strategy code

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages