vn.py

Posted 高矩集思

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vn.py相关的知识,希望对你有一定的参考价值。

主要用到的工具包括远程连接客户端(ssh等连接工具)、Xubuntu-destop(服务器图形界面)、vnc4server(远程桌面服务)等,尽管安装配置的过程有些繁琐,但只要跟着图文说明一步步去做,100%能成功。

参考资料
https://zhuanlan.zhihu.com/p/83721583

服务器准备

在开始安装工作前,请先准备好1台阿里云的服务器(也可以选择AWS、腾讯云等):

  • 节点选择:华东2(国内期货、证券)或者香港(外盘)
  • 机器配置:2核以上CPU,4G以上内存,共享计算型(不要选突发实例)
  • 操作系统:Ubuntu 18.04 LTS 64位
  • 网络带宽:按需付费,20M以上带宽,分配公网IP
  • 登录方式:用户名和密码(不要选密钥)
  • 购买好后请记录下该服务器的公网IP,下面连接要用

更新软件仓库

Linux系统的发行版大多自带了软件包管理器,如Ubuntu和Debian的APT。
对于大部分常用的软件,用户都可以直接从官方提供的仓库中下载安装需要的软件,而不必自己去每个网站下载,这也是Linux与Windows在使用上的一大区别。
所以在Ubuntu系统中,本地保存了一个软件包安装源列表,列表里面都是一些网址信息,标识着某个源服务器上有哪些软件可以安装使用。所以为了能够正常安装最新版本的软件,首先需要更新软件包管理器里的这些列表。
只需要在Ubuntu终端中,运行输入命令sudo apt-get update,就会如上图所示,自动遍历访问源列表中的每个网址,并读取最新的软件信息,保存在本地系统中。

然后更新已安装使所有软件:

sudo apt-get upgrade
这个时候就会很快更新就会完成,如何不改变源就会应为一些众所周知原因很慢。

安装Xubuntu-destop

Xfce是一款针对Linux/UNIX系统的现代化轻量级开源桌面环境,最大的优点是内存消耗小,且系统资源占用率很低,Linux之父Linus Torvalds日常使用的桌面环境就是Xfce。

Xfce只是纯粹的桌面环境,但我们在日常使用操作系统时,还需要许多其他常用的工具,如多国语言支持、浏览器、输入法工具等。Xubuntu-desktop就是一套整合了Xfce桌面环境和其他常用图形界面软件的安装包。

安装方法也相对简单,在终端中运行命令:

sudo apt-get install xubuntu-desktop

在国内当前的网络环境下,Xubuntu-desktop的下载和安装可能耗时在10分钟的样子,期间可以在终端中看到类似上图所示的安装信息。

如果安装出现类似错误,可以采用使用aptitude进行安装,解决依赖冲突问题

The following packages have unmet dependencies:
 xubuntu-desktop : Depends: update-manager but it is not going to be installed
                   Recommends: gvfs-backends
                   Recommends: gvfs-fuse but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

解决方案

sudo apt-get install aptitude
sudo aptitude install xubuntu-desktop
# 如果是因为版本过高,选择n,不接受方案会将所需依赖降级保证安装成功

安装成功

搭建VNC服务

VNC是一款基于RFB协议的屏幕画面分享及远程操作软件,最大的特色在于跨平台性:我们可以用Windows电脑来控制Linux系统,反之亦然。

首先需要安装VNC服务器,在终端下运行命令:

sudo apt-get install vnc4server

安装完毕后,在终端运行vncserver命令,来启动VNC服务器。首次运行时需要设置VNC远程连接的密码,长度至少是6位,并且二次输入来确认(注意该密码不是Ubuntu账户的密码)

vnc4server

启动了远程桌面服务器后,下一步是配置xstartup文件,来设置远程桌面使用Xfce的桌面环境。用文本编辑器nano打开xstarup文件,在终端运行命令:

vim ~/.vnc/xstartup

可以看到如下内容:

需要在最后一行 "x-window-manager &" 前面添加一个"#"注释掉这行,同时在文件最后加入一段新的配置信息:

sesion-manager & xfdesktop & xfce4-panel &
xfce4-menu-plugin &
xfsettingsd &
xfconfd &
xfwm4 &

最终文件内容如下

配置完xstartup后,我们需要重启VNC服务器:先把默认的1号端口服务杀掉,然后新的服务我们改为使用9号端口(因为1号端口容易被扫描攻击),同时设置远程桌面的分辨率为1920x1080(根据你的本地显示器分辨率来设),运行下列命令:

vncserver -kill :1
vncserver -geometry 1920x1080 :9 
vncserver -geometry 1280x728 :9 

连接VNC桌面

mac终端使用VNCViewer软件,自行安装
其中【IP address】为阿里云公网IP,【Port】为VNC连接端口,在上一段中我们选择了在9号端口启动,故从需要把Port端口由默认的5900调整为5909。
输入之前设置的密码之后即可登录到系统远程桌面。

设置VNCServer自动启动

编辑vncserver.service文件

vim /root/vncserver.service

[Unit]
Description=vncservice
After=gdm.service
 
[Service]
Type=forking
User=root
ExecStart=/usr/bin/vncserver -geometry 1280x728 :9
ExecStop=/usr/bin/vncserver -kill :9
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

注册用户服务

sudo cp vncserver.service /lib/systemd/system
sudo systemctl daemon-reload
systemctl enable vncserver.service

启动VNC服务

