char FRONT_ADDR[] = "tcp://sim-front1.ctp.shcifco.com:31205";
TThostFtdcBrokerIDType BROKER_ID = "1002";
TThostFtdcInvestorIDType INVESTOR_ID = "00000050";
TThostFtdcPasswordType PASSWORD_ID = "123456";
int numOfContracts =0;
TraderSpi::TraderSpi()
{
traderApi = CThostFtdcTraderApi::CreateFtdcTraderApi();
traderApi->RegisterSpi(this);
traderApi->SubscribePublicTopic(THOST_TERT_RESTART);
traderApi->SubscribePrivateTopic(THOST_TERT_RESTART);
traderApi->RegisterFront(FRONT_ADDR);
traderApi->Init();
traderApi->Join();
}
void TraderSpi::OnFrontConnected()
{
CThostFtdcReqUserLoginField req;
memset(&req,0,sizeof(req));
strcpy(req.BrokerID,BROKER_ID);
strcpy(req.UserID,INVESTOR_ID);
strcpy(req.Password,PASSWORD_ID);
traderApi->ReqUserLogin(&req,0);
}
void TraderSpi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
if(bIsLast)
{
CThostFtdcSettlementInfoConfirmField req;
memset(&req,0,sizeof(req));
strcpy(req.BrokerID,BROKER_ID);
strcpy(req.InvestorID,INVESTOR_ID);
traderApi->ReqSettlementInfoConfirm(&req,0);
}
}
void TraderSpi::OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
if(bIsLast)
{
CThostFtdcQryInstrumentField req;
memset(&req,0,sizeof(req));
traderApi->ReqQryInstrument(&req,0);
}
}
void TraderSpi::OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
numOfContracts++;
QFile file("d:/ooo.csv");
if(file.open(QFile::Append))
{
if (numOfContracts==1)
{
QByteArray title;
title += "合约代码,";
title += "交易所代码,";
title += "合约名称,";
title += "合约在交易所的代码,";
title += "产品代码,";
title += "产品类型,";
title += "交割年份,";
title += "交割月,";
title += "市价单最大下单量,";
title += "市价单最小下单量,";
title += "限价单最大下单量,";
title += "限价单最小下单量,";
title += "合约数量乘数,";
title += "最小变动价位,";
title += "创建日,";
title += "上市日,";
title += "到期日,";
title += "开始交割日,";
title += "结束交割日,";
title += "合约生命周期状态,";
title += "当前是否交易,";
title += "持仓类型,";
title += "持仓日期类型,";
title += "多头保证金率,";
title += "空头保证金率";
qDebug() << QString::fromLocal8Bit(title);
title += "\n";
file.write(title);
}
QByteArray content;
content += pInstrument->InstrumentID;
content +=",";
content += pInstrument->ExchangeID;
content +=",";
content += pInstrument->InstrumentName;
content += ",";
content += pInstrument->ExchangeInstID;
content += ",";
content += pInstrument->ProductID;
content += ",";
content += pInstrument->ProductClass;
content += ",";
content += QByteArray::number(pInstrument->DeliveryYear);
content += ",";
content += QByteArray::number(pInstrument->DeliveryMonth);
content += ",";
content += QByteArray::number(pInstrument->MaxMarketOrderVolume);
content += ",";
content += QByteArray::number(pInstrument->MinMarketOrderVolume);
content += ",";
content += QByteArray::number(pInstrument->MaxLimitOrderVolume);
content += ",";
content += QByteArray::number(pInstrument->MinLimitOrderVolume);
content += ",";
content += QByteArray::number(pInstrument->VolumeMultiple);
content += ",";
content += QByteArray::number(pInstrument->PriceTick);
content += ",";
content += pInstrument->CreateDate;
content += ",";
content += pInstrument->OpenDate;
content += ",";
content += pInstrument->ExpireDate;
content += ",";
content += pInstrument->StartDelivDate;
content += ",";
content += pInstrument->EndDelivDate;
content += ",";
content += pInstrument->InstLifePhase;
content += ",";
content += QByteArray::number(pInstrument->IsTrading);
content += ",";
content += pInstrument->PositionType;
content += ",";
content += pInstrument->PositionDateType;
content += ",";
content += QByteArray::number(pInstrument->LongMarginRatio);
content += ",";
content += QByteArray::number(pInstrument->ShortMarginRatio);
qDebug() << QString::fromLocal8Bit(content);
content += "\n";
file.write(content);
}
file.close();
}