本文為Ubuntu-VNPY-CTP系列第一篇,下面是后續文章
一、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節用windows實驗vn station的使用方法,與ubuntu無關。
在Windows下,使用vnpy studio 2.0.9,安裝好后可以到下面的文件目錄看到策略代碼:
C:\vnstudio\Lib\site-packages\vnpy\app\cta_strategy\strategies
打開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官網上的移動服務器很快,電信經常掉線),出現“合約信息查詢成功”字樣。