當前位置:生活全書館 >

IT科技

> ctp java

ctp java

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java ctp是什麼,讓我們一起了解一下。

ctp是綜合交易平臺,是技術專門為期貨公司開發的一套期貨經紀業務管理系統,由交易、風險控制、結算三大系統組成。JAVA介面中的CTP是由JNI實現的,通過靜態方法例如CreateFtdcTraderApi方法來建立。

那麼在期貨交易中,由JNI實現的CTP在JAVA介面中是如何操作的?

CTP的標頭檔案分為3個部分:

1. ThostFtdcUserApiDataType.h,api的資料型別, typedef了一大堆型別,char, char[], int, short, double。 對於大部分char型,又#define了很多字元常量。開頭的列舉型別比較特殊。還有那個單引號括起來的連續字元也比較特殊。

2. ThostFtdcUserApiStruct.h, api的資料結構,用於api和spi的函式引數,資料結構的成員變數的型別全部來自上面的標頭檔案。

3.  API、SPI (Trader, Market Data)

java ctp

他的實現思路是:

Java的API類跟C++中一樣,只能通過靜態方法例如CreateFtdcTraderApi方法來建立。

Java的API類,包含一個C++的API的例項的指標。API的每個函式,全部通過native方法。這個native方法通過這個指標呼叫對應的CTP API。例如:public native int ReqUserLogin(CThostFtdcReqUserLoginField pReqUserLoginField,int nRequestID);

Java中的SPI類可以用new來建立,它的建構函式會呼叫newNativeSpiInstance這個native方法。newNativeSpiInstance(程式碼最長的函式)會幹這麼幾件事。

具體操作:實現每一個java API類的native函式。

JNIEXPORT jint JNICALL Java_ctp_CThostFtdcTraderApi_ReqQryTradingNotice(JNIEnv*env,jobject obj,jobject pQryTradingNotice,jint nRequestID){undefinedCThostFtdcTraderApi*ptrApi;jclass clazzTraderApi= env->FindClass("Lctp/CThostFtdcTraderApi;");jfieldID fidTraderApi= env->GetFieldID(clazzTraderApi, "ptrApi", "J");ptrApi= (CThostFtdcTraderApi*)env->GetLongField(obj,fidTraderApi);jclass clzparam= env->FindClass("Lctp/apistruct/CThostFtdcQryTradingNoticeField;");CThostFtdcQryTradingNoticeField QryTradingNotice= { 0};{undefinedjfieldID fid= env->GetFieldID(clzparam, "BrokerID", "Ljava/lang/String;");jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefinedcstr= env->GetStringUTFChars(jstr, NULL);strcpy(QryTradingNotice.BrokerID, (char *) cstr);}env->ReleaseStringUTFChars((jstring)jstr, cstr);}{undefinedjfieldID fid= env->GetFieldID(clzparam, "InvestorID", "Ljava/lang/String;");jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefinedcstr= env->GetStringUTFChars(jstr, NULL);strcpy(QryTradingNotice.InvestorID, (char *) cstr);}env->ReleaseStringUTFChars((jstring)jstr, cstr);}{undefinedjfieldID fid= env->GetFieldID(clzparam, "InvestUnitID", "Ljava/lang/String;");jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefinedcstr= env->GetStringUTFChars(jstr, NULL);strcpy(QryTradingNotice.InvestUnitID, (char *) cstr);}env->ReleaseStringUTFChars((jstring)jstr, cstr);}jint iRtn= ptrApi->ReqQryTradingNotice(&QryTradingNotice, ( int) nRequestID);returniRtn;}

標籤: java ctp
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/eg81y6.html