本mod基于实盘易的 官方SDK ,目的是使用不侵入策略代码的方式本地接入实盘易。信号发送使用了 推送模型 中的 同步仓位模式。
- 不需要修改策略代码,而是通过修改运行rqalpha的config来接入实盘易。
- 实盘易通过自身的配置文件(默认脚本工作目录下的shipane_sdk_config.yaml)来配置
- 使用本mod需要先安装实盘易官方SDK,安装方法请见 这里
- 本地跑实盘交易需要接入实时数据源,推荐配合该mod一起使用 rqalpha-mod-fxdayu-source
- 安装shipane-sdk
- 安装本mod
$ pip install git+https://github.com/xingetouzi/rqalpha-mod-shipane-wrapper.git
$ rqalpha mod install shipane-wrapper
- 策略代码 strategy.py
# /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 账号只需要去其 官网 申请
+ shipane_sdk_config.yaml .. _shipane_sdk_config.yaml : https://raw.githubusercontent.com/xingetouzi/rqalpha-mod-shipane-wrapper/master/example/shipane_sdk_config_template.yaml
# *********************************************************
# 实盘易 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中保持一致 |
1. 运行时提示找不到某品种的数据: 实时数据需要安装rqalpha-mod-fxdayu-source模块,检查是否已安装和正确配置
2. better_exceptions模块报错 两种情况:
- 比较常见的是better_exceptions模块的报错是另一个报错引起的,只要找到最源头的报错信息然后debug。
+ 运行或读取的文件中有特殊字符编码, better_exceptions模块无法识别而报错。解决方法:检查文件以utf-8编码打开是否有乱码,使用支持utf-8的编辑器编辑, 推荐VSCODE,PYCHARM等。对于示例中的文件,建议直接下载而不是复制粘贴。
3.实盘易运行出错: 往往是因为实盘易配置不正确,实盘易的配置方法参加 大鱼学院
欢迎提交各种Issue和Pull Request。