前言(可跳过):
本文写于1年前,跑通后也没继续更了,不过后台有很多私信,有一些疑惑以及需求。总结为:1.自己部署程序报bug,搞不懂;2.想把自己聚宽的策略实盘,搞不定;3.自动化交易方式用哪个好?4.求帮忙跟平台策略。等等一系列问题。最近一方面是确实存在这需求,另一方面是得到了朋友强烈支持,因此准备在忙碌之余抽空,按顺序1-2-3逐一完成:
1.已有聚宽量化策略,想对接实盘,希望得到技术支持;
正在完成:开发阶段-聚宽一键通.exe_vzhb的博客-CSDN博客
2.自有稳定策略,保持盈利,缺少一个自动化交易的工具,希望解放双手; 待完成
3.除了聚宽,还想跟一些平台的策略,某球,某财,某仁等,希望得到技术支持; 待完成
-------------------------------此处正文开始----------------------------------------
本文介绍:旨在帮助已经有交易策略的朋友能自己完成实盘的自动交易。
写这篇文章之前先要感谢开源项目easyTrader的作者食灯鬼。我在部署项目的过程中也踩了不少坑,记录于此希望能帮遇到这些问题的朋友或者不清楚部署过程的朋友节约时间。
1.项目中需要用到的软件,工具,文档链接: 参考文档:使用 - easytrader
同花顺ths_v8.60.64(正常安装即可):百度网盘 请输入提取码 提取码: 7788 ,easyTrader项目源码:https://gitee.com/zhb233/easytrader
使用Anaconda3搭建python运行环境(正常安装即可):Windows系统:https://repo.anaconda.com/archive/Anaconda3-2020.07-Windows-x86_64.exe
苹果系统:https://repo.anaconda.com/archive/Anaconda3-2020.07-MacOSX-x86_64.pkg
下载完成后在Anaconda Navigator中打开Spyder,建立新项目,然后包含前面下好的easyTrader项目源码,根据文档进行测试。
2.具体测试过程不多做说明,此链接已经足够详述使用 - easytrader
3.简要代码如下,
import easytrader
#登录自动交易模块
if __name__ == "__main__":
user = easytrader.use('universal_client') # 同花顺客户端
user.prepare(user='券商账号', password='', comm_password='', exe_path='C:\\同花顺软件\\同花顺\\xiadan.exe')
#user.enable_type_keys_for_editor()
#修改字体编码格式,有的不加会出问题/有的加了会出问题
#跟踪joinQuant
follower = easytrader.follower('jq')
follower.login(user='聚宽账号', password='聚宽密码')
follower.follow(user, '模拟交易url')
#例如:https://www.joinquant.com/algorithm/live/index?backtestId=xxx
其他测试:
#测试
follower.follow(user, 'https://www.joinquant.com/algorithm/live/index?backtestId=dc55932e5dd44ef6d7e2a3e012b08bf9',trade_cmd_expire_seconds=100000000000, cmd_cache=False)
#1.刷新数据
user.refresh()
#2.获取持仓
user.enable_type_keys_for_editor()
#print(user.position)
#3.获取资金情况
print(user.balance)
#4.一键打新
user.auto_ipo()
#5.查询当日成交
#print(user.today_trades)
#6.查询当日委托
print(user.today_entrusts)
#7.买入
#buy_no = user.buy('510500', price=8.63, amount=100)
#print(buy_no)
#8.卖出
sell_no = user.sell('159840', price=1.8, amount=1000)
print(sell_no)
#9.撤单
#user.cancel_entrust(235)
#10.退出客户端
#user.exit()
有两点需要强调:
(1)joinquant的模拟url需要先有策略生成了模拟交易,在交易界面才能拿到这个url,而不是分享链接的URL,如图红框才是所需url
(2)关于注释的那一行用于修改编码格式,输入格式没问题不要加。适用于某些无法输入文本的券商使用。user.enable_type_keys_for_editor()
解决办法:无法输入时,可添加修改格式的这行代码。本人可成功执行!
4.我使用的是通用客户端,遇到了如下问题,以及解决:
(1)TypeError:can't multiply sequence by non-int of type 'float'
解决方案:进入文件修改对应行数的price,转化成float格式
(2)joinquant链接获取失败的问题,强调的是下图红色箭头,务必确定链接填写正确
(3)未知错误打断,调整了交易间隔0s->1s即可,
顺便设置了滑点为5%,即0.05 。在follower.py里面设置也可
follower.follow(***, send_interval=1) # 设置下单间隔为 1 s
follower.follow(***, slippage=0.05) # 设置滑点为 5%
(4)非交易时间,获取到下单信号,出现价格'--'的data,无法转化为实际下单价格
(5)返回成功,实际未下单成功。
解决:添加了user.enable_type_keys_for_editor(),解决了输入为空的问题;又出现了输入都没有问题,但是最后确定无法点击成功。解决:使用指令pip install easytrader -U,进行升级,重启内核再次运行。
推测原因:时序逻辑有问题,执行了一个交易后队列堵塞。
(6)InvalidWindowHandle: Handle 4393826 is not a vaild window handle,
错误原因:通用同花顺客户端未提前打开
(7)非交易时间测试下单:出现"当前时间不允许此类证券交易"
(8)跟踪雪球组合,非交易时间触发循环tips,修改easytrader消除
(9)转债的数据最小10股,和普通一手100股进行区分