本文为Ubuntu-VNPY-CTP系列第一篇,下面是后续文章
vnpy在CTP穿透式验证在ubuntu下的编译
东吴期货CTP自行开发穿透式监管认证指导
vnpy不使用rqdata,尝试tushare
前传:ubuntu虚拟内存(可选)
如果使用云服务器,可能会面临内存不足的情况。可以使用虚拟内存。
sudo dd if=/dev/zero of=swapfile bs=1024 count=1024000
把虚拟映象文件转换成 swap 文件:
mkswap swapfile
激活 swap:
swapon swapfile
最后如果需要卸载这个 swap 文件,可以进入建立的 swap 文件目录。执行下列命令:
sudo swapoff swapfile
如果需要一直保持这个 swap ,则切换到root后
vim /etc/fstab
卸载删除swapfile
swapoff /swapfile
rm -f /swapfile
一、vnpy在ubuntu下的安装
1.1.更新源
刚刚安装好的Ubuntu18.04没有vim,为了后面修改文件,先安装vim
sudo apt-get install vim
在ubuntu 18.04中,按照之前的博文《linux常用命令》修改成源阿里云的源。我们把代码粘贴在这里:
#备份配置文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
#打开文件
sudo vim /etc/apt/sources.list
#重开终端,查看版本代号
lsb_release -c
#Ubuntu 12.04 (LTS)代号为precise
#Ubuntu 14.04 (LTS)代号为trusty
#Ubuntu 15.04 代号为vivid
#Ubuntu 15.10 代号为wily
#Ubuntu 16.04 (LTS)代号为xenial
#Ubuntu 18.04 代号为bionic
#更新文件如下
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
#更新文件列表
sudo apt-get update
1.2.安装Miniconda3
build-essential不能少,apt-get安装之。
sudo apt-get install build-essential
之后安装Python运行环境,Miniconda是轻量化的python包管理器。
安装Miniconda,获得Python 3.7运行环境(为vnpy2.0.9匹配)。具体方法是去官网下载Miniconda3-latest-Linux-x86_64.sh,在终端直接bash即可。
bash Miniconda3-latest-Linux-x86_64.sh
最后一步记得选yes
1.3.安装postgresql包
安装过程vnpy之前,需要一个叫postgresql的包,少不了,网上有用源码安装或者用yum安装的,都不好。源码太麻烦,yum容易跟apt抢戏。
最好的是下面的方法:
sudo vim /etc/apt/sources.list.d/pgdg.list
#加入如下内容
deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main
#最后
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
还要增加一个包libpq-dev
sudo apt-get install libpq-dev
1.4.安装vnpy2.0.9
下载vnpy2.0.9,解压。切换到vnpy2.0.9目录下,bash文件install.sh安装。sudo执行时会重置环境变量,导致miniconda在普通用户的.bashrc的设置失效。具体地可以从/etc/sudoers文件里的env_reset中得到佐证。要解决bash与sudo命令的冲突,可以进行如下命令进行安装:
sudo PATH=/home/han/miniconda3/bin:$PATH bash install.sh
*可选操作
即使如此,还是会有个warning:
WARNING: The directory '/home/zhex/.cache/pip/http' or its parent directory is not owned by the curr
很容易理解,root并不拥有普通用户的所有文件,所以一些事情就没做,解决办法:
sudo chown -R root /home/han/.cache/pip/
sudo chown -R root /home/han/.cache/pip/http/
解决了warning。
1.5.VNPY运行
切换到vnpy-2.0.9的examples/vn_trader目录下,修改run.py注释掉四行,
# from vnpy.gateway.femas import FemasGateway
# from vnpy.app.option_master import OptionMasterApp
#main_engine.add_gateway(FemasGateway)
# main_engine.add_app(OptionMasterApp)
最后下在该目录下
python run.py
二、VNPY的使用
2.1windows下VN station下连接simnow
2.1节用wi壯陽藥 ndows实验vn station的使用方法,与ubuntu无关。
在Windows下,使用vnpy studio 2.0.9,安装好后可以到下面的文件目录看到策略代码:
C:vnstudioLibsite-packagesvnpyappcta_strategystrategies
打开vn station,点击VN Trade Lite,找到连接CTP。(这里用的好像是simnow的电信服务器,后来发现移动的更快一些)
进行连接,主界面日志框出现“交易服务器连接成功”和“行情服务器连接成功”字样。在Cta策略设置中,不得不吐槽一下合约的命名规则,玻璃:FG005.CZCE,m2005.DCE,rb2005.SHFE。
2.2 ubuntu下的Pycharm 安装
在Ubuntu中,vnpy的各项服务需要自行配置,我们需要比较好轻松地看代码,安装一个Pycharm先。为了方便,在磁盘允许的情况下,使用snap安装,只需要下面的两行代码:
sudo apt-get install snapd snapd-xdg-open
snap install pycharm-community --classic
我安装好的版本是,当你打开了第一个工程(直接打开vnpy文件夹),会提示包缺失。实际上pycharm的python解释器是默认的系统自带的那个,我们要改成conda的。在添加解释器(和运行环境)的时候,要选择
/home/han/miniconda3/bin/python3.7 #interpreter
/home/han/miniconda3/bin/conda #conda executable
只有当你看到,诸如pyqt5,ta-lib,sqlite这些系统原来不会给你装好的包出现了,才有可能是对的。
2.3 ubuntu下踩坑:No module named ‘vnpy.api.ctp.vnctpmd’
当我们运行vnpy-2.0.9/example/client_server/server/run_server.py文件的时候会报上面的错误。ctp接口在没有build的状况下直接安装了vnpy所致。
解决方法,在vnpy-2.0.9目录下运行
python setup.py build
进行编译,在生成的/build/lib.linux-x86_64-3.7/vnpy/api/ctp目录下找到两个.so文件,vnctpmd.cpython-37m-x86_64-linux-gnu.so和vnctptd.cpython-37m-x86_64-linux-gnu.so,把它们粘贴到/vnpy-2.0.9/vnpy/api/ctp目录下即可。
2.4 vnpy在ubuntu下运行(2020年2月4日补充)
经过上面的几步,可以在ubuntu下实盘vnpy。
from vnpy.app.cta_strategy import CtaStrategyApp
from vnpy.event import EventEngine
from vnpy.gateway.ctp import CtpGateway
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
def main():
""""""
qapp = create_qapp()
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
main_window = MainWindow(main_engine, event_engine)
main_window.showMaximized()
qapp.exec()
if __name__ == "__main__":
main()
正确输入信息后连接服务器(我的网络连接simnow官网上的移动服务器很快,电信经常掉线),出现“合约信息查询成功”字样。