void CSingleUser::CheckThenQueryTrade(time_t _now) { if (_now > m_QueryTradeTime) { double _queryTime = QUERY_TIME_MAX; m_QueryTradeTime = time(nullptr) + _queryTime; OutputQueryTime(m_QueryTradeTime, _queryTime, "QueryTrade"); ReqQryTrade(); } }
void CctpTrade::OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { OrderField f; memset(&f, 0, sizeof(OrderField)); if (pOrder) { long id = atol(pOrder->OrderLocalID); if (_id_order.find(id) == _id_order.end()) { //f.AvgPrice = pOrder f.Direction = pOrder->Direction == THOST_FTDC_D_Buy ? Buy : Sell; switch (pOrder->CombHedgeFlag[0]) { case THOST_FTDC_HF_Speculation: f.Hedge = Speculation; break; case THOST_FTDC_HF_Arbitrage: f.Hedge = Arbitrage; break; case THOST_FTDC_HF_Hedge: f.Hedge = Hedge; break; } switch (pOrder->Direction) { case THOST_FTDC_D_Buy: f.Direction = Buy; break; default: f.Direction = Sell; break; } switch (pOrder->CombOffsetFlag[0]) { case THOST_FTDC_OF_Open: f.Offset = Open; break; case THOST_FTDC_OF_CloseToday: f.Offset = CloseToday; break; case THOST_FTDC_OF_Close: f.Offset = Close; break; } strcpy_s(f.InsertTime, sizeof(f.InsertTime), pOrder->InsertTime); strcpy_s(f.InstrumentID, sizeof(f.InstrumentID), pOrder->InstrumentID); //strcpy_s(f.TradeTime, sizeof(f.TradeTime), pOrder->UpdateTime); f.IsLocal = pOrder->SessionID == _session; f.LimitPrice = pOrder->LimitPrice; //即时返回委托编号,由上层处理 //if (strlen(pOrder->OrderRef) == 9) //以hhmmssfff格式的标识 // f.OrderID = atoi(pOrder->OrderRef); //else f.OrderID = atoi(pOrder->OrderLocalID); switch (pOrder->OrderStatus) { case THOST_FTDC_OST_Canceled: f.Status = Canceled; break; case THOST_FTDC_OST_AllTraded: f.Status = Filled; break; case THOST_FTDC_OST_PartTradedQueueing: f.Status = Partial; break; default: f.Status = Normal; break; } f.Volume = pOrder->VolumeTotalOriginal; f.VolumeLeft = f.Volume; //需要计算均价用//2014.9.9注销 int len = string(pOrder->OrderRef).length(); //2014.9.22增加custom if (len > 6) { for (int i = 0; i < 6; ++i) { f.Custom[i] = pOrder->OrderRef[len - 6 + i]; } } _id_order[f.OrderID] = f; } else f = _id_order[id]; } /*if (_OnRspQryOrder) { ((DefOnRspQryOrder)_OnRspQryOrder)(&f, bIsLast); }*/ if (bIsLast && !_started) { Sleep(1100); if (_session == 0) return; ReqQryTrade(); } }