void CTraderApi::OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast)) { OnTrade(pTrade); } }
void CTraderApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { RspUserLoginField* pField = (RspUserLoginField*)m_msgQueue->new_block(sizeof(RspUserLoginField)); if (!IsErrorRspInfo(pRspInfo) &&pRspUserLogin) { pField->TradingDay = GetDate(pRspUserLogin->tradeDate); pField->LoginTime = GetTime(pRspUserLogin->lastLoginTime); //sprintf(pField->SessionID, "%d:%d", pRspUserLogin->FrontID, pRspUserLogin->SessionID); m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Logined, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0); m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Done, 0, nullptr, 0, nullptr, 0, nullptr, 0); // 记下登录信息,可能会用到 memcpy(&m_RspUserLogin,pRspUserLogin,sizeof(CThostFtdcRspUserLoginField)); m_nMaxOrderRef = atol(pRspUserLogin->localOrderNo); // 自己发单时ID从1开始,不能从0开始 m_nMaxOrderRef = m_nMaxOrderRef>1 ? m_nMaxOrderRef:1; } else { pField->ErrorID = pRspInfo->ErrorID; strncpy(pField->ErrorMsg, pRspInfo->ErrorMsg, sizeof(ErrorMsgType)); m_msgQueue->Input_NoCopy(ResponeType::OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0); } }
void CTraderApi::OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast)) { if (pInstrument) { InstrumentField* pField = (InstrumentField*)m_msgQueue->new_block(sizeof(InstrumentField)); strcpy(pField->InstrumentID, pInstrument->instID); strcpy(pField->ExchangeID, pInstrument->exchangeID); strcpy(pField->Symbol, pInstrument->instID); strcpy(pField->InstrumentName, pInstrument->name); pField->Type = CThostFtdcInstrumentField_2_InstrumentType(pInstrument); //pField->VolumeMultiple = pInstrument->VolumeMultiple; pField->PriceTick = pInstrument->tick; //strncpy(pField->ExpireDate, pInstrument->ExpireDate, sizeof(TThostFtdcDateType)); //pField->OptionsType = TThostFtdcOptionsTypeType_2_PutCall(pInstrument->OptionsType); m_msgQueue->Input_NoCopy(ResponeType::OnRspQryInstrument, m_msgQueue, m_pClass, bIsLast, 0, pField, sizeof(InstrumentField), nullptr, 0, nullptr, 0); } else { m_msgQueue->Input_NoCopy(ResponeType::OnRspQryInstrument, m_msgQueue, m_pClass, bIsLast, 0, nullptr, 0, nullptr, 0, nullptr, 0); } } }
void CTraderApi::OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast)) { OnOrder(pOrder); } }
void CTraderApi::OnErrRtnOrderAction(CSecurityFtdcOrderActionField *pOrderAction, CSecurityFtdcRspInfoField *pRspInfo) { OrderIDType orderId = { 0 }; if (pOrderAction) { sprintf(orderId, "%d:%d:%s", pOrderAction->FrontID, pOrderAction->SessionID, pOrderAction->OrderRef); } else { IsErrorRspInfo("OnErrRtnOrderAction", pRspInfo, 0, true); } unordered_map<string, OrderField*>::iterator it = m_id_platform_order.find(orderId); if (it == m_id_platform_order.end()) { // 没找到?不应当,这表示出错了 //assert(false); } else { // 找到了,要更新状态 // 得使用上次的状态 OrderField* pField = it->second; pField->ExecType = ExecType::ExecType_CancelReject; pField->RawErrorID = pRspInfo->ErrorID; strncpy(pField->Text, pRspInfo->ErrorMsg, sizeof(Char256Type)); m_msgQueue->Input_Copy(ResponeType::ResponeType_OnRtnOrder, m_msgQueue, m_pClass, 0, 0, pField, sizeof(OrderField), nullptr, 0, nullptr, 0); } }
void CTraderApi::OnErrRtnOrderInsert(CSecurityFtdcInputOrderField *pInputOrder, CSecurityFtdcRspInfoField *pRspInfo) { OrderIDType orderId = { 0 }; if (pInputOrder) { sprintf(orderId, "%d:%d:%s", m_RspUserLogin.FrontID, m_RspUserLogin.SessionID, pInputOrder->OrderRef); } else { IsErrorRspInfo("OnErrRtnOrderInsert", pRspInfo, 0, true); } unordered_map<string, OrderField*>::iterator it = m_id_platform_order.find(orderId); if (it == m_id_platform_order.end()) { // 没找到?不应当,这表示出错了 //assert(false); // LTS在开始连接时也会收到此回报,无语啊 } else { // 找到了,要更新状态 // 得使用上次的状态 OrderField* pField = it->second; strcpy(pField->ID, orderId); strcpy(pField->LocalID, pField->ID); pField->ExecType = ExecType::ExecType_Rejected; pField->Status = OrderStatus::OrderStatus_Rejected; pField->RawErrorID = pRspInfo->ErrorID; strncpy(pField->Text, pRspInfo->ErrorMsg, sizeof(Char256Type)); m_msgQueue->Input_Copy(ResponeType::ResponeType_OnRtnOrder, m_msgQueue, m_pClass, 0, 0, pField, sizeof(OrderField), nullptr, 0, nullptr, 0); } }
void CTraderApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { RspUserLoginField field = { 0 }; if (!IsErrorRspInfo(pRspInfo) &&pRspUserLogin) { strncpy(field.TradingDay, pRspUserLogin->tradeDate, sizeof(DateType)); strncpy(field.LoginTime, pRspUserLogin->lastLoginTime, sizeof(TimeType)); //sprintf(field.SessionID, "%d:%d", pRspUserLogin->FrontID, pRspUserLogin->SessionID); XRespone(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Logined, 0, &field, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0); XRespone(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Done, 0, nullptr, 0, nullptr, 0, nullptr, 0); // 记下登录信息,可能会用到 memcpy(&m_RspUserLogin,pRspUserLogin,sizeof(CThostFtdcRspUserLoginField)); m_nMaxOrderRef = atol(pRspUserLogin->localOrderNo); // 自己发单时ID从1开始,不能从0开始 m_nMaxOrderRef = m_nMaxOrderRef>1 ? m_nMaxOrderRef:1; } else { field.ErrorID = pRspInfo->ErrorID; strncpy(field.ErrorMsg, pRspInfo->ErrorMsg, sizeof(pRspInfo->ErrorMsg)); XRespone(ResponeType::OnConnectionStatus, m_msgQueue, this, ConnectionStatus::Disconnected, 0, &field, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0); } if (bIsLast) ReleaseRequestMapBuf(nRequestID); }
void CTraderApi::OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { IsErrorRspInfo(pRspInfo, nRequestID, bIsLast); if (bIsLast) ReleaseRequestMapBuf(nRequestID); }
void CTraderApi::OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast)) { if (pInstrument) { InstrumentField field = { 0 }; strcpy(field.InstrumentID, pInstrument->instID); strcpy(field.ExchangeID, pInstrument->exchangeID); strcpy(field.Symbol, pInstrument->instID); strcpy(field.InstrumentName, pInstrument->name); field.Type = CThostFtdcInstrumentField_2_InstrumentType(pInstrument); //field.VolumeMultiple = pInstrument->VolumeMultiple; field.PriceTick = pInstrument->tick; //strncpy(field.ExpireDate, pInstrument->ExpireDate, sizeof(TThostFtdcDateType)); //field.OptionsType = TThostFtdcOptionsTypeType_2_PutCall(pInstrument->OptionsType); XRespone(ResponeType::OnRspQryInstrument, m_msgQueue, this, bIsLast, 0, &field, sizeof(InstrumentField), nullptr, 0, nullptr, 0); } else { XRespone(ResponeType::OnRspQryInstrument, m_msgQueue, this, bIsLast, 0, nullptr, 0, nullptr, 0, nullptr, 0); } } if (bIsLast) ReleaseRequestMapBuf(nRequestID); }
///请求删除预埋撤单响应 void CtpTraderSpi::OnRspQryParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( !IsErrorRspInfo(pRspInfo) && pParkedOrderAction) { } if(bIsLast) SetEvent(g_hEvent); }
///删除预埋单响应 void CtpTraderSpi::OnRspRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( !IsErrorRspInfo(pRspInfo) && pRemoveParkedOrder) { } if(bIsLast) SetEvent(g_hEvent); }
void CtpTraderSpi::OnRspQryBrokerTradingAlgos(CThostFtdcBrokerTradingAlgosField *pBrokerTradingAlgos, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( !IsErrorRspInfo(pRspInfo) && pBrokerTradingAlgos) { } if(bIsLast) SetEvent(g_hEvent); }
///期货发起银行资金转期货应答 void CtpTraderSpi::OnRspFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( IsErrorRspInfo(pRspInfo) || (pReqTransfer==NULL)) { ShowCbErrs(pRspInfo->ErrorMsg); } if(bIsLast) SetEvent(g_hEvent); }
void CtpTraderSpi::OnRspQryTradingNotice(CThostFtdcTradingNoticeField *pTradingNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo) && pTradingNotice) { } if(bIsLast) SetEvent(g_hEvent); }
///登出请求响应 void CtpMdSpi::OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( !IsErrorRspInfo(pRspInfo) && pUserLogout) { } if(bIsLast) SetEvent(g_hEvent); }
///请求查询交易所调整保证金率响应 void CtpTraderSpi::OnRspQryExchangeMarginRateAdjust(CThostFtdcExchangeMarginRateAdjustField *pExchangeMarginRateAdjust, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( !IsErrorRspInfo(pRspInfo) && pExchangeMarginRateAdjust ) { } if(bIsLast) SetEvent(g_hEvent); }
///请求查询投资者品种/跨品种保证金响应 void CtpTraderSpi::OnRspQryInvestorProductGroupMargin(CThostFtdcInvestorProductGroupMarginField *pInvestorProductGroupMargin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( !IsErrorRspInfo(pRspInfo) && pInvestorProductGroupMargin ) { } if(bIsLast) SetEvent(g_hEvent); }
void MainTraderSpi::OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { qDebug() << "<<<---" << "OnRspSettlementInfoConfirm:" << QThread::currentThreadId() <<endl; if (bIsLast && !IsErrorRspInfo(pRspInfo)) { emit SettlementInfoConfirmed(); } }
void CTraderSpi::OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { std::cout << "--->>> " << "OnRspQryInstrument" << std::endl; if (bIsLast && !IsErrorRspInfo(pRspInfo)) { ///请求查询合约 ReqQryTradingAccount(); } }
void CTraderSpi::OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { std::cout << "--->>> " << "OnRspSettlementInfoConfirm" << std::endl; if (bIsLast && !IsErrorRspInfo(pRspInfo)) { ///请求查询合约 ReqQryInstrument(); } }
void CTraderSpi::OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { std::cout << "--->>> " << "OnRspQryInvestorPosition" << std::endl; if (bIsLast && !IsErrorRspInfo(pRspInfo)) { ///报单录入请求 ReqOrderInsert(); } }
void CTraderSpi::OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { std::cout << "--->>> " << "OnRspQryTradingAccount" << std::endl; if (bIsLast && !IsErrorRspInfo(pRspInfo)) { ///请求查询投资者持仓 ReqQryInvestorPosition(); } }
void Trader::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { cout << "--->>> OnRspUserLogin" << endl; if (bIsLast && !IsErrorRspInfo(pRspInfo)) { m_sOrderRef = atoi(pRspUserLogin->MaxOrderRef) + 1; ReqSettlementInfoConfirm(); } }
void Trader::OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( bIsLast && !IsErrorRspInfo(pRspInfo) && pTrade ) { ostringstream oss; oss << pTrade->TradeDate << ' ' << pTrade->TradeTime << ' ' << pTrade->Direction << ' ' << pTrade->InstrumentID << ' ' << pTrade->Price << ' ' << pTrade->Volume; this->trade_records.push_back( oss.str() ); } }
void CtpTradeSpi::OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo) && pInputOrder){ SYNC_PRINT << "[Back Order]" << CommonUtils::StringFromStruct(*pInputOrder); SYNC_PRINT << "[Trade] 回复 | 订单插入成功...订单引用:" << pInputOrder->OrderRef; } //if (bIsLast) SetEvent(g_tradehEvent); }
void MainTraderSpi::OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { qDebug() << "<<<---" << "OnRspOrderAction:" << QThread::currentThreadId() <<endl; if (bIsLast && !IsErrorRspInfo(pRspInfo)) { //emit rspOrderAciton(); } }
void CtpTraderSpi::OnRspQrySettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo) && pSettlementInfoConfirm) { // } if(bIsLast) SetEvent(g_hEvent); }
void CtpTraderSpi::OnRspQryInvestorPositionCombineDetail(CThostFtdcInvestorPositionCombineDetailField *pInvestorPositionDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if( !IsErrorRspInfo(pRspInfo) && pInvestorPositionDetail) { } if(bIsLast) SetEvent(g_hEvent); }
void CTraderApi::OnRspQryTrade(CUstpFtdcTradeField *pTrade, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast)) { OnTrade(pTrade); } if (bIsLast) ReleaseRequestMapBuf(nRequestID); }
void CTraderApi::OnRspQryOrder(CUstpFtdcOrderField *pOrder, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (!IsErrorRspInfo(pRspInfo, nRequestID, bIsLast)) { OnOrder(pOrder); } if (bIsLast) ReleaseRequestMapBuf(nRequestID); }