int main() { // 初始化线程同步变量 sem_init(&sem,0,0); // 从环境变量中读取登录信息 char * CTP_FrontAddress = getenv("CTP_FrontAddress"); if ( CTP_FrontAddress == NULL ) { printf("环境变量CTP_FrontAddress没有设置\n"); return(0); } char * CTP_BrokerId = getenv("CTP_BrokerId"); if ( CTP_BrokerId == NULL ) { printf("环境变量CTP_BrokerId没有设置\n"); return(0); } strcpy(userLoginField.BrokerID,CTP_BrokerId); char * CTP_UserId = getenv("CTP_UserId"); if ( CTP_UserId == NULL ) { printf("环境变量CTP_UserId没有设置\n"); return(0); } strcpy(userLoginField.UserID,CTP_UserId); char * CTP_Password = getenv("CTP_Password"); if ( CTP_Password == NULL ) { printf("环境变量CTP_Password没有设置\n"); return(0); } strcpy(userLoginField.Password,CTP_Password); // 创建TraderAPI和回调响应控制器的实例 CThostFtdcTraderApi *pTraderApi = CThostFtdcTraderApi::CreateFtdcTraderApi(); CTraderHandler traderHandler = CTraderHandler(); CTraderHandler * pTraderHandler = &traderHandler; pTraderApi->RegisterSpi(pTraderHandler); // 设置服务器地址 pTraderApi->RegisterFront(CTP_FrontAddress); // 链接交易系统 pTraderApi->Init(); // 等待服务器发出登录消息 sem_wait(&sem); // 发出登陆请求 pTraderApi->ReqUserLogin(&userLoginField, requestID++); // 等待登录成功消息 sem_wait(&sem); //////////////////////////////////////////////////////////////////////////////////////////////// ///查询最大报单数量请求 /////////////////////////////////////////////////////////////////////////////////////////////// // 定义调用API的数据结构 CThostFtdcQueryMaxOrderVolumeField requestData; // 确保没有初始化的数据不会被访问 memset(&requestData,0,sizeof(requestData)); // 为调用结构题设置参数信息 ///经纪公司代码 TThostFtdcBrokerIDType char[11] strcpy(requestData.BrokerID,"66666"); ///投资者代码 TThostFtdcInvestorIDType char[13] strcpy(requestData.InvestorID,"60003010"); ///合约代码 TThostFtdcInstrumentIDType char[31] strcpy(requestData.InstrumentID,"SR609C4900"); ///买卖方向 TThostFtdcDirectionType char //// THOST_FTDC_D_Buy '0' 买 //// THOST_FTDC_D_Sell '1' 卖 requestData.Direction = THOST_FTDC_D_Sell; ///开平标志 TThostFtdcOffsetFlagType char //// THOST_FTDC_OF_Open '0' 开仓 //// THOST_FTDC_OF_Close '1' 平仓 //// THOST_FTDC_OF_ForceClose '2' 强平 //// THOST_FTDC_OF_CloseToday '3' 平今 //// THOST_FTDC_OF_CloseYesterday '4' 平昨 //// THOST_FTDC_OF_ForceOff '5' 强减 //// THOST_FTDC_OF_LocalForceClose '6' 本地强平 requestData.OffsetFlag = THOST_FTDC_OF_Open; ///投机套保标志 TThostFtdcHedgeFlagType char //// THOST_FTDC_HF_Speculation '1' 投机 //// THOST_FTDC_HF_Arbitrage '2' 套利 //// THOST_FTDC_HF_Hedge '3' 套保 requestData.HedgeFlag = THOST_FTDC_HF_Arbitrage; ///最大允许报单数量 TThostFtdcVolumeType int requestData.MaxVolume = 0; // 调用API,并等待响应函数返回 int result = pTraderApi->ReqQueryMaxOrderVolume(&requestData,requestID++); sem_wait(&sem); ///////////////////////////////////////////////////////////////////////////////////////////////// // 拷贝用户登录信息到登出信息 strcpy(userLogoutField.BrokerID,userLoginField.BrokerID); strcpy(userLogoutField.UserID, userLoginField.UserID); pTraderApi->ReqUserLogout(&userLogoutField, requestID++); // 等待登出成功 sem_wait(&sem); printf("主线程执行完毕!\n"); return(0); }