Esempio n. 1
0
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);

}