java,ctp
<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的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;}
-
中国移动定向流量是什么意思
1、定向流量是指移动公司给用户专门使用某个业务或者某个应用的流量:比如说只限用于乐视看视频、或者实现用于微信等等。2、定向流量包是指具有特定用途的流量包,只能通过某个软件来使用的流量包,例如某个视频软件的流量包,听歌包,游戏包,等等。...
-
学习机什么牌子好
1、步步高学习机;“步步高点读机!哪里不会点哪里!”。这句广告可以说是现象级的了。步步高不只是口号喊的响亮,作为老牌大厂,步步高的学习机确实很优异。步步高学习机是寓教于乐的教学方式。通过兴趣,来进行教育。学习知识,获得金币。金币可以饲养学习机中的电子宠物...
-
关于神舟飞船的资料
1、神舟号飞船的概念:神舟飞船是中国自行研制,具有完全自主知识产权,达到或优于国际第三代载人飞船技术的飞船,神舟号飞船是采用三舱一段,即由返回舱,轨道舱,推进舱和附加段构成,由13个分系统组成。神舟号飞船与国外第三代飞船相比,具有起点高,具备留轨利用能力等特点,神...
-
qq空间无访问权限怎么进入
如果你的qq好友设置了qq空间权限,那么是没有办法强制进入对方的空间的,只能通过正当方式访问,得到空间权限主人许可后进入;或者是通过回答问题,只要回答正确即可进入空间。QQ空间就像我们的日记本一样,我们可以自由地在里面记录自己的心情,也可以把具有纪念意义的照片...