@Channelchan
2018-03-30T11:29:35.000000Z
字数 7810
阅读 69230
环境安装
在安装实盘环境前请先安装好数据分析环境,安装方法见下面的链接:
https://www.zybuluo.com/Channelchan/note/1065836
点下面网址下载实盘易客户端,然后双击安装:
http://www.iguuu.com/download/e/installers/ShiPanE.exe
下载对应版本的同花顺,然后双击安装:
https://pan.baidu.com/s/1Oe4cEBP7Yl-8pazXFNnXSg
安装完成需要创建模拟账户用于实盘测试。
下面是实时运行策略需要的python包。
安装:
pip install --pre --no-binary shipane_sdk shipane_sdk
升级:
pip install --upgrade --pre --no-deps --no-binary shipane_sdk shipane_sdk
项目主页:
https://github.com/sinall/ShiPanE-Python-SDK#%E5%AE%89%E8%A3%85
安装:
pip install git+https://github.com/xingetouzi/rqalpha-mod-shipane-wrapper.git
rqalpha mod install shipane-wrapper
项目主页:
https://github.com/xingetouzi/rqalpha-mod-shipane-wrapper
Windows系统下如果没有安装 c++ compiler , 在安装该包的依赖包lru_dict时会失败。可以去下面的网站下载编译好的.whl文件直接安装,注意选择与您的系统和python环境对应的版本。
https://www.lfd.uci.edu/~gohlke/pythonlibs/#lru_dict
安装lru_dict:
pip install path
path为下载的.whl文件的路径。
安装:
pip install git+https://github.com/xingetouzi/rqalpha-mod-fxdayu-source.git
rqalpha mod install fxdayu_source
项目主页:
https://github.com/xingetouzi/rqalpha-mod-fxdayu-source
需要一个同花顺模拟账户进行实时模拟。
打开同花顺,注册一个模拟账户并登陆:
登陆后在菜单栏点击模拟,在模拟炒股交易区选择同花顺练习区,点击
然后在弹出的窗口中选择打开委托,会进入交易登陆界面。
这里新账号的通讯密码默认为888888。
然后关闭该窗口。退回桌面,可以发现多了同花顺交易的桌面快捷方式,在接下来的操作中会用到该快捷方式,请勿删除。
实盘易安装好后,桌面会出现这样的图标:
双击打开,点击注册账号,在打开的网页中注册账号密码后输入并登陆。
选择:
工具 -> 设置 -> 基本设置
进入设置界面:
做如下设置并确认。
属性 | 取值 |
---|---|
服务端口 | 8888 |
安全密钥 | shipanyi |
用户名 | 爱股网用户名 |
密码 | 爱股网账号密码 |
安全密钥可以随意取值,其作用主要是在策略连接实盘易时做验证。
选择:
工具 -> 设置 -> 交易账号
进入设置界面并点击左上角的 + 。
在此添加交易账号:
属性 | 说明 | 取值 |
---|---|---|
名称 | 在与 shipanyi python sdk 对接时的名称 | client-1 |
券商 | 点击并下拉选择“模拟交易” | 模拟交易 |
命令行 | 见下方的命令行说明 | |
独立交易 | 是否独立交易 | true |
账号 | 同花顺交易账号 | |
交易密码 | 同花顺交易密码 | |
通讯密码 | 同花顺交易通讯密码 | 888888 |
启用 | 是否启用 | true |
右键同花顺交易快捷方式 -> 属性 -> 目标
将目标中的文本复制到交易账号设置的命令行属性中。
设置完毕后回到实盘易客户端主界面。
在菜单栏选择: 工具 -> 关闭所有。
然后选择: 工具 -> 自动登录。
此时实盘易会自动打开同花顺交易快捷方式并登陆交易账户,到此说明已经成功安装和配置好实盘易和同花顺。
策略模板
复制下面的代码并保存为python脚本: 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,
"quantos_url": "tcp://data.quantos.org:8910",
"quantos_user": "13662241013",
"quantos_token": "eyJhbGciOiJIUzI1NiJ9.eyJjcmVhdGVfdGltZSI6IjE1MTc2NDQzMzg5MTIiLCJpc3MiOiJhdXRoMCIsImlkIjoiMTM2NjIyNDEwMTMifQ.sVIzI5VLqq8fbZCW6yZZW0ClaCkcZpFqpiK944AHEow"
},
"shipane_wrapper": {
"enabled": True,
"manager_id": "manager-1" # 此处和实盘易配置中的manager.id一致
}
}
}
run_file(__file__, config=config)
config参数说明
选项 | 默认值 | 适用数据源类型 | 含义 |
---|---|---|---|
fxdayu_source.enabled | "mongo" | 通用 | 行情源类型,可选值为"mongo","bundle","quantos" |
fxdayu_source.bundle_path | None | bundle | bundle数据文件位置,默认取"~/.fxdayu/bundle", 可以用环境变量覆盖,取值为"$FXDAYU_ROOT/bundle" |
fxdayu_source.mongo_url | "mongodb://localhost:27017" | mongo | mongodb数据库地址 |
fxdayu_source.enable_cache | True | 通用 | bool型,是否开启分页读取缓存优化功能(缓存优化适用于回测)。 |
fxdayu_source.cache_length | 1000 | 通用 | 当开启缓存优化时,指定单页缓存的条目数 |
fxdayu_source.quantos_url | "tcp://data.quantos.org:8910" | quantos | 可选,tushare服务器地址,默认不需要配置 |
fxdayu_source.quantos_user | None | quantos | 必填,quantos用户名,可以从环境变量QUANTOS_USER传入 |
fxdayu_source.quantos_token | None | quantos | 必填,quantos Token,可以从环境变量QUANTOS_TOKEN传入 |
配置文件
复制下面的代码并保存为配置文件:shipane_sdk_config.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
配置文件模板无法直接使用,需要补充相应的字段:
属性 | 含义 |
---|---|
proxies.username | 爱股网用户名。 |
proxies.password | 爱股网密码。 |
gateways.connection-method | 连接方式: DIRECT|PROXY 。 |
gateways.host | 实盘易客户端所在计算机的ip地址。如果运行在本机则填127.0.0.1,如果实盘易客户端运行在云服务器上需填写云服务器地址。 |
gateways.port | 端口号,与实盘易客户端基本设置中的端口一致,根据上面的设置填: 8888。 |
gateways.key | 密钥,与实盘易的密钥一致。 |
gateways.clients.query | acounts:同花顺交易账号 。 |
gateways.clients.id | 与实盘易交易账号设置的名称相同 |
managers.traders.client | 与实盘易交易账号设置的名称相同 |
managers.traders.id | 与实盘易交易账号设置的名称相同 |
managers.traders.dry-run | 是否排练?排练时不会下单。正式运行时设为false。 |
将上述两个文件放在同一目录下。在开盘时间打开cmd进入该目录然后运行下面的命令即可实盘运行策略。
python strategy.py
简介 | 链接 |
---|---|
python安装 | https://pan.baidu.com/s/1Xa4GNf6n48C9E5o8tT_GKA |
ShiPanE软件 | http://www.iguuu.com/download/e/installers/ShiPanE.exe |
同花顺软件 | https://pan.baidu.com/s/1Oe4cEBP7Yl-8pazXFNnXSg |