# 启动服务
systemctl start vncserver.service
# 停止服务
systemctl stop vncserver.service

vn.pyCTP首次登陆修改密码 之 接口调用法

背景

最近一直在玩vn.py,上一篇文章vn.py开发环境搭建(windows)介绍了如何搭建二次开发环境,解决了一些搭建环境过程中遇到的坑。那么接下来这篇文章将解决运行期间的第一个问题。

开始vn.py

1.环境部署完成之后,启动examples/vn_trader/run.py,弹出启动页面。具体搭建过程参考vn.py开发环境搭建(windows)

技术图片

2。连接CTP,点击系统->连接CTP,弹出连接界面。

技术图片

3.介绍一下个字段
用户名:在simnow注册的用户名6位数字
密码:登录simnow使用的密码
经纪商代码:9999
交易服务器地址:180.168.146.187:10101
行情服务器地址:180.168.146.187:10111
产品名称:simnow_client_test
授权码:0000000000000000 16个0

4.获取你的用户名和密码
登录http://www.simnow.com.cn/,从右上角的注册账号开始操作,这里就不讲了,大家自己鼓捣吧。

问题来了

所有准备工作做好后,点击连接,这时左下角会显示日志。
技术图片

如果你是第一次登陆,那么会提示CTP首次登陆需要修改密码,这也就是我们今天要解决的问题

试图解决

刚看到这个问题觉得没什么,修改一下密码就可以了,但是。。。。。
首先没有再vn.py上找到可以修改密码的地方,后来想了想,也正常人家只是策略平台,也不仅仅是给CTP用,
所以去注册的地方simnow官网找找吧,但是。。。。
很遗憾仍然没有找到,这里不得不吐槽一下simnow了。是不是应该给个改密码的地方?

据说可以使用市场上的交易应用修改密码,大家可以去试试。或者大家有更好的方法也可以回复留言。

开始撸它

好吧,那么我们用程序员的方式来解决这个问题吧。

1.在vnpy/api/ctp目录下可以看到完整ctp开发的api,包括库和头文件。哈哈,是不是会让你产生非分之想?
2.我们在ThostFtdcTraderApi.h中发现了我们想要的东西

///用户口令更新请求
virtual int ReqUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, int nRequestID) = 0;

3.找到ctp api文档在simnow官网上可以找到,我这里用的事《综合交易平台TraderAPI接口说明.pdf》
4.开始撸代码吧,我先是在linux开始撸,后来发现我的操作系统编译器版本太低,当然升级版本应该可以解决,但升级gcc,glibc还是相当耗时的。所以后来移植到了windows,但工程还是linux风格,使用cmake构建,好在现在vs对cmake支持的不错。
5.继续撸,先贴一段吧

#include "ctp_trade_handler.h"
#include "INIReader.h"
#include <iostream>

int main(int argc, char* argv[])
{
    string a;

    INIReader reader("../conf/ctp.ini");
    if (reader.ParseError() != 0) {
        std::cout << "Can‘t load ‘test.ini‘
";
        return 1;
    }
    std::cout << reader.GetInteger("user","BrokerID",9999) << endl;
    ctp_trade_handle ctp;
    ctp.CreateFtdcTraderApi();
    ctp.RegisterFront("tcp://180.168.146.187:10100");

    ctp.init();

    //CThostFtdcReqAuthenticateField reqAuthenticate = { 0 };
    //strcpy(reqAuthenticate.AppID, "simnow_client_test");
    //strcpy(reqAuthenticate.UserID, "你的ID");
    //strcpy(reqAuthenticate.AuthCode, "0000000000000000");
    //strcpy(reqAuthenticate.BrokerID, "9999");
    //ctp.ReqAuthenticate(&reqAuthenticate, 1);

    CThostFtdcReqUserLoginField reqUserLogin = { 0 };
    strcpy(reqUserLogin.BrokerID,"9999");
    strcpy(reqUserLogin.UserID,"你的ID");
    strcpy(reqUserLogin.Password,"你的密码");
    ctp.ReqUserLogin(&reqUserLogin, 1);

    std::cout << "input new password : ";
    std::cin >> a;
    CThostFtdcUserPasswordUpdateField reqUserPasswordUpdate = { 0 };
    strcpy(reqUserPasswordUpdate.BrokerID, "9999");
    strcpy(reqUserPasswordUpdate.UserID, "你的ID");
    strcpy(reqUserPasswordUpdate.OldPassword, "新密码");
    strcpy(reqUserPasswordUpdate.NewPassword, a.c_str());

    ctp.ReqUserPasswordUpdate(&reqUserPasswordUpdate, 3);

    std::cin >> a;
    ctp.exit();
    return 0;
}

代码很简单,这里就不多说了。目前只是为了解决我修改密码的需求,后续还会不断完善。
如有需要可以自己取来撸,代码托管地址:https://github.com/FrankXMX/ctp.git
欢迎watch和star
6.使用上就是填写好你的相关信息,编译运行,输入新密码。得到屏幕输出。
7.回到vn.py,使用新密码重新连接ctp。

大功告成!!!

以上是关于vn.py的主要内容,如果未能解决你的问题,请参考以下文章

python 开源量化平台 vn.py有啥用

2023最新VeighNa量化VN.PY的系统学习资料

2023最新VeighNa量化VN.PY的系统学习资料

windows7sp1x64平台上部署vn.py开发框架

使用conda管理python环境

CtaAlgo vs PyAlgoTrade