CTP 4097錯誤根源 / CTP程序運行沒有反應

其實這本是個很簡單的錯誤,但經常看到有人問到,而且網上居然還出了玄學解答,所以乾脆單獨寫一篇解釋一下這個錯誤。

這一篇文章同樣適用於解決爲什麼沒有OnFrontConnected回調,Decrypt handshake data failed,8193等錯誤。如果是運行沒有反應,請直接看2.原因排查。

1. 出處

目前在dll底層代碼中,如果檢測到與CTP前置網絡斷開時會有一段代碼

printf("CThostFtdcUserApiImplBase::OnSessionDisconnected ...

輸出這個錯誤,並且回調到API的spi函數OnFrontDisconnected。所以在寫策略時,如果在spi中的OnFrontDisconnected函數裏面打印nReason這個函數參數,遇到網絡斷開,就會輸出這個4097。如下:

其實在API頭文件中也早就寫明瞭,在OnFrontDisconnected前面有:

///@param nReason 錯誤原因
///        0x1001 網絡讀失敗
///        0x1002 網絡寫失敗
///        0x2001 接收心跳超時
///        0x2002 發送心跳失敗
///        0x2003 收到錯誤報文

0x表示是16進制,0x1001轉成十進制即是4097,0x2001轉成十進制即是8193。

2. 原因排查

1)覈對版本

目前CTP要求API版本和後臺版本一致纔能有正確的onfrontconnected回調。

版本不對會不停地回調OnFrontDisconnected,或者輸出Decrypt handshake data failed,或者沒有任何反應。

所以先檢查API版本是否正確,可以調用函數GetApiVersion輸出當前API版本。

目前期貨公司正式生產和simnow上均是v6.3.15_20190220版本,期貨公司評測使用v6.3.13或者v6.3.16版本(小版本號不影響評測)。

2)覈對網絡

確保版本無誤的話那基本就是網絡問題了。先檢查交易前置網是否暢通,建議使用telnet,不要使用ping(因爲服務端有可能會禁ping)。如下:

telnet 180.168.146.187 10100

如果telnet沒有反應,要麼是你自己後臺的前置地址搞錯(請去看QQ羣裏公告地址)了,要麼說明CTP後臺服務器沒有啓動(此時正常環境多數是因爲沒在交易時段,可以切到7*24小時環境測試

如果地址沒有搞錯,正常生產上,生產時間是不會出現這樣的問題的,但simnow因爲用戶很多,有時會導致前置擁堵,就會出現這樣的問題。另外simnow 7*24小時地址也不是很穩定,常出現這樣的問題。

另外如果是非交易時段(交易時段參見文章《一個獲取最新期貨品種交易時間的小腳本》),那後臺服務確實有可能沒開。這時可以切到simnow模擬的7*24小時環境測試。

如果連接的simnow前置地址出現這樣的問題,可以切換到其他兩組模擬地址試一下,如果還不行,那隻能去羣裏問下客服是否連接不上了,等待修復了,沒有其他方案。

 

歡迎關注公衆號,一起學習程序化交易!

 

 

 

 

 

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