【vn.py】CTP首次登陸修改密碼 之 接口調用法

背景

最近一直在玩vn.py,上一篇文章vn.py開發環境搭建(windows)介紹瞭如何搭建二次開發環境,解決了一些搭建環境過程中遇到的坑。那麼接下來這篇文章將解決運行期間的第一個問題。

開始vn.py

1.環境部署完成之後,啓動examples/vn_trader/run.py,彈出啓動頁面。具體搭建過程參考vn.py開發環境搭建(windows)

2234016273-5e253eb15738f_articlex.png

2。連接CTP,點擊系統->連接CTP,彈出連接界面。

784170251-5e253f3ca8fea_articlex.png

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/,從右上角的註冊賬號開始操作,這裏就不講了,大家自己鼓搗吧。

問題來了

所有準備工作做好後,點擊連接,這時左下角會顯示日誌。
122734089-5e2541218be06_articlex.png

如果你是第一次登陸,那麼會提示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。

大功告成!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章