java ctp

作者:原创时间:2022-03-29
文档

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的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)
{undefined
CThostFtdcTraderApi*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};
{undefined
jfieldID fid= env->GetFieldID(clzparam, "BrokerID", "Ljava/lang/String;");
jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefined
cstr= env->GetStringUTFChars(jstr, NULL);
strcpy(QryTradingNotice.BrokerID, (char *) cstr);
}
env->ReleaseStringUTFChars((jstring)jstr, cstr);
}
{undefined
jfieldID fid= env->GetFieldID(clzparam, "InvestorID", "Ljava/lang/String;");
jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefined
cstr= env->GetStringUTFChars(jstr, NULL);
strcpy(QryTradingNotice.InvestorID, (char *) cstr);
}
env->ReleaseStringUTFChars((jstring)jstr, cstr);
}
{undefined
jfieldID fid= env->GetFieldID(clzparam, "InvestUnitID", "Ljava/lang/String;");
jstring jstr= (jstring) env->GetObjectField(pQryTradingNotice,fid);const char*cstr;if(jstr) {undefined
cstr= env->GetStringUTFChars(jstr, NULL);
strcpy(QryTradingNotice.InvestUnitID, (char *) cstr);
}
env->ReleaseStringUTFChars((jstring)jstr, cstr);
}
jint iRtn= ptrApi->ReqQryTradingNotice(&QryTradingNotice, ( int) nRequestID);returniRtn;
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java获取随机字符串 java daemon java获取随机数 java dashboard java获得当前路径 java表单校验 java dataframe java规则引擎 java dataset java读取json java读取本地excel java decaf java调python java decode java decodeuri java delegate java调用c++接口 java调用c++ java获取绝对值 java delete java获取运行时间 java cssbox java获取路径 java获取请求域名 java csrf java获取视频时长 java crontab java获取网络时间 java crash java获取秒级时间戳 java core java获取泛型class java corba java cookie java获取本地ip java controller java获取本周日期 java context japanese java 微信怎么群发消息