接上文准备开辟一块新阵地,在富途创建账号之后,就等着香港银行卡开卡再入金,至少要1个月。

再等的过程中,先在linux服务器上部署一个量化程序,初期就发信号,手动下单。因为自带的提醒功能只能简单地按价格报价,自己写程序可以计算各种公式,然后推送信号

富途open api的架构

image

它采用了要在本机先部署一个FutuOpenD Agent程序的架构,和盈透证券类似,有一大类交易软件提供的接口都是这样的方法,有如下好处

  1. 避免在互联网上公开暴露服务端口,安全性较高
  2. 可以优化网络传输,请求排队/流控等都容易做
  3. 对外接口协议可以更加简化,通用,消除编程语言捆绑

ctp就是在公网上直接暴露ip/port,很有勇气,历史原因,这也算是大自然的馈赠吧,但是如果要做高频交易,还是ctp这种直接暴露的更方便

部署注意事项

部署很简单,直接按文档做就行了 https://openapi.futunn.com/futu-api-doc/,有两个坑要注意

  1. FutuOpenD.xml 里面的login_pwd_md5 字段生成
1
echo -n "登录密码"|md5

echo 后面一定要加n,避免把换行符带进去了

  1. futu-api 有兼容性问题 用pip3 install futu-api 安装client 代码之后,运行会报错 它要求低版本的 protobuf,需要手动执行 pip3 install --upgrade protobuf==3.20.0

FutuOpenD第一次启动需要手机验证码,可以先用./FutuOpenD 运行,把登录跑通,然后再加入到进程管理当中

FutuOpenD的部署还是用习惯的supervisor,加入下面的配置即可

[program:futu]
command=/home/root/futu/FutuOpenD_6.1.2608_NN_Ubuntu16.04/FutuOpenD
stdout_logfile=/home/root/futu/log/run.log
redirect_stderr=true
user=root
directory=/home/root/futu
stdout_logfile_maxbytes=100MB

验证部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from futu import *

quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)

ret, data = quote_ctx.get_future_info(["HK.HTImain",])
if ret == RET_OK:
    print(data)
    print(data['code'][0])    # 取第一条的股票代码
    print(data['code'].values.tolist())   # 转为 list
else:
    print('error:', data)
quote_ctx.close() # 结束后记得关闭当条连接,防止连接条数用尽

执行上面这段程序,能输出结果就说明运行正常