Exemple #1
0
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();
	}
}
Exemple #2
0
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();
	}
}