【vn.py】CTP首次登陆修改密码 之 接口调用法

背景

最近一直在玩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‘\n";
        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。

大功告成!!!

原文地址:https://blog.51cto.com/14670895/2468384

时间: 2024-10-07 00:07:10

【vn.py】CTP首次登陆修改密码 之 接口调用法的相关文章

NetScaler对于首次登陆更改密码、密码过期、下次登陆更改密码

对于首次登陆更改密码.密码过期.下次登陆更改密码等问题,需要经过如下配置方可实现: 1.对于在AG上认证的情况,需要在AG的AD配置界面,勾选TLS(默认是PLAINTEXT),并勾选"Allow                         Password Change" 2.并且在WI上同样需要配置允许用户在密码过期时或者随时更改密码. 3.对于在SF上认证的情况,只需要在SF上配置允许用户更改密码即可. 参考KB: http://support.citrix.com/arti

Exchange Server 2010中 配置OWA页面首次登录修改密码

1) 分别在客户端访问角色服务器中分别打开注册表. 2) 定位到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\MSExchange OWA 3) 新建DWORD(32-位)值ChangeExpiredPasswordEnabled,并修改为1: 4) 执行如下命令重启IIS服务: 5) 重启后,再次打开OWA页面,输入帐号后,即可进生密码修改,如下图所示: 补充:如未执行上述操作,新建用户或重置密码用户如勾选下次登录修改密码,则会提示如下错误:

20180601_MySQL下载、安装、配置、修改密码、图形化显示

MySQL下载.安装.配置.修改密码.图形化显示 mySQL下载 使用搜索引擎,搜索mysql 进入mysql官网 DOWNLOADS--Community--MySQL Community Server 下载对应版本的mysql数据库,这里我们选择:MySQL Community Server 5.7 进入下载页面,这里会弹出一个提示 选择No thanks, just start my download. 已经开始下载了,等待下载完成即可. MySQL安装和配置 解压压缩包: 将下载的mys

centos7下mariadb 首次修改密码及忘记密码处理方法

首次修改密码 第一种 >mysqladmin -u root -p[oldpass] password newpass 注意oldpass(老密码)可选,如果root默认密码为空,则不需要输入 如果需要更改老密码,请注意老密码与-p之间不要有空格,否则会报错,另外password和newpass(新密码)之间以空格分隔. 第二种 初始化数据库 /usr/local/mysql/bin/mysql_secure_installation                yum安装是在/usr/bin

忘记Zabbix管理页面登陆密码清理况下,修改密码!!

相信有很多人由于文档的缺失,或者工作交接的某些原因导致密码丢失,从而无法登录Zabbix管理界面,现在我发现了一个方法可以修改密码(直接在数据库修改表内容) 废话不多说,直接入主题: 1.进入数据库,修改zabbix的数据库下面的user表,不要告诉我数据库密码也忘了. MariaDB [(none)]> show databases; +--------------------+ | Database           | +--------------------+ | informati

用java进行LDAP用户登陆(用户认证)及修改密码

一.用户认证 public String execute(){ Hashtable env = new Hashtable(); String LDAP_URL = "ldap://8.8.8.8:389"; // LDAP访问地址 env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, LDAP_URL);

mysql5.7如何修改密码以及密码如何忘记无密码登陆

今天买了一台阿里云服务器,Centos7.3系统,环境是LAMP.学生价9.8元是真的很实惠了.然后想修改一下mysql服务器的密码(mysql版本5.7),结果操作失误,密码给忘记了,导致新旧密码都不能登陆服务器,真是蛋疼.不过最终依靠自己的努力还是解决了问题. 错误案例演示 先来看一下我刚开始是怎么出错的(这是错误案例,大家不要照着这个例子敲,这里先演示了如何出错的,最后再修改): 1.先登陆服务器,use一个数据库"mysql".然后修改user表里面的数据.毕竟mysql的密码

Office365 配置完成ADFS之后修改密码之后需要删除登陆信息

问题 =============== ?配置ADFS登录之后修改密码必须要删除登录信息,如何解决 原因 =============== ADFS服务器已知问题 解决方案 =============== 安装HotFix Include the hotfix to ADFS 3.0: https://support.microsoft.com/kb/2948086

mysql dos下登陆和修改密码

一.连接MYSQL. 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本地: 例:mysql -hlocalhost -uroot -p123 2.连接到远程主机上的MYSQL 例:mysql -h192.168.0.110 -uroot -p123 二.修改密码. 格式:mysqladmin -h主机地址 -u用户名 -p旧密码 password 新密码 1.修改本地: 例:mysqladmin -hlocalhost -uroot -p123 password 456