CTP二代行情api _6.3.15_demo VS2015版本2019.11.15更新,main.cpp

traderSpi.h

#include "stdafx.h"
#include "traderSpi.h"
#include <stdio.h>
void CTraderSpi::OnFrontConnected()
{
	printf("<OnFrontConnected>\n");
	printf("</OnFrontConnected>\n");
};

void CTraderSpi::OnFrontDisconnected(int nReason)
{
	printf("<OnFrontDisconnected>\n");
	printf("\tnReason [%d]\n", nReason);
	printf("</OnFrontDisconnected>\n");
}

void CTraderSpi::OnHeartBeatWarning(int nTimeLapse)
{
	printf("<OnHeartBeatWarning>\n");
	printf("\tnTimeLapse [%d]\n", nTimeLapse);
	printf("</OnHeartBeatWarning>\n");
}

void CTraderSpi::OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspAuthenticate>\n");
	if (pRspAuthenticateField)
	{
		printf("\tBrokerID [%s]\n", pRspAuthenticateField->BrokerID);
		printf("\tUserID [%s]\n", pRspAuthenticateField->UserID);
		printf("\tUserProductInfo [%s]\n", pRspAuthenticateField->UserProductInfo);
		printf("\tAppID [%s]\n", pRspAuthenticateField->AppID);
		printf("\tAppType [%c]\n", pRspAuthenticateField->AppType);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspAuthenticate>\n");
};

void CTraderSpi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspUserLogin>\n");
	if (pRspUserLogin)
	{
		printf("\tTradingDay [%s]\n", pRspUserLogin->TradingDay);
		printf("\tLoginTime [%s]\n", pRspUserLogin->LoginTime);
		printf("\tBrokerID [%s]\n", pRspUserLogin->BrokerID);
		printf("\tUserID [%s]\n", pRspUserLogin->UserID);
		printf("\tSystemName [%s]\n", pRspUserLogin->SystemName);
		printf("\tMaxOrderRef [%s]\n", pRspUserLogin->MaxOrderRef);
		printf("\tSHFETime [%s]\n", pRspUserLogin->SHFETime);
		printf("\tDCETime [%s]\n", pRspUserLogin->DCETime);
		printf("\tCZCETime [%s]\n", pRspUserLogin->CZCETime);
		printf("\tFFEXTime [%s]\n", pRspUserLogin->FFEXTime);
		printf("\tINETime [%s]\n", pRspUserLogin->INETime);
		printf("\tFrontID [%d]\n", pRspUserLogin->FrontID);
		printf("\tSessionID [%d]\n", pRspUserLogin->SessionID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspUserLogin>\n");
};

void CTraderSpi::OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspUserLogout>\n");
	if (pUserLogout)
	{
		printf("\tBrokerID [%s]\n", pUserLogout->BrokerID);
		printf("\tUserID [%s]\n", pUserLogout->UserID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspUserLogout>\n");
};

void CTraderSpi::OnRspUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspUserPasswordUpdate>\n");
	if (pUserPasswordUpdate)
	{
		printf("\tBrokerID [%s]\n", pUserPasswordUpdate->BrokerID);
		printf("\tUserID [%s]\n", pUserPasswordUpdate->UserID);
		printf("\tOldPassword [%s]\n", pUserPasswordUpdate->OldPassword);
		printf("\tNewPassword [%s]\n", pUserPasswordUpdate->NewPassword);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspUserPasswordUpdate>\n");
};

void CTraderSpi::OnRspTradingAccountPasswordUpdate(CThostFtdcTradingAccountPasswordUpdateField *pTradingAccountPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspTradingAccountPasswordUpdate>\n");
	if (pTradingAccountPasswordUpdate)
	{
		printf("\tBrokerID [%s]\n", pTradingAccountPasswordUpdate->BrokerID);
		printf("\tAccountID [%s]\n", pTradingAccountPasswordUpdate->AccountID);
		printf("\tOldPassword [%s]\n", pTradingAccountPasswordUpdate->OldPassword);
		printf("\tNewPassword [%s]\n", pTradingAccountPasswordUpdate->NewPassword);
		printf("\tCurrencyID [%s]\n", pTradingAccountPasswordUpdate->CurrencyID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspTradingAccountPasswordUpdate>\n");
};

void CTraderSpi::OnRspUserAuthMethod(CThostFtdcRspUserAuthMethodField *pRspUserAuthMethod, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspUserAuthMethod>\n");
	if (pRspUserAuthMethod)
	{
		printf("\tUsableAuthMethod [%d]\n", pRspUserAuthMethod->UsableAuthMethod);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspUserAuthMethod>\n");
};

void CTraderSpi::OnRspGenUserCaptcha(CThostFtdcRspGenUserCaptchaField *pRspGenUserCaptcha, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspGenUserCaptcha>\n");
	if (pRspGenUserCaptcha)
	{
		printf("\tBrokerID [%s]\n", pRspGenUserCaptcha->BrokerID);
		printf("\tUserID [%s]\n", pRspGenUserCaptcha->UserID);
		printf("\tCaptchaInfo [%s]\n", pRspGenUserCaptcha->CaptchaInfo);
		printf("\tCaptchaInfoLen [%d]\n", pRspGenUserCaptcha->CaptchaInfoLen);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspGenUserCaptcha>\n");
};

void CTraderSpi::OnRspGenUserText(CThostFtdcRspGenUserTextField *pRspGenUserText, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspGenUserText>\n");
	if (pRspGenUserText)
	{
		printf("\tUserTextSeq [%d]\n", pRspGenUserText->UserTextSeq);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspGenUserText>\n");
};

void CTraderSpi::OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspOrderInsert>\n");
	if (pInputOrder)
	{
		printf("\tBrokerID [%s]\n", pInputOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pInputOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputOrder->InstrumentID);
		printf("\tOrderRef [%s]\n", pInputOrder->OrderRef);
		printf("\tUserID [%s]\n", pInputOrder->UserID);
		printf("\tCombOffsetFlag [%s]\n", pInputOrder->CombOffsetFlag);
		printf("\tCombHedgeFlag [%s]\n", pInputOrder->CombHedgeFlag);
		printf("\tGTDDate [%s]\n", pInputOrder->GTDDate);
		printf("\tBusinessUnit [%s]\n", pInputOrder->BusinessUnit);
		printf("\tExchangeID [%s]\n", pInputOrder->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pInputOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pInputOrder->CurrencyID);
		printf("\tClientID [%s]\n", pInputOrder->ClientID);
		printf("\tIPAddress [%s]\n", pInputOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pInputOrder->MacAddress);
		printf("\tVolumeTotalOriginal [%d]\n", pInputOrder->VolumeTotalOriginal);
		printf("\tMinVolume [%d]\n", pInputOrder->MinVolume);
		printf("\tIsAutoSuspend [%d]\n", pInputOrder->IsAutoSuspend);
		printf("\tRequestID [%d]\n", pInputOrder->RequestID);
		printf("\tUserForceClose [%d]\n", pInputOrder->UserForceClose);
		printf("\tIsSwapOrder [%d]\n", pInputOrder->IsSwapOrder);
		printf("\tOrderPriceType [%c]\n", pInputOrder->OrderPriceType);
		printf("\tDirection [%c]\n", pInputOrder->Direction);
		printf("\tTimeCondition [%c]\n", pInputOrder->TimeCondition);
		printf("\tVolumeCondition [%c]\n", pInputOrder->VolumeCondition);
		printf("\tContingentCondition [%c]\n", pInputOrder->ContingentCondition);
		printf("\tForceCloseReason [%c]\n", pInputOrder->ForceCloseReason);
		printf("\tLimitPrice [%.8lf]\n", pInputOrder->LimitPrice);
		printf("\tStopPrice [%.8lf]\n", pInputOrder->StopPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspOrderInsert>\n");
};

void CTraderSpi::OnRspParkedOrderInsert(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspParkedOrderInsert>\n");
	if (pParkedOrder)
	{
		printf("\tBrokerID [%s]\n", pParkedOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pParkedOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pParkedOrder->InstrumentID);
		printf("\tOrderRef [%s]\n", pParkedOrder->OrderRef);
		printf("\tUserID [%s]\n", pParkedOrder->UserID);
		printf("\tCombOffsetFlag [%s]\n", pParkedOrder->CombOffsetFlag);
		printf("\tCombHedgeFlag [%s]\n", pParkedOrder->CombHedgeFlag);
		printf("\tGTDDate [%s]\n", pParkedOrder->GTDDate);
		printf("\tBusinessUnit [%s]\n", pParkedOrder->BusinessUnit);
		printf("\tExchangeID [%s]\n", pParkedOrder->ExchangeID);
		printf("\tParkedOrderID [%s]\n", pParkedOrder->ParkedOrderID);
		printf("\tErrorMsg [%s]\n", pParkedOrder->ErrorMsg);
		printf("\tAccountID [%s]\n", pParkedOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pParkedOrder->CurrencyID);
		printf("\tClientID [%s]\n", pParkedOrder->ClientID);
		printf("\tInvestUnitID [%s]\n", pParkedOrder->InvestUnitID);
		printf("\tIPAddress [%s]\n", pParkedOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pParkedOrder->MacAddress);
		printf("\tVolumeTotalOriginal [%d]\n", pParkedOrder->VolumeTotalOriginal);
		printf("\tMinVolume [%d]\n", pParkedOrder->MinVolume);
		printf("\tIsAutoSuspend [%d]\n", pParkedOrder->IsAutoSuspend);
		printf("\tRequestID [%d]\n", pParkedOrder->RequestID);
		printf("\tUserForceClose [%d]\n", pParkedOrder->UserForceClose);
		printf("\tErrorID [%d]\n", pParkedOrder->ErrorID);
		printf("\tIsSwapOrder [%d]\n", pParkedOrder->IsSwapOrder);
		printf("\tOrderPriceType [%c]\n", pParkedOrder->OrderPriceType);
		printf("\tDirection [%c]\n", pParkedOrder->Direction);
		printf("\tTimeCondition [%c]\n", pParkedOrder->TimeCondition);
		printf("\tVolumeCondition [%c]\n", pParkedOrder->VolumeCondition);
		printf("\tContingentCondition [%c]\n", pParkedOrder->ContingentCondition);
		printf("\tForceCloseReason [%c]\n", pParkedOrder->ForceCloseReason);
		printf("\tUserType [%c]\n", pParkedOrder->UserType);
		printf("\tStatus [%c]\n", pParkedOrder->Status);
		printf("\tLimitPrice [%.8lf]\n", pParkedOrder->LimitPrice);
		printf("\tStopPrice [%.8lf]\n", pParkedOrder->StopPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspParkedOrderInsert>\n");
};

void CTraderSpi::OnRspParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspParkedOrderAction>\n");
	if (pParkedOrderAction)
	{
		printf("\tBrokerID [%s]\n", pParkedOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pParkedOrderAction->InvestorID);
		printf("\tOrderRef [%s]\n", pParkedOrderAction->OrderRef);
		printf("\tExchangeID [%s]\n", pParkedOrderAction->ExchangeID);
		printf("\tOrderSysID [%s]\n", pParkedOrderAction->OrderSysID);
		printf("\tUserID [%s]\n", pParkedOrderAction->UserID);
		printf("\tInstrumentID [%s]\n", pParkedOrderAction->InstrumentID);
		printf("\tParkedOrderActionID [%s]\n", pParkedOrderAction->ParkedOrderActionID);
		printf("\tErrorMsg [%s]\n", pParkedOrderAction->ErrorMsg);
		printf("\tInvestUnitID [%s]\n", pParkedOrderAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pParkedOrderAction->IPAddress);
		printf("\tMacAddress [%s]\n", pParkedOrderAction->MacAddress);
		printf("\tOrderActionRef [%d]\n", pParkedOrderAction->OrderActionRef);
		printf("\tRequestID [%d]\n", pParkedOrderAction->RequestID);
		printf("\tFrontID [%d]\n", pParkedOrderAction->FrontID);
		printf("\tSessionID [%d]\n", pParkedOrderAction->SessionID);
		printf("\tVolumeChange [%d]\n", pParkedOrderAction->VolumeChange);
		printf("\tErrorID [%d]\n", pParkedOrderAction->ErrorID);
		printf("\tActionFlag [%c]\n", pParkedOrderAction->ActionFlag);
		printf("\tUserType [%c]\n", pParkedOrderAction->UserType);
		printf("\tStatus [%c]\n", pParkedOrderAction->Status);
		printf("\tLimitPrice [%.8lf]\n", pParkedOrderAction->LimitPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspParkedOrderAction>\n");
};

void CTraderSpi::OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspOrderAction>\n");
	if (pInputOrderAction)
	{
		printf("\tBrokerID [%s]\n", pInputOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pInputOrderAction->InvestorID);
		printf("\tOrderRef [%s]\n", pInputOrderAction->OrderRef);
		printf("\tExchangeID [%s]\n", pInputOrderAction->ExchangeID);
		printf("\tOrderSysID [%s]\n", pInputOrderAction->OrderSysID);
		printf("\tUserID [%s]\n", pInputOrderAction->UserID);
		printf("\tInstrumentID [%s]\n", pInputOrderAction->InstrumentID);
		printf("\tInvestUnitID [%s]\n", pInputOrderAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pInputOrderAction->IPAddress);
		printf("\tMacAddress [%s]\n", pInputOrderAction->MacAddress);
		printf("\tOrderActionRef [%d]\n", pInputOrderAction->OrderActionRef);
		printf("\tRequestID [%d]\n", pInputOrderAction->RequestID);
		printf("\tFrontID [%d]\n", pInputOrderAction->FrontID);
		printf("\tSessionID [%d]\n", pInputOrderAction->SessionID);
		printf("\tVolumeChange [%d]\n", pInputOrderAction->VolumeChange);
		printf("\tActionFlag [%c]\n", pInputOrderAction->ActionFlag);
		printf("\tLimitPrice [%.8lf]\n", pInputOrderAction->LimitPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspOrderAction>\n");
};

void CTraderSpi::OnRspQueryMaxOrderVolume(CThostFtdcQueryMaxOrderVolumeField *pQueryMaxOrderVolume, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQueryMaxOrderVolume>\n");
	if (pQueryMaxOrderVolume)
	{
		printf("\tBrokerID [%s]\n", pQueryMaxOrderVolume->BrokerID);
		printf("\tInvestorID [%s]\n", pQueryMaxOrderVolume->InvestorID);
		printf("\tInstrumentID [%s]\n", pQueryMaxOrderVolume->InstrumentID);
		printf("\tExchangeID [%s]\n", pQueryMaxOrderVolume->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pQueryMaxOrderVolume->InvestUnitID);
		printf("\tMaxVolume [%d]\n", pQueryMaxOrderVolume->MaxVolume);
		printf("\tDirection [%c]\n", pQueryMaxOrderVolume->Direction);
		printf("\tOffsetFlag [%c]\n", pQueryMaxOrderVolume->OffsetFlag);
		printf("\tHedgeFlag [%c]\n", pQueryMaxOrderVolume->HedgeFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQueryMaxOrderVolume>\n");
};

void CTraderSpi::OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspSettlementInfoConfirm>\n");
	if (pSettlementInfoConfirm)
	{
		printf("\tBrokerID [%s]\n", pSettlementInfoConfirm->BrokerID);
		printf("\tInvestorID [%s]\n", pSettlementInfoConfirm->InvestorID);
		printf("\tConfirmDate [%s]\n", pSettlementInfoConfirm->ConfirmDate);
		printf("\tConfirmTime [%s]\n", pSettlementInfoConfirm->ConfirmTime);
		printf("\tAccountID [%s]\n", pSettlementInfoConfirm->AccountID);
		printf("\tCurrencyID [%s]\n", pSettlementInfoConfirm->CurrencyID);
		printf("\tSettlementID [%d]\n", pSettlementInfoConfirm->SettlementID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspSettlementInfoConfirm>\n");
};

void CTraderSpi::OnRspRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspRemoveParkedOrder>\n");
	if (pRemoveParkedOrder)
	{
		printf("\tBrokerID [%s]\n", pRemoveParkedOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pRemoveParkedOrder->InvestorID);
		printf("\tParkedOrderID [%s]\n", pRemoveParkedOrder->ParkedOrderID);
		printf("\tInvestUnitID [%s]\n", pRemoveParkedOrder->InvestUnitID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspRemoveParkedOrder>\n");
};

void CTraderSpi::OnRspRemoveParkedOrderAction(CThostFtdcRemoveParkedOrderActionField *pRemoveParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspRemoveParkedOrderAction>\n");
	if (pRemoveParkedOrderAction)
	{
		printf("\tBrokerID [%s]\n", pRemoveParkedOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pRemoveParkedOrderAction->InvestorID);
		printf("\tParkedOrderActionID [%s]\n", pRemoveParkedOrderAction->ParkedOrderActionID);
		printf("\tInvestUnitID [%s]\n", pRemoveParkedOrderAction->InvestUnitID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspRemoveParkedOrderAction>\n");
};

void CTraderSpi::OnRspExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspExecOrderInsert>\n");
	if (pInputExecOrder)
	{
		printf("\tBrokerID [%s]\n", pInputExecOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pInputExecOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputExecOrder->InstrumentID);
		printf("\tExecOrderRef [%s]\n", pInputExecOrder->ExecOrderRef);
		printf("\tUserID [%s]\n", pInputExecOrder->UserID);
		printf("\tBusinessUnit [%s]\n", pInputExecOrder->BusinessUnit);
		printf("\tExchangeID [%s]\n", pInputExecOrder->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputExecOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pInputExecOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pInputExecOrder->CurrencyID);
		printf("\tClientID [%s]\n", pInputExecOrder->ClientID);
		printf("\tIPAddress [%s]\n", pInputExecOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pInputExecOrder->MacAddress);
		printf("\tVolume [%d]\n", pInputExecOrder->Volume);
		printf("\tRequestID [%d]\n", pInputExecOrder->RequestID);
		printf("\tOffsetFlag [%c]\n", pInputExecOrder->OffsetFlag);
		printf("\tHedgeFlag [%c]\n", pInputExecOrder->HedgeFlag);
		printf("\tActionType [%c]\n", pInputExecOrder->ActionType);
		printf("\tPosiDirection [%c]\n", pInputExecOrder->PosiDirection);
		printf("\tReservePositionFlag [%c]\n", pInputExecOrder->ReservePositionFlag);
		printf("\tCloseFlag [%c]\n", pInputExecOrder->CloseFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspExecOrderInsert>\n");
};

void CTraderSpi::OnRspExecOrderAction(CThostFtdcInputExecOrderActionField *pInputExecOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspExecOrderAction>\n");
	if (pInputExecOrderAction)
	{
		printf("\tBrokerID [%s]\n", pInputExecOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pInputExecOrderAction->InvestorID);
		printf("\tExecOrderRef [%s]\n", pInputExecOrderAction->ExecOrderRef);
		printf("\tExchangeID [%s]\n", pInputExecOrderAction->ExchangeID);
		printf("\tExecOrderSysID [%s]\n", pInputExecOrderAction->ExecOrderSysID);
		printf("\tUserID [%s]\n", pInputExecOrderAction->UserID);
		printf("\tInstrumentID [%s]\n", pInputExecOrderAction->InstrumentID);
		printf("\tInvestUnitID [%s]\n", pInputExecOrderAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pInputExecOrderAction->IPAddress);
		printf("\tMacAddress [%s]\n", pInputExecOrderAction->MacAddress);
		printf("\tExecOrderActionRef [%d]\n", pInputExecOrderAction->ExecOrderActionRef);
		printf("\tRequestID [%d]\n", pInputExecOrderAction->RequestID);
		printf("\tFrontID [%d]\n", pInputExecOrderAction->FrontID);
		printf("\tSessionID [%d]\n", pInputExecOrderAction->SessionID);
		printf("\tActionFlag [%c]\n", pInputExecOrderAction->ActionFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspExecOrderAction>\n");
};

void CTraderSpi::OnRspForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspForQuoteInsert>\n");
	if (pInputForQuote)
	{
		printf("\tBrokerID [%s]\n", pInputForQuote->BrokerID);
		printf("\tInvestorID [%s]\n", pInputForQuote->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputForQuote->InstrumentID);
		printf("\tForQuoteRef [%s]\n", pInputForQuote->ForQuoteRef);
		printf("\tUserID [%s]\n", pInputForQuote->UserID);
		printf("\tExchangeID [%s]\n", pInputForQuote->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputForQuote->InvestUnitID);
		printf("\tIPAddress [%s]\n", pInputForQuote->IPAddress);
		printf("\tMacAddress [%s]\n", pInputForQuote->MacAddress);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspForQuoteInsert>\n");
};

void CTraderSpi::OnRspQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQuoteInsert>\n");
	if (pInputQuote)
	{
		printf("\tBrokerID [%s]\n", pInputQuote->BrokerID);
		printf("\tInvestorID [%s]\n", pInputQuote->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputQuote->InstrumentID);
		printf("\tQuoteRef [%s]\n", pInputQuote->QuoteRef);
		printf("\tUserID [%s]\n", pInputQuote->UserID);
		printf("\tBusinessUnit [%s]\n", pInputQuote->BusinessUnit);
		printf("\tAskOrderRef [%s]\n", pInputQuote->AskOrderRef);
		printf("\tBidOrderRef [%s]\n", pInputQuote->BidOrderRef);
		printf("\tForQuoteSysID [%s]\n", pInputQuote->ForQuoteSysID);
		printf("\tExchangeID [%s]\n", pInputQuote->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputQuote->InvestUnitID);
		printf("\tClientID [%s]\n", pInputQuote->ClientID);
		printf("\tIPAddress [%s]\n", pInputQuote->IPAddress);
		printf("\tMacAddress [%s]\n", pInputQuote->MacAddress);
		printf("\tAskVolume [%d]\n", pInputQuote->AskVolume);
		printf("\tBidVolume [%d]\n", pInputQuote->BidVolume);
		printf("\tRequestID [%d]\n", pInputQuote->RequestID);
		printf("\tAskOffsetFlag [%c]\n", pInputQuote->AskOffsetFlag);
		printf("\tBidOffsetFlag [%c]\n", pInputQuote->BidOffsetFlag);
		printf("\tAskHedgeFlag [%c]\n", pInputQuote->AskHedgeFlag);
		printf("\tBidHedgeFlag [%c]\n", pInputQuote->BidHedgeFlag);
		printf("\tAskPrice [%.8lf]\n", pInputQuote->AskPrice);
		printf("\tBidPrice [%.8lf]\n", pInputQuote->BidPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQuoteInsert>\n");
};

void CTraderSpi::OnRspQuoteAction(CThostFtdcInputQuoteActionField *pInputQuoteAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQuoteAction>\n");
	if (pInputQuoteAction)
	{
		printf("\tBrokerID [%s]\n", pInputQuoteAction->BrokerID);
		printf("\tInvestorID [%s]\n", pInputQuoteAction->InvestorID);
		printf("\tQuoteRef [%s]\n", pInputQuoteAction->QuoteRef);
		printf("\tExchangeID [%s]\n", pInputQuoteAction->ExchangeID);
		printf("\tQuoteSysID [%s]\n", pInputQuoteAction->QuoteSysID);
		printf("\tUserID [%s]\n", pInputQuoteAction->UserID);
		printf("\tInstrumentID [%s]\n", pInputQuoteAction->InstrumentID);
		printf("\tInvestUnitID [%s]\n", pInputQuoteAction->InvestUnitID);
		printf("\tClientID [%s]\n", pInputQuoteAction->ClientID);
		printf("\tIPAddress [%s]\n", pInputQuoteAction->IPAddress);
		printf("\tMacAddress [%s]\n", pInputQuoteAction->MacAddress);
		printf("\tQuoteActionRef [%d]\n", pInputQuoteAction->QuoteActionRef);
		printf("\tRequestID [%d]\n", pInputQuoteAction->RequestID);
		printf("\tFrontID [%d]\n", pInputQuoteAction->FrontID);
		printf("\tSessionID [%d]\n", pInputQuoteAction->SessionID);
		printf("\tActionFlag [%c]\n", pInputQuoteAction->ActionFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQuoteAction>\n");
};

void CTraderSpi::OnRspBatchOrderAction(CThostFtdcInputBatchOrderActionField *pInputBatchOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspBatchOrderAction>\n");
	if (pInputBatchOrderAction)
	{
		printf("\tBrokerID [%s]\n", pInputBatchOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pInputBatchOrderAction->InvestorID);
		printf("\tExchangeID [%s]\n", pInputBatchOrderAction->ExchangeID);
		printf("\tUserID [%s]\n", pInputBatchOrderAction->UserID);
		printf("\tInvestUnitID [%s]\n", pInputBatchOrderAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pInputBatchOrderAction->IPAddress);
		printf("\tMacAddress [%s]\n", pInputBatchOrderAction->MacAddress);
		printf("\tOrderActionRef [%d]\n", pInputBatchOrderAction->OrderActionRef);
		printf("\tRequestID [%d]\n", pInputBatchOrderAction->RequestID);
		printf("\tFrontID [%d]\n", pInputBatchOrderAction->FrontID);
		printf("\tSessionID [%d]\n", pInputBatchOrderAction->SessionID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspBatchOrderAction>\n");
};

void CTraderSpi::OnRspOptionSelfCloseInsert(CThostFtdcInputOptionSelfCloseField *pInputOptionSelfClose, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspOptionSelfCloseInsert>\n");
	if (pInputOptionSelfClose)
	{
		printf("\tBrokerID [%s]\n", pInputOptionSelfClose->BrokerID);
		printf("\tInvestorID [%s]\n", pInputOptionSelfClose->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputOptionSelfClose->InstrumentID);
		printf("\tOptionSelfCloseRef [%s]\n", pInputOptionSelfClose->OptionSelfCloseRef);
		printf("\tUserID [%s]\n", pInputOptionSelfClose->UserID);
		printf("\tBusinessUnit [%s]\n", pInputOptionSelfClose->BusinessUnit);
		printf("\tExchangeID [%s]\n", pInputOptionSelfClose->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputOptionSelfClose->InvestUnitID);
		printf("\tAccountID [%s]\n", pInputOptionSelfClose->AccountID);
		printf("\tCurrencyID [%s]\n", pInputOptionSelfClose->CurrencyID);
		printf("\tClientID [%s]\n", pInputOptionSelfClose->ClientID);
		printf("\tIPAddress [%s]\n", pInputOptionSelfClose->IPAddress);
		printf("\tMacAddress [%s]\n", pInputOptionSelfClose->MacAddress);
		printf("\tVolume [%d]\n", pInputOptionSelfClose->Volume);
		printf("\tRequestID [%d]\n", pInputOptionSelfClose->RequestID);
		printf("\tHedgeFlag [%c]\n", pInputOptionSelfClose->HedgeFlag);
		printf("\tOptSelfCloseFlag [%c]\n", pInputOptionSelfClose->OptSelfCloseFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspOptionSelfCloseInsert>\n");
};

void CTraderSpi::OnRspOptionSelfCloseAction(CThostFtdcInputOptionSelfCloseActionField *pInputOptionSelfCloseAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspOptionSelfCloseAction>\n");
	if (pInputOptionSelfCloseAction)
	{
		printf("\tBrokerID [%s]\n", pInputOptionSelfCloseAction->BrokerID);
		printf("\tInvestorID [%s]\n", pInputOptionSelfCloseAction->InvestorID);
		printf("\tOptionSelfCloseRef [%s]\n", pInputOptionSelfCloseAction->OptionSelfCloseRef);
		printf("\tExchangeID [%s]\n", pInputOptionSelfCloseAction->ExchangeID);
		printf("\tOptionSelfCloseSysID [%s]\n", pInputOptionSelfCloseAction->OptionSelfCloseSysID);
		printf("\tUserID [%s]\n", pInputOptionSelfCloseAction->UserID);
		printf("\tInstrumentID [%s]\n", pInputOptionSelfCloseAction->InstrumentID);
		printf("\tInvestUnitID [%s]\n", pInputOptionSelfCloseAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pInputOptionSelfCloseAction->IPAddress);
		printf("\tMacAddress [%s]\n", pInputOptionSelfCloseAction->MacAddress);
		printf("\tOptionSelfCloseActionRef [%d]\n", pInputOptionSelfCloseAction->OptionSelfCloseActionRef);
		printf("\tRequestID [%d]\n", pInputOptionSelfCloseAction->RequestID);
		printf("\tFrontID [%d]\n", pInputOptionSelfCloseAction->FrontID);
		printf("\tSessionID [%d]\n", pInputOptionSelfCloseAction->SessionID);
		printf("\tActionFlag [%c]\n", pInputOptionSelfCloseAction->ActionFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspOptionSelfCloseAction>\n");
};

void CTraderSpi::OnRspCombActionInsert(CThostFtdcInputCombActionField *pInputCombAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspCombActionInsert>\n");
	if (pInputCombAction)
	{
		printf("\tBrokerID [%s]\n", pInputCombAction->BrokerID);
		printf("\tInvestorID [%s]\n", pInputCombAction->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputCombAction->InstrumentID);
		printf("\tCombActionRef [%s]\n", pInputCombAction->CombActionRef);
		printf("\tUserID [%s]\n", pInputCombAction->UserID);
		printf("\tExchangeID [%s]\n", pInputCombAction->ExchangeID);
		printf("\tIPAddress [%s]\n", pInputCombAction->IPAddress);
		printf("\tMacAddress [%s]\n", pInputCombAction->MacAddress);
		printf("\tInvestUnitID [%s]\n", pInputCombAction->InvestUnitID);
		printf("\tVolume [%d]\n", pInputCombAction->Volume);
		printf("\tDirection [%c]\n", pInputCombAction->Direction);
		printf("\tCombDirection [%c]\n", pInputCombAction->CombDirection);
		printf("\tHedgeFlag [%c]\n", pInputCombAction->HedgeFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspCombActionInsert>\n");
};

void CTraderSpi::OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryOrder>\n");
	if (pOrder)
	{
		printf("\tBrokerID [%s]\n", pOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pOrder->InstrumentID);
		printf("\tOrderRef [%s]\n", pOrder->OrderRef);
		printf("\tUserID [%s]\n", pOrder->UserID);
		printf("\tCombOffsetFlag [%s]\n", pOrder->CombOffsetFlag);
		printf("\tCombHedgeFlag [%s]\n", pOrder->CombHedgeFlag);
		printf("\tGTDDate [%s]\n", pOrder->GTDDate);
		printf("\tBusinessUnit [%s]\n", pOrder->BusinessUnit);
		printf("\tOrderLocalID [%s]\n", pOrder->OrderLocalID);
		printf("\tExchangeID [%s]\n", pOrder->ExchangeID);
		printf("\tParticipantID [%s]\n", pOrder->ParticipantID);
		printf("\tClientID [%s]\n", pOrder->ClientID);
		printf("\tExchangeInstID [%s]\n", pOrder->ExchangeInstID);
		printf("\tTraderID [%s]\n", pOrder->TraderID);
		printf("\tTradingDay [%s]\n", pOrder->TradingDay);
		printf("\tOrderSysID [%s]\n", pOrder->OrderSysID);
		printf("\tInsertDate [%s]\n", pOrder->InsertDate);
		printf("\tInsertTime [%s]\n", pOrder->InsertTime);
		printf("\tActiveTime [%s]\n", pOrder->ActiveTime);
		printf("\tSuspendTime [%s]\n", pOrder->SuspendTime);
		printf("\tUpdateTime [%s]\n", pOrder->UpdateTime);
		printf("\tCancelTime [%s]\n", pOrder->CancelTime);
		printf("\tActiveTraderID [%s]\n", pOrder->ActiveTraderID);
		printf("\tClearingPartID [%s]\n", pOrder->ClearingPartID);
		printf("\tUserProductInfo [%s]\n", pOrder->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pOrder->StatusMsg);
		printf("\tActiveUserID [%s]\n", pOrder->ActiveUserID);
		printf("\tRelativeOrderSysID [%s]\n", pOrder->RelativeOrderSysID);
		printf("\tBranchID [%s]\n", pOrder->BranchID);
		printf("\tInvestUnitID [%s]\n", pOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pOrder->CurrencyID);
		printf("\tIPAddress [%s]\n", pOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pOrder->MacAddress);
		printf("\tVolumeTotalOriginal [%d]\n", pOrder->VolumeTotalOriginal);
		printf("\tMinVolume [%d]\n", pOrder->MinVolume);
		printf("\tIsAutoSuspend [%d]\n", pOrder->IsAutoSuspend);
		printf("\tRequestID [%d]\n", pOrder->RequestID);
		printf("\tInstallID [%d]\n", pOrder->InstallID);
		printf("\tNotifySequence [%d]\n", pOrder->NotifySequence);
		printf("\tSettlementID [%d]\n", pOrder->SettlementID);
		printf("\tVolumeTraded [%d]\n", pOrder->VolumeTraded);
		printf("\tVolumeTotal [%d]\n", pOrder->VolumeTotal);
		printf("\tSequenceNo [%d]\n", pOrder->SequenceNo);
		printf("\tFrontID [%d]\n", pOrder->FrontID);
		printf("\tSessionID [%d]\n", pOrder->SessionID);
		printf("\tUserForceClose [%d]\n", pOrder->UserForceClose);
		printf("\tBrokerOrderSeq [%d]\n", pOrder->BrokerOrderSeq);
		printf("\tZCETotalTradedVolume [%d]\n", pOrder->ZCETotalTradedVolume);
		printf("\tIsSwapOrder [%d]\n", pOrder->IsSwapOrder);
		printf("\tOrderPriceType [%c]\n", pOrder->OrderPriceType);
		printf("\tDirection [%c]\n", pOrder->Direction);
		printf("\tTimeCondition [%c]\n", pOrder->TimeCondition);
		printf("\tVolumeCondition [%c]\n", pOrder->VolumeCondition);
		printf("\tContingentCondition [%c]\n", pOrder->ContingentCondition);
		printf("\tForceCloseReason [%c]\n", pOrder->ForceCloseReason);
		printf("\tOrderSubmitStatus [%c]\n", pOrder->OrderSubmitStatus);
		printf("\tOrderSource [%c]\n", pOrder->OrderSource);
		printf("\tOrderStatus [%c]\n", pOrder->OrderStatus);
		printf("\tOrderType [%c]\n", pOrder->OrderType);
		printf("\tLimitPrice [%.8lf]\n", pOrder->LimitPrice);
		printf("\tStopPrice [%.8lf]\n", pOrder->StopPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryOrder>\n");
};

void CTraderSpi::OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryTrade>\n");
	if (pTrade)
	{
		printf("\tBrokerID [%s]\n", pTrade->BrokerID);
		printf("\tInvestorID [%s]\n", pTrade->InvestorID);
		printf("\tInstrumentID [%s]\n", pTrade->InstrumentID);
		printf("\tOrderRef [%s]\n", pTrade->OrderRef);
		printf("\tUserID [%s]\n", pTrade->UserID);
		printf("\tExchangeID [%s]\n", pTrade->ExchangeID);
		printf("\tTradeID [%s]\n", pTrade->TradeID);
		printf("\tOrderSysID [%s]\n", pTrade->OrderSysID);
		printf("\tParticipantID [%s]\n", pTrade->ParticipantID);
		printf("\tClientID [%s]\n", pTrade->ClientID);
		printf("\tExchangeInstID [%s]\n", pTrade->ExchangeInstID);
		printf("\tTradeDate [%s]\n", pTrade->TradeDate);
		printf("\tTradeTime [%s]\n", pTrade->TradeTime);
		printf("\tTraderID [%s]\n", pTrade->TraderID);
		printf("\tOrderLocalID [%s]\n", pTrade->OrderLocalID);
		printf("\tClearingPartID [%s]\n", pTrade->ClearingPartID);
		printf("\tBusinessUnit [%s]\n", pTrade->BusinessUnit);
		printf("\tTradingDay [%s]\n", pTrade->TradingDay);
		printf("\tInvestUnitID [%s]\n", pTrade->InvestUnitID);
		printf("\tVolume [%d]\n", pTrade->Volume);
		printf("\tSequenceNo [%d]\n", pTrade->SequenceNo);
		printf("\tSettlementID [%d]\n", pTrade->SettlementID);
		printf("\tBrokerOrderSeq [%d]\n", pTrade->BrokerOrderSeq);
		printf("\tDirection [%c]\n", pTrade->Direction);
		printf("\tTradingRole [%c]\n", pTrade->TradingRole);
		printf("\tOffsetFlag [%c]\n", pTrade->OffsetFlag);
		printf("\tHedgeFlag [%c]\n", pTrade->HedgeFlag);
		printf("\tTradeType [%c]\n", pTrade->TradeType);
		printf("\tPriceSource [%c]\n", pTrade->PriceSource);
		printf("\tTradeSource [%c]\n", pTrade->TradeSource);
		printf("\tPrice [%.8lf]\n", pTrade->Price);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryTrade>\n");
};

void CTraderSpi::OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInvestorPosition>\n");
	if (pInvestorPosition)
	{
		printf("\tInstrumentID [%s]\n", pInvestorPosition->InstrumentID);
		printf("\tBrokerID [%s]\n", pInvestorPosition->BrokerID);
		printf("\tInvestorID [%s]\n", pInvestorPosition->InvestorID);
		printf("\tTradingDay [%s]\n", pInvestorPosition->TradingDay);
		printf("\tExchangeID [%s]\n", pInvestorPosition->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInvestorPosition->InvestUnitID);
		printf("\tYdPosition [%d]\n", pInvestorPosition->YdPosition);
		printf("\tPosition [%d]\n", pInvestorPosition->Position);
		printf("\tLongFrozen [%d]\n", pInvestorPosition->LongFrozen);
		printf("\tShortFrozen [%d]\n", pInvestorPosition->ShortFrozen);
		printf("\tOpenVolume [%d]\n", pInvestorPosition->OpenVolume);
		printf("\tCloseVolume [%d]\n", pInvestorPosition->CloseVolume);
		printf("\tSettlementID [%d]\n", pInvestorPosition->SettlementID);
		printf("\tCombPosition [%d]\n", pInvestorPosition->CombPosition);
		printf("\tCombLongFrozen [%d]\n", pInvestorPosition->CombLongFrozen);
		printf("\tCombShortFrozen [%d]\n", pInvestorPosition->CombShortFrozen);
		printf("\tTodayPosition [%d]\n", pInvestorPosition->TodayPosition);
		printf("\tStrikeFrozen [%d]\n", pInvestorPosition->StrikeFrozen);
		printf("\tAbandonFrozen [%d]\n", pInvestorPosition->AbandonFrozen);
		printf("\tYdStrikeFrozen [%d]\n", pInvestorPosition->YdStrikeFrozen);
		printf("\tPosiDirection [%c]\n", pInvestorPosition->PosiDirection);
		printf("\tHedgeFlag [%c]\n", pInvestorPosition->HedgeFlag);
		printf("\tPositionDate [%c]\n", pInvestorPosition->PositionDate);
		printf("\tLongFrozenAmount [%.8lf]\n", pInvestorPosition->LongFrozenAmount);
		printf("\tShortFrozenAmount [%.8lf]\n", pInvestorPosition->ShortFrozenAmount);
		printf("\tOpenAmount [%.8lf]\n", pInvestorPosition->OpenAmount);
		printf("\tCloseAmount [%.8lf]\n", pInvestorPosition->CloseAmount);
		printf("\tPositionCost [%.8lf]\n", pInvestorPosition->PositionCost);
		printf("\tPreMargin [%.8lf]\n", pInvestorPosition->PreMargin);
		printf("\tUseMargin [%.8lf]\n", pInvestorPosition->UseMargin);
		printf("\tFrozenMargin [%.8lf]\n", pInvestorPosition->FrozenMargin);
		printf("\tFrozenCash [%.8lf]\n", pInvestorPosition->FrozenCash);
		printf("\tFrozenCommission [%.8lf]\n", pInvestorPosition->FrozenCommission);
		printf("\tCashIn [%.8lf]\n", pInvestorPosition->CashIn);
		printf("\tCommission [%.8lf]\n", pInvestorPosition->Commission);
		printf("\tCloseProfit [%.8lf]\n", pInvestorPosition->CloseProfit);
		printf("\tPositionProfit [%.8lf]\n", pInvestorPosition->PositionProfit);
		printf("\tPreSettlementPrice [%.8lf]\n", pInvestorPosition->PreSettlementPrice);
		printf("\tSettlementPrice [%.8lf]\n", pInvestorPosition->SettlementPrice);
		printf("\tOpenCost [%.8lf]\n", pInvestorPosition->OpenCost);
		printf("\tExchangeMargin [%.8lf]\n", pInvestorPosition->ExchangeMargin);
		printf("\tCloseProfitByDate [%.8lf]\n", pInvestorPosition->CloseProfitByDate);
		printf("\tCloseProfitByTrade [%.8lf]\n", pInvestorPosition->CloseProfitByTrade);
		printf("\tMarginRateByMoney [%.8lf]\n", pInvestorPosition->MarginRateByMoney);
		printf("\tMarginRateByVolume [%.8lf]\n", pInvestorPosition->MarginRateByVolume);
		printf("\tStrikeFrozenAmount [%.8lf]\n", pInvestorPosition->StrikeFrozenAmount);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInvestorPosition>\n");
};

void CTraderSpi::OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryTradingAccount>\n");
	if (pTradingAccount)
	{
		printf("\tBrokerID [%s]\n", pTradingAccount->BrokerID);
		printf("\tAccountID [%s]\n", pTradingAccount->AccountID);
		printf("\tTradingDay [%s]\n", pTradingAccount->TradingDay);
		printf("\tCurrencyID [%s]\n", pTradingAccount->CurrencyID);
		printf("\tSettlementID [%d]\n", pTradingAccount->SettlementID);
		printf("\tBizType [%c]\n", pTradingAccount->BizType);
		printf("\tPreMortgage [%.8lf]\n", pTradingAccount->PreMortgage);
		printf("\tPreCredit [%.8lf]\n", pTradingAccount->PreCredit);
		printf("\tPreDeposit [%.8lf]\n", pTradingAccount->PreDeposit);
		printf("\tPreBalance [%.8lf]\n", pTradingAccount->PreBalance);
		printf("\tPreMargin [%.8lf]\n", pTradingAccount->PreMargin);
		printf("\tInterestBase [%.8lf]\n", pTradingAccount->InterestBase);
		printf("\tInterest [%.8lf]\n", pTradingAccount->Interest);
		printf("\tDeposit [%.8lf]\n", pTradingAccount->Deposit);
		printf("\tWithdraw [%.8lf]\n", pTradingAccount->Withdraw);
		printf("\tFrozenMargin [%.8lf]\n", pTradingAccount->FrozenMargin);
		printf("\tFrozenCash [%.8lf]\n", pTradingAccount->FrozenCash);
		printf("\tFrozenCommission [%.8lf]\n", pTradingAccount->FrozenCommission);
		printf("\tCurrMargin [%.8lf]\n", pTradingAccount->CurrMargin);
		printf("\tCashIn [%.8lf]\n", pTradingAccount->CashIn);
		printf("\tCommission [%.8lf]\n", pTradingAccount->Commission);
		printf("\tCloseProfit [%.8lf]\n", pTradingAccount->CloseProfit);
		printf("\tPositionProfit [%.8lf]\n", pTradingAccount->PositionProfit);
		printf("\tBalance [%.8lf]\n", pTradingAccount->Balance);
		printf("\tAvailable [%.8lf]\n", pTradingAccount->Available);
		printf("\tWithdrawQuota [%.8lf]\n", pTradingAccount->WithdrawQuota);
		printf("\tReserve [%.8lf]\n", pTradingAccount->Reserve);
		printf("\tCredit [%.8lf]\n", pTradingAccount->Credit);
		printf("\tMortgage [%.8lf]\n", pTradingAccount->Mortgage);
		printf("\tExchangeMargin [%.8lf]\n", pTradingAccount->ExchangeMargin);
		printf("\tDeliveryMargin [%.8lf]\n", pTradingAccount->DeliveryMargin);
		printf("\tExchangeDeliveryMargin [%.8lf]\n", pTradingAccount->ExchangeDeliveryMargin);
		printf("\tReserveBalance [%.8lf]\n", pTradingAccount->ReserveBalance);
		printf("\tPreFundMortgageIn [%.8lf]\n", pTradingAccount->PreFundMortgageIn);
		printf("\tPreFundMortgageOut [%.8lf]\n", pTradingAccount->PreFundMortgageOut);
		printf("\tFundMortgageIn [%.8lf]\n", pTradingAccount->FundMortgageIn);
		printf("\tFundMortgageOut [%.8lf]\n", pTradingAccount->FundMortgageOut);
		printf("\tFundMortgageAvailable [%.8lf]\n", pTradingAccount->FundMortgageAvailable);
		printf("\tMortgageableFund [%.8lf]\n", pTradingAccount->MortgageableFund);
		printf("\tSpecProductMargin [%.8lf]\n", pTradingAccount->SpecProductMargin);
		printf("\tSpecProductFrozenMargin [%.8lf]\n", pTradingAccount->SpecProductFrozenMargin);
		printf("\tSpecProductCommission [%.8lf]\n", pTradingAccount->SpecProductCommission);
		printf("\tSpecProductFrozenCommission [%.8lf]\n", pTradingAccount->SpecProductFrozenCommission);
		printf("\tSpecProductPositionProfit [%.8lf]\n", pTradingAccount->SpecProductPositionProfit);
		printf("\tSpecProductCloseProfit [%.8lf]\n", pTradingAccount->SpecProductCloseProfit);
		printf("\tSpecProductPositionProfitByAlg [%.8lf]\n", pTradingAccount->SpecProductPositionProfitByAlg);
		printf("\tSpecProductExchangeMargin [%.8lf]\n", pTradingAccount->SpecProductExchangeMargin);
		printf("\tFrozenSwap [%.8lf]\n", pTradingAccount->FrozenSwap);
		printf("\tRemainSwap [%.8lf]\n", pTradingAccount->RemainSwap);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryTradingAccount>\n");
};

void CTraderSpi::OnRspQryInvestor(CThostFtdcInvestorField *pInvestor, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInvestor>\n");
	if (pInvestor)
	{
		printf("\tInvestorID [%s]\n", pInvestor->InvestorID);
		printf("\tBrokerID [%s]\n", pInvestor->BrokerID);
		printf("\tInvestorGroupID [%s]\n", pInvestor->InvestorGroupID);
		printf("\tInvestorName [%s]\n", pInvestor->InvestorName);
		printf("\tIdentifiedCardNo [%s]\n", pInvestor->IdentifiedCardNo);
		printf("\tTelephone [%s]\n", pInvestor->Telephone);
		printf("\tAddress [%s]\n", pInvestor->Address);
		printf("\tOpenDate [%s]\n", pInvestor->OpenDate);
		printf("\tMobile [%s]\n", pInvestor->Mobile);
		printf("\tCommModelID [%s]\n", pInvestor->CommModelID);
		printf("\tMarginModelID [%s]\n", pInvestor->MarginModelID);
		printf("\tIsActive [%d]\n", pInvestor->IsActive);
		printf("\tIdentifiedCardType [%c]\n", pInvestor->IdentifiedCardType);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInvestor>\n");
};

void CTraderSpi::OnRspQryTradingCode(CThostFtdcTradingCodeField *pTradingCode, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryTradingCode>\n");
	if (pTradingCode)
	{
		printf("\tInvestorID [%s]\n", pTradingCode->InvestorID);
		printf("\tBrokerID [%s]\n", pTradingCode->BrokerID);
		printf("\tExchangeID [%s]\n", pTradingCode->ExchangeID);
		printf("\tClientID [%s]\n", pTradingCode->ClientID);
		printf("\tBranchID [%s]\n", pTradingCode->BranchID);
		printf("\tInvestUnitID [%s]\n", pTradingCode->InvestUnitID);
		printf("\tIsActive [%d]\n", pTradingCode->IsActive);
		printf("\tClientIDType [%c]\n", pTradingCode->ClientIDType);
		printf("\tBizType [%c]\n", pTradingCode->BizType);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryTradingCode>\n");
};

void CTraderSpi::OnRspQryInstrumentMarginRate(CThostFtdcInstrumentMarginRateField *pInstrumentMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInstrumentMarginRate>\n");
	if (pInstrumentMarginRate)
	{
		printf("\tInstrumentID [%s]\n", pInstrumentMarginRate->InstrumentID);
		printf("\tBrokerID [%s]\n", pInstrumentMarginRate->BrokerID);
		printf("\tInvestorID [%s]\n", pInstrumentMarginRate->InvestorID);
		printf("\tExchangeID [%s]\n", pInstrumentMarginRate->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInstrumentMarginRate->InvestUnitID);
		printf("\tIsRelative [%d]\n", pInstrumentMarginRate->IsRelative);
		printf("\tInvestorRange [%c]\n", pInstrumentMarginRate->InvestorRange);
		printf("\tHedgeFlag [%c]\n", pInstrumentMarginRate->HedgeFlag);
		printf("\tLongMarginRatioByMoney [%.8lf]\n", pInstrumentMarginRate->LongMarginRatioByMoney);
		printf("\tLongMarginRatioByVolume [%.8lf]\n", pInstrumentMarginRate->LongMarginRatioByVolume);
		printf("\tShortMarginRatioByMoney [%.8lf]\n", pInstrumentMarginRate->ShortMarginRatioByMoney);
		printf("\tShortMarginRatioByVolume [%.8lf]\n", pInstrumentMarginRate->ShortMarginRatioByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInstrumentMarginRate>\n");
};

void CTraderSpi::OnRspQryInstrumentCommissionRate(CThostFtdcInstrumentCommissionRateField *pInstrumentCommissionRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInstrumentCommissionRate>\n");
	if (pInstrumentCommissionRate)
	{
		printf("\tInstrumentID [%s]\n", pInstrumentCommissionRate->InstrumentID);
		printf("\tBrokerID [%s]\n", pInstrumentCommissionRate->BrokerID);
		printf("\tInvestorID [%s]\n", pInstrumentCommissionRate->InvestorID);
		printf("\tExchangeID [%s]\n", pInstrumentCommissionRate->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInstrumentCommissionRate->InvestUnitID);
		printf("\tInvestorRange [%c]\n", pInstrumentCommissionRate->InvestorRange);
		printf("\tBizType [%c]\n", pInstrumentCommissionRate->BizType);
		printf("\tOpenRatioByMoney [%.8lf]\n", pInstrumentCommissionRate->OpenRatioByMoney);
		printf("\tOpenRatioByVolume [%.8lf]\n", pInstrumentCommissionRate->OpenRatioByVolume);
		printf("\tCloseRatioByMoney [%.8lf]\n", pInstrumentCommissionRate->CloseRatioByMoney);
		printf("\tCloseRatioByVolume [%.8lf]\n", pInstrumentCommissionRate->CloseRatioByVolume);
		printf("\tCloseTodayRatioByMoney [%.8lf]\n", pInstrumentCommissionRate->CloseTodayRatioByMoney);
		printf("\tCloseTodayRatioByVolume [%.8lf]\n", pInstrumentCommissionRate->CloseTodayRatioByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInstrumentCommissionRate>\n");
};

void CTraderSpi::OnRspQryExchange(CThostFtdcExchangeField *pExchange, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryExchange>\n");
	if (pExchange)
	{
		printf("\tExchangeID [%s]\n", pExchange->ExchangeID);
		printf("\tExchangeName [%s]\n", pExchange->ExchangeName);
		printf("\tExchangeProperty [%c]\n", pExchange->ExchangeProperty);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryExchange>\n");
};

void CTraderSpi::OnRspQryProduct(CThostFtdcProductField *pProduct, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryProduct>\n");
	if (pProduct)
	{
		printf("\tProductID [%s]\n", pProduct->ProductID);
		printf("\tProductName [%s]\n", pProduct->ProductName);
		printf("\tExchangeID [%s]\n", pProduct->ExchangeID);
		printf("\tTradeCurrencyID [%s]\n", pProduct->TradeCurrencyID);
		printf("\tExchangeProductID [%s]\n", pProduct->ExchangeProductID);
		printf("\tVolumeMultiple [%d]\n", pProduct->VolumeMultiple);
		printf("\tMaxMarketOrderVolume [%d]\n", pProduct->MaxMarketOrderVolume);
		printf("\tMinMarketOrderVolume [%d]\n", pProduct->MinMarketOrderVolume);
		printf("\tMaxLimitOrderVolume [%d]\n", pProduct->MaxLimitOrderVolume);
		printf("\tMinLimitOrderVolume [%d]\n", pProduct->MinLimitOrderVolume);
		printf("\tProductClass [%c]\n", pProduct->ProductClass);
		printf("\tPositionType [%c]\n", pProduct->PositionType);
		printf("\tPositionDateType [%c]\n", pProduct->PositionDateType);
		printf("\tCloseDealType [%c]\n", pProduct->CloseDealType);
		printf("\tMortgageFundUseRange [%c]\n", pProduct->MortgageFundUseRange);
		printf("\tPriceTick [%.8lf]\n", pProduct->PriceTick);
		printf("\tUnderlyingMultiple [%.8lf]\n", pProduct->UnderlyingMultiple);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryProduct>\n");
};

void CTraderSpi::OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInstrument>\n");
	if (pInstrument)
	{
		printf("\tInstrumentID [%s]\n", pInstrument->InstrumentID);
		printf("\tExchangeID [%s]\n", pInstrument->ExchangeID);
		printf("\tInstrumentName [%s]\n", pInstrument->InstrumentName);
		printf("\tExchangeInstID [%s]\n", pInstrument->ExchangeInstID);
		printf("\tProductID [%s]\n", pInstrument->ProductID);
		printf("\tCreateDate [%s]\n", pInstrument->CreateDate);
		printf("\tOpenDate [%s]\n", pInstrument->OpenDate);
		printf("\tExpireDate [%s]\n", pInstrument->ExpireDate);
		printf("\tStartDelivDate [%s]\n", pInstrument->StartDelivDate);
		printf("\tEndDelivDate [%s]\n", pInstrument->EndDelivDate);
		printf("\tUnderlyingInstrID [%s]\n", pInstrument->UnderlyingInstrID);
		printf("\tDeliveryYear [%d]\n", pInstrument->DeliveryYear);
		printf("\tDeliveryMonth [%d]\n", pInstrument->DeliveryMonth);
		printf("\tMaxMarketOrderVolume [%d]\n", pInstrument->MaxMarketOrderVolume);
		printf("\tMinMarketOrderVolume [%d]\n", pInstrument->MinMarketOrderVolume);
		printf("\tMaxLimitOrderVolume [%d]\n", pInstrument->MaxLimitOrderVolume);
		printf("\tMinLimitOrderVolume [%d]\n", pInstrument->MinLimitOrderVolume);
		printf("\tVolumeMultiple [%d]\n", pInstrument->VolumeMultiple);
		printf("\tIsTrading [%d]\n", pInstrument->IsTrading);
		printf("\tProductClass [%c]\n", pInstrument->ProductClass);
		printf("\tInstLifePhase [%c]\n", pInstrument->InstLifePhase);
		printf("\tPositionType [%c]\n", pInstrument->PositionType);
		printf("\tPositionDateType [%c]\n", pInstrument->PositionDateType);
		printf("\tMaxMarginSideAlgorithm [%c]\n", pInstrument->MaxMarginSideAlgorithm);
		printf("\tOptionsType [%c]\n", pInstrument->OptionsType);
		printf("\tCombinationType [%c]\n", pInstrument->CombinationType);
		printf("\tPriceTick [%.8lf]\n", pInstrument->PriceTick);
		printf("\tLongMarginRatio [%.8lf]\n", pInstrument->LongMarginRatio);
		printf("\tShortMarginRatio [%.8lf]\n", pInstrument->ShortMarginRatio);
		printf("\tStrikePrice [%.8lf]\n", pInstrument->StrikePrice);
		printf("\tUnderlyingMultiple [%.8lf]\n", pInstrument->UnderlyingMultiple);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInstrument>\n");
};

void CTraderSpi::OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryDepthMarketData>\n");
	if (pDepthMarketData)
	{
		printf("\tTradingDay [%s]\n", pDepthMarketData->TradingDay);
		printf("\tInstrumentID [%s]\n", pDepthMarketData->InstrumentID);
		printf("\tExchangeID [%s]\n", pDepthMarketData->ExchangeID);
		printf("\tExchangeInstID [%s]\n", pDepthMarketData->ExchangeInstID);
		printf("\tUpdateTime [%s]\n", pDepthMarketData->UpdateTime);
		printf("\tActionDay [%s]\n", pDepthMarketData->ActionDay);
		printf("\tVolume [%d]\n", pDepthMarketData->Volume);
		printf("\tUpdateMillisec [%d]\n", pDepthMarketData->UpdateMillisec);
		printf("\tBidVolume1 [%d]\n", pDepthMarketData->BidVolume1);
		printf("\tAskVolume1 [%d]\n", pDepthMarketData->AskVolume1);
		printf("\tBidVolume2 [%d]\n", pDepthMarketData->BidVolume2);
		printf("\tAskVolume2 [%d]\n", pDepthMarketData->AskVolume2);
		printf("\tBidVolume3 [%d]\n", pDepthMarketData->BidVolume3);
		printf("\tAskVolume3 [%d]\n", pDepthMarketData->AskVolume3);
		printf("\tBidVolume4 [%d]\n", pDepthMarketData->BidVolume4);
		printf("\tAskVolume4 [%d]\n", pDepthMarketData->AskVolume4);
		printf("\tBidVolume5 [%d]\n", pDepthMarketData->BidVolume5);
		printf("\tAskVolume5 [%d]\n", pDepthMarketData->AskVolume5);
		printf("\tLastPrice [%.8lf]\n", pDepthMarketData->LastPrice);
		printf("\tPreSettlementPrice [%.8lf]\n", pDepthMarketData->PreSettlementPrice);
		printf("\tPreClosePrice [%.8lf]\n", pDepthMarketData->PreClosePrice);
		printf("\tPreOpenInterest [%.8lf]\n", pDepthMarketData->PreOpenInterest);
		printf("\tOpenPrice [%.8lf]\n", pDepthMarketData->OpenPrice);
		printf("\tHighestPrice [%.8lf]\n", pDepthMarketData->HighestPrice);
		printf("\tLowestPrice [%.8lf]\n", pDepthMarketData->LowestPrice);
		printf("\tTurnover [%.8lf]\n", pDepthMarketData->Turnover);
		printf("\tOpenInterest [%.8lf]\n", pDepthMarketData->OpenInterest);
		printf("\tClosePrice [%.8lf]\n", pDepthMarketData->ClosePrice);
		printf("\tSettlementPrice [%.8lf]\n", pDepthMarketData->SettlementPrice);
		printf("\tUpperLimitPrice [%.8lf]\n", pDepthMarketData->UpperLimitPrice);
		printf("\tLowerLimitPrice [%.8lf]\n", pDepthMarketData->LowerLimitPrice);
		printf("\tPreDelta [%.8lf]\n", pDepthMarketData->PreDelta);
		printf("\tCurrDelta [%.8lf]\n", pDepthMarketData->CurrDelta);
		printf("\tBidPrice1 [%.8lf]\n", pDepthMarketData->BidPrice1);
		printf("\tAskPrice1 [%.8lf]\n", pDepthMarketData->AskPrice1);
		printf("\tBidPrice2 [%.8lf]\n", pDepthMarketData->BidPrice2);
		printf("\tAskPrice2 [%.8lf]\n", pDepthMarketData->AskPrice2);
		printf("\tBidPrice3 [%.8lf]\n", pDepthMarketData->BidPrice3);
		printf("\tAskPrice3 [%.8lf]\n", pDepthMarketData->AskPrice3);
		printf("\tBidPrice4 [%.8lf]\n", pDepthMarketData->BidPrice4);
		printf("\tAskPrice4 [%.8lf]\n", pDepthMarketData->AskPrice4);
		printf("\tBidPrice5 [%.8lf]\n", pDepthMarketData->BidPrice5);
		printf("\tAskPrice5 [%.8lf]\n", pDepthMarketData->AskPrice5);
		printf("\tAveragePrice [%.8lf]\n", pDepthMarketData->AveragePrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryDepthMarketData>\n");
};

void CTraderSpi::OnRspQrySettlementInfo(CThostFtdcSettlementInfoField *pSettlementInfo, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQrySettlementInfo>\n");
	if (pSettlementInfo)
	{
		printf("\tTradingDay [%s]\n", pSettlementInfo->TradingDay);
		printf("\tBrokerID [%s]\n", pSettlementInfo->BrokerID);
		printf("\tInvestorID [%s]\n", pSettlementInfo->InvestorID);
		printf("\tContent [%s]\n", pSettlementInfo->Content);
		printf("\tAccountID [%s]\n", pSettlementInfo->AccountID);
		printf("\tCurrencyID [%s]\n", pSettlementInfo->CurrencyID);
		printf("\tSettlementID [%d]\n", pSettlementInfo->SettlementID);
		printf("\tSequenceNo [%d]\n", pSettlementInfo->SequenceNo);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQrySettlementInfo>\n");
};

void CTraderSpi::OnRspQryTransferBank(CThostFtdcTransferBankField *pTransferBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryTransferBank>\n");
	if (pTransferBank)
	{
		printf("\tBankID [%s]\n", pTransferBank->BankID);
		printf("\tBankBrchID [%s]\n", pTransferBank->BankBrchID);
		printf("\tBankName [%s]\n", pTransferBank->BankName);
		printf("\tIsActive [%d]\n", pTransferBank->IsActive);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryTransferBank>\n");
};

void CTraderSpi::OnRspQryInvestorPositionDetail(CThostFtdcInvestorPositionDetailField *pInvestorPositionDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInvestorPositionDetail>\n");
	if (pInvestorPositionDetail)
	{
		printf("\tInstrumentID [%s]\n", pInvestorPositionDetail->InstrumentID);
		printf("\tBrokerID [%s]\n", pInvestorPositionDetail->BrokerID);
		printf("\tInvestorID [%s]\n", pInvestorPositionDetail->InvestorID);
		printf("\tOpenDate [%s]\n", pInvestorPositionDetail->OpenDate);
		printf("\tTradeID [%s]\n", pInvestorPositionDetail->TradeID);
		printf("\tTradingDay [%s]\n", pInvestorPositionDetail->TradingDay);
		printf("\tCombInstrumentID [%s]\n", pInvestorPositionDetail->CombInstrumentID);
		printf("\tExchangeID [%s]\n", pInvestorPositionDetail->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInvestorPositionDetail->InvestUnitID);
		printf("\tVolume [%d]\n", pInvestorPositionDetail->Volume);
		printf("\tSettlementID [%d]\n", pInvestorPositionDetail->SettlementID);
		printf("\tCloseVolume [%d]\n", pInvestorPositionDetail->CloseVolume);
		printf("\tHedgeFlag [%c]\n", pInvestorPositionDetail->HedgeFlag);
		printf("\tDirection [%c]\n", pInvestorPositionDetail->Direction);
		printf("\tTradeType [%c]\n", pInvestorPositionDetail->TradeType);
		printf("\tOpenPrice [%.8lf]\n", pInvestorPositionDetail->OpenPrice);
		printf("\tCloseProfitByDate [%.8lf]\n", pInvestorPositionDetail->CloseProfitByDate);
		printf("\tCloseProfitByTrade [%.8lf]\n", pInvestorPositionDetail->CloseProfitByTrade);
		printf("\tPositionProfitByDate [%.8lf]\n", pInvestorPositionDetail->PositionProfitByDate);
		printf("\tPositionProfitByTrade [%.8lf]\n", pInvestorPositionDetail->PositionProfitByTrade);
		printf("\tMargin [%.8lf]\n", pInvestorPositionDetail->Margin);
		printf("\tExchMargin [%.8lf]\n", pInvestorPositionDetail->ExchMargin);
		printf("\tMarginRateByMoney [%.8lf]\n", pInvestorPositionDetail->MarginRateByMoney);
		printf("\tMarginRateByVolume [%.8lf]\n", pInvestorPositionDetail->MarginRateByVolume);
		printf("\tLastSettlementPrice [%.8lf]\n", pInvestorPositionDetail->LastSettlementPrice);
		printf("\tSettlementPrice [%.8lf]\n", pInvestorPositionDetail->SettlementPrice);
		printf("\tCloseAmount [%.8lf]\n", pInvestorPositionDetail->CloseAmount);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInvestorPositionDetail>\n");
};

void CTraderSpi::OnRspQryNotice(CThostFtdcNoticeField *pNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryNotice>\n");
	if (pNotice)
	{
		printf("\tBrokerID [%s]\n", pNotice->BrokerID);
		printf("\tContent [%s]\n", pNotice->Content);
		printf("\tSequenceLabel [%s]\n", pNotice->SequenceLabel);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryNotice>\n");
};

void CTraderSpi::OnRspQrySettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQrySettlementInfoConfirm>\n");
	if (pSettlementInfoConfirm)
	{
		printf("\tBrokerID [%s]\n", pSettlementInfoConfirm->BrokerID);
		printf("\tInvestorID [%s]\n", pSettlementInfoConfirm->InvestorID);
		printf("\tConfirmDate [%s]\n", pSettlementInfoConfirm->ConfirmDate);
		printf("\tConfirmTime [%s]\n", pSettlementInfoConfirm->ConfirmTime);
		printf("\tAccountID [%s]\n", pSettlementInfoConfirm->AccountID);
		printf("\tCurrencyID [%s]\n", pSettlementInfoConfirm->CurrencyID);
		printf("\tSettlementID [%d]\n", pSettlementInfoConfirm->SettlementID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQrySettlementInfoConfirm>\n");
};

void CTraderSpi::OnRspQryInvestorPositionCombineDetail(CThostFtdcInvestorPositionCombineDetailField *pInvestorPositionCombineDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInvestorPositionCombineDetail>\n");
	if (pInvestorPositionCombineDetail)
	{
		printf("\tTradingDay [%s]\n", pInvestorPositionCombineDetail->TradingDay);
		printf("\tOpenDate [%s]\n", pInvestorPositionCombineDetail->OpenDate);
		printf("\tExchangeID [%s]\n", pInvestorPositionCombineDetail->ExchangeID);
		printf("\tBrokerID [%s]\n", pInvestorPositionCombineDetail->BrokerID);
		printf("\tInvestorID [%s]\n", pInvestorPositionCombineDetail->InvestorID);
		printf("\tComTradeID [%s]\n", pInvestorPositionCombineDetail->ComTradeID);
		printf("\tTradeID [%s]\n", pInvestorPositionCombineDetail->TradeID);
		printf("\tInstrumentID [%s]\n", pInvestorPositionCombineDetail->InstrumentID);
		printf("\tCombInstrumentID [%s]\n", pInvestorPositionCombineDetail->CombInstrumentID);
		printf("\tInvestUnitID [%s]\n", pInvestorPositionCombineDetail->InvestUnitID);
		printf("\tSettlementID [%d]\n", pInvestorPositionCombineDetail->SettlementID);
		printf("\tTotalAmt [%d]\n", pInvestorPositionCombineDetail->TotalAmt);
		printf("\tLegID [%d]\n", pInvestorPositionCombineDetail->LegID);
		printf("\tLegMultiple [%d]\n", pInvestorPositionCombineDetail->LegMultiple);
		printf("\tTradeGroupID [%d]\n", pInvestorPositionCombineDetail->TradeGroupID);
		printf("\tHedgeFlag [%c]\n", pInvestorPositionCombineDetail->HedgeFlag);
		printf("\tDirection [%c]\n", pInvestorPositionCombineDetail->Direction);
		printf("\tMargin [%.8lf]\n", pInvestorPositionCombineDetail->Margin);
		printf("\tExchMargin [%.8lf]\n", pInvestorPositionCombineDetail->ExchMargin);
		printf("\tMarginRateByMoney [%.8lf]\n", pInvestorPositionCombineDetail->MarginRateByMoney);
		printf("\tMarginRateByVolume [%.8lf]\n", pInvestorPositionCombineDetail->MarginRateByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInvestorPositionCombineDetail>\n");
};

void CTraderSpi::OnRspQryCFMMCTradingAccountKey(CThostFtdcCFMMCTradingAccountKeyField *pCFMMCTradingAccountKey, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryCFMMCTradingAccountKey>\n");
	if (pCFMMCTradingAccountKey)
	{
		printf("\tBrokerID [%s]\n", pCFMMCTradingAccountKey->BrokerID);
		printf("\tParticipantID [%s]\n", pCFMMCTradingAccountKey->ParticipantID);
		printf("\tAccountID [%s]\n", pCFMMCTradingAccountKey->AccountID);
		printf("\tCurrentKey [%s]\n", pCFMMCTradingAccountKey->CurrentKey);
		printf("\tKeyID [%d]\n", pCFMMCTradingAccountKey->KeyID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryCFMMCTradingAccountKey>\n");
};

void CTraderSpi::OnRspQryEWarrantOffset(CThostFtdcEWarrantOffsetField *pEWarrantOffset, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryEWarrantOffset>\n");
	if (pEWarrantOffset)
	{
		printf("\tTradingDay [%s]\n", pEWarrantOffset->TradingDay);
		printf("\tBrokerID [%s]\n", pEWarrantOffset->BrokerID);
		printf("\tInvestorID [%s]\n", pEWarrantOffset->InvestorID);
		printf("\tExchangeID [%s]\n", pEWarrantOffset->ExchangeID);
		printf("\tInstrumentID [%s]\n", pEWarrantOffset->InstrumentID);
		printf("\tInvestUnitID [%s]\n", pEWarrantOffset->InvestUnitID);
		printf("\tVolume [%d]\n", pEWarrantOffset->Volume);
		printf("\tDirection [%c]\n", pEWarrantOffset->Direction);
		printf("\tHedgeFlag [%c]\n", pEWarrantOffset->HedgeFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryEWarrantOffset>\n");
};

void CTraderSpi::OnRspQryInvestorProductGroupMargin(CThostFtdcInvestorProductGroupMarginField *pInvestorProductGroupMargin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInvestorProductGroupMargin>\n");
	if (pInvestorProductGroupMargin)
	{
		printf("\tProductGroupID [%s]\n", pInvestorProductGroupMargin->ProductGroupID);
		printf("\tBrokerID [%s]\n", pInvestorProductGroupMargin->BrokerID);
		printf("\tInvestorID [%s]\n", pInvestorProductGroupMargin->InvestorID);
		printf("\tTradingDay [%s]\n", pInvestorProductGroupMargin->TradingDay);
		printf("\tExchangeID [%s]\n", pInvestorProductGroupMargin->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInvestorProductGroupMargin->InvestUnitID);
		printf("\tSettlementID [%d]\n", pInvestorProductGroupMargin->SettlementID);
		printf("\tHedgeFlag [%c]\n", pInvestorProductGroupMargin->HedgeFlag);
		printf("\tFrozenMargin [%.8lf]\n", pInvestorProductGroupMargin->FrozenMargin);
		printf("\tLongFrozenMargin [%.8lf]\n", pInvestorProductGroupMargin->LongFrozenMargin);
		printf("\tShortFrozenMargin [%.8lf]\n", pInvestorProductGroupMargin->ShortFrozenMargin);
		printf("\tUseMargin [%.8lf]\n", pInvestorProductGroupMargin->UseMargin);
		printf("\tLongUseMargin [%.8lf]\n", pInvestorProductGroupMargin->LongUseMargin);
		printf("\tShortUseMargin [%.8lf]\n", pInvestorProductGroupMargin->ShortUseMargin);
		printf("\tExchMargin [%.8lf]\n", pInvestorProductGroupMargin->ExchMargin);
		printf("\tLongExchMargin [%.8lf]\n", pInvestorProductGroupMargin->LongExchMargin);
		printf("\tShortExchMargin [%.8lf]\n", pInvestorProductGroupMargin->ShortExchMargin);
		printf("\tCloseProfit [%.8lf]\n", pInvestorProductGroupMargin->CloseProfit);
		printf("\tFrozenCommission [%.8lf]\n", pInvestorProductGroupMargin->FrozenCommission);
		printf("\tCommission [%.8lf]\n", pInvestorProductGroupMargin->Commission);
		printf("\tFrozenCash [%.8lf]\n", pInvestorProductGroupMargin->FrozenCash);
		printf("\tCashIn [%.8lf]\n", pInvestorProductGroupMargin->CashIn);
		printf("\tPositionProfit [%.8lf]\n", pInvestorProductGroupMargin->PositionProfit);
		printf("\tOffsetAmount [%.8lf]\n", pInvestorProductGroupMargin->OffsetAmount);
		printf("\tLongOffsetAmount [%.8lf]\n", pInvestorProductGroupMargin->LongOffsetAmount);
		printf("\tShortOffsetAmount [%.8lf]\n", pInvestorProductGroupMargin->ShortOffsetAmount);
		printf("\tExchOffsetAmount [%.8lf]\n", pInvestorProductGroupMargin->ExchOffsetAmount);
		printf("\tLongExchOffsetAmount [%.8lf]\n", pInvestorProductGroupMargin->LongExchOffsetAmount);
		printf("\tShortExchOffsetAmount [%.8lf]\n", pInvestorProductGroupMargin->ShortExchOffsetAmount);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInvestorProductGroupMargin>\n");
};

void CTraderSpi::OnRspQryExchangeMarginRate(CThostFtdcExchangeMarginRateField *pExchangeMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryExchangeMarginRate>\n");
	if (pExchangeMarginRate)
	{
		printf("\tBrokerID [%s]\n", pExchangeMarginRate->BrokerID);
		printf("\tInstrumentID [%s]\n", pExchangeMarginRate->InstrumentID);
		printf("\tExchangeID [%s]\n", pExchangeMarginRate->ExchangeID);
		printf("\tHedgeFlag [%c]\n", pExchangeMarginRate->HedgeFlag);
		printf("\tLongMarginRatioByMoney [%.8lf]\n", pExchangeMarginRate->LongMarginRatioByMoney);
		printf("\tLongMarginRatioByVolume [%.8lf]\n", pExchangeMarginRate->LongMarginRatioByVolume);
		printf("\tShortMarginRatioByMoney [%.8lf]\n", pExchangeMarginRate->ShortMarginRatioByMoney);
		printf("\tShortMarginRatioByVolume [%.8lf]\n", pExchangeMarginRate->ShortMarginRatioByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryExchangeMarginRate>\n");
};

void CTraderSpi::OnRspQryExchangeMarginRateAdjust(CThostFtdcExchangeMarginRateAdjustField *pExchangeMarginRateAdjust, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryExchangeMarginRateAdjust>\n");
	if (pExchangeMarginRateAdjust)
	{
		printf("\tBrokerID [%s]\n", pExchangeMarginRateAdjust->BrokerID);
		printf("\tInstrumentID [%s]\n", pExchangeMarginRateAdjust->InstrumentID);
		printf("\tHedgeFlag [%c]\n", pExchangeMarginRateAdjust->HedgeFlag);
		printf("\tLongMarginRatioByMoney [%.8lf]\n", pExchangeMarginRateAdjust->LongMarginRatioByMoney);
		printf("\tLongMarginRatioByVolume [%.8lf]\n", pExchangeMarginRateAdjust->LongMarginRatioByVolume);
		printf("\tShortMarginRatioByMoney [%.8lf]\n", pExchangeMarginRateAdjust->ShortMarginRatioByMoney);
		printf("\tShortMarginRatioByVolume [%.8lf]\n", pExchangeMarginRateAdjust->ShortMarginRatioByVolume);
		printf("\tExchLongMarginRatioByMoney [%.8lf]\n", pExchangeMarginRateAdjust->ExchLongMarginRatioByMoney);
		printf("\tExchLongMarginRatioByVolume [%.8lf]\n", pExchangeMarginRateAdjust->ExchLongMarginRatioByVolume);
		printf("\tExchShortMarginRatioByMoney [%.8lf]\n", pExchangeMarginRateAdjust->ExchShortMarginRatioByMoney);
		printf("\tExchShortMarginRatioByVolume [%.8lf]\n", pExchangeMarginRateAdjust->ExchShortMarginRatioByVolume);
		printf("\tNoLongMarginRatioByMoney [%.8lf]\n", pExchangeMarginRateAdjust->NoLongMarginRatioByMoney);
		printf("\tNoLongMarginRatioByVolume [%.8lf]\n", pExchangeMarginRateAdjust->NoLongMarginRatioByVolume);
		printf("\tNoShortMarginRatioByMoney [%.8lf]\n", pExchangeMarginRateAdjust->NoShortMarginRatioByMoney);
		printf("\tNoShortMarginRatioByVolume [%.8lf]\n", pExchangeMarginRateAdjust->NoShortMarginRatioByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryExchangeMarginRateAdjust>\n");
};

void CTraderSpi::OnRspQryExchangeRate(CThostFtdcExchangeRateField *pExchangeRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryExchangeRate>\n");
	if (pExchangeRate)
	{
		printf("\tBrokerID [%s]\n", pExchangeRate->BrokerID);
		printf("\tFromCurrencyID [%s]\n", pExchangeRate->FromCurrencyID);
		printf("\tToCurrencyID [%s]\n", pExchangeRate->ToCurrencyID);
		printf("\tFromCurrencyUnit [%.8lf]\n", pExchangeRate->FromCurrencyUnit);
		printf("\tExchangeRate [%.8lf]\n", pExchangeRate->ExchangeRate);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryExchangeRate>\n");
};

void CTraderSpi::OnRspQrySecAgentACIDMap(CThostFtdcSecAgentACIDMapField *pSecAgentACIDMap, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQrySecAgentACIDMap>\n");
	if (pSecAgentACIDMap)
	{
		printf("\tBrokerID [%s]\n", pSecAgentACIDMap->BrokerID);
		printf("\tUserID [%s]\n", pSecAgentACIDMap->UserID);
		printf("\tAccountID [%s]\n", pSecAgentACIDMap->AccountID);
		printf("\tCurrencyID [%s]\n", pSecAgentACIDMap->CurrencyID);
		printf("\tBrokerSecAgentID [%s]\n", pSecAgentACIDMap->BrokerSecAgentID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQrySecAgentACIDMap>\n");
};

void CTraderSpi::OnRspQryProductExchRate(CThostFtdcProductExchRateField *pProductExchRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryProductExchRate>\n");
	if (pProductExchRate)
	{
		printf("\tProductID [%s]\n", pProductExchRate->ProductID);
		printf("\tQuoteCurrencyID [%s]\n", pProductExchRate->QuoteCurrencyID);
		printf("\tExchangeID [%s]\n", pProductExchRate->ExchangeID);
		printf("\tExchangeRate [%.8lf]\n", pProductExchRate->ExchangeRate);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryProductExchRate>\n");
};

void CTraderSpi::OnRspQryProductGroup(CThostFtdcProductGroupField *pProductGroup, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryProductGroup>\n");
	if (pProductGroup)
	{
		printf("\tProductID [%s]\n", pProductGroup->ProductID);
		printf("\tExchangeID [%s]\n", pProductGroup->ExchangeID);
		printf("\tProductGroupID [%s]\n", pProductGroup->ProductGroupID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryProductGroup>\n");
};

void CTraderSpi::OnRspQryMMInstrumentCommissionRate(CThostFtdcMMInstrumentCommissionRateField *pMMInstrumentCommissionRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryMMInstrumentCommissionRate>\n");
	if (pMMInstrumentCommissionRate)
	{
		printf("\tInstrumentID [%s]\n", pMMInstrumentCommissionRate->InstrumentID);
		printf("\tBrokerID [%s]\n", pMMInstrumentCommissionRate->BrokerID);
		printf("\tInvestorID [%s]\n", pMMInstrumentCommissionRate->InvestorID);
		printf("\tInvestorRange [%c]\n", pMMInstrumentCommissionRate->InvestorRange);
		printf("\tOpenRatioByMoney [%.8lf]\n", pMMInstrumentCommissionRate->OpenRatioByMoney);
		printf("\tOpenRatioByVolume [%.8lf]\n", pMMInstrumentCommissionRate->OpenRatioByVolume);
		printf("\tCloseRatioByMoney [%.8lf]\n", pMMInstrumentCommissionRate->CloseRatioByMoney);
		printf("\tCloseRatioByVolume [%.8lf]\n", pMMInstrumentCommissionRate->CloseRatioByVolume);
		printf("\tCloseTodayRatioByMoney [%.8lf]\n", pMMInstrumentCommissionRate->CloseTodayRatioByMoney);
		printf("\tCloseTodayRatioByVolume [%.8lf]\n", pMMInstrumentCommissionRate->CloseTodayRatioByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryMMInstrumentCommissionRate>\n");
};

void CTraderSpi::OnRspQryMMOptionInstrCommRate(CThostFtdcMMOptionInstrCommRateField *pMMOptionInstrCommRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryMMOptionInstrCommRate>\n");
	if (pMMOptionInstrCommRate)
	{
		printf("\tInstrumentID [%s]\n", pMMOptionInstrCommRate->InstrumentID);
		printf("\tBrokerID [%s]\n", pMMOptionInstrCommRate->BrokerID);
		printf("\tInvestorID [%s]\n", pMMOptionInstrCommRate->InvestorID);
		printf("\tInvestorRange [%c]\n", pMMOptionInstrCommRate->InvestorRange);
		printf("\tOpenRatioByMoney [%.8lf]\n", pMMOptionInstrCommRate->OpenRatioByMoney);
		printf("\tOpenRatioByVolume [%.8lf]\n", pMMOptionInstrCommRate->OpenRatioByVolume);
		printf("\tCloseRatioByMoney [%.8lf]\n", pMMOptionInstrCommRate->CloseRatioByMoney);
		printf("\tCloseRatioByVolume [%.8lf]\n", pMMOptionInstrCommRate->CloseRatioByVolume);
		printf("\tCloseTodayRatioByMoney [%.8lf]\n", pMMOptionInstrCommRate->CloseTodayRatioByMoney);
		printf("\tCloseTodayRatioByVolume [%.8lf]\n", pMMOptionInstrCommRate->CloseTodayRatioByVolume);
		printf("\tStrikeRatioByMoney [%.8lf]\n", pMMOptionInstrCommRate->StrikeRatioByMoney);
		printf("\tStrikeRatioByVolume [%.8lf]\n", pMMOptionInstrCommRate->StrikeRatioByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryMMOptionInstrCommRate>\n");
};

void CTraderSpi::OnRspQryInstrumentOrderCommRate(CThostFtdcInstrumentOrderCommRateField *pInstrumentOrderCommRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInstrumentOrderCommRate>\n");
	if (pInstrumentOrderCommRate)
	{
		printf("\tInstrumentID [%s]\n", pInstrumentOrderCommRate->InstrumentID);
		printf("\tBrokerID [%s]\n", pInstrumentOrderCommRate->BrokerID);
		printf("\tInvestorID [%s]\n", pInstrumentOrderCommRate->InvestorID);
		printf("\tExchangeID [%s]\n", pInstrumentOrderCommRate->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInstrumentOrderCommRate->InvestUnitID);
		printf("\tInvestorRange [%c]\n", pInstrumentOrderCommRate->InvestorRange);
		printf("\tHedgeFlag [%c]\n", pInstrumentOrderCommRate->HedgeFlag);
		printf("\tOrderCommByVolume [%.8lf]\n", pInstrumentOrderCommRate->OrderCommByVolume);
		printf("\tOrderActionCommByVolume [%.8lf]\n", pInstrumentOrderCommRate->OrderActionCommByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInstrumentOrderCommRate>\n");
};

void CTraderSpi::OnRspQrySecAgentTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQrySecAgentTradingAccount>\n");
	if (pTradingAccount)
	{
		printf("\tBrokerID [%s]\n", pTradingAccount->BrokerID);
		printf("\tAccountID [%s]\n", pTradingAccount->AccountID);
		printf("\tTradingDay [%s]\n", pTradingAccount->TradingDay);
		printf("\tCurrencyID [%s]\n", pTradingAccount->CurrencyID);
		printf("\tSettlementID [%d]\n", pTradingAccount->SettlementID);
		printf("\tBizType [%c]\n", pTradingAccount->BizType);
		printf("\tPreMortgage [%.8lf]\n", pTradingAccount->PreMortgage);
		printf("\tPreCredit [%.8lf]\n", pTradingAccount->PreCredit);
		printf("\tPreDeposit [%.8lf]\n", pTradingAccount->PreDeposit);
		printf("\tPreBalance [%.8lf]\n", pTradingAccount->PreBalance);
		printf("\tPreMargin [%.8lf]\n", pTradingAccount->PreMargin);
		printf("\tInterestBase [%.8lf]\n", pTradingAccount->InterestBase);
		printf("\tInterest [%.8lf]\n", pTradingAccount->Interest);
		printf("\tDeposit [%.8lf]\n", pTradingAccount->Deposit);
		printf("\tWithdraw [%.8lf]\n", pTradingAccount->Withdraw);
		printf("\tFrozenMargin [%.8lf]\n", pTradingAccount->FrozenMargin);
		printf("\tFrozenCash [%.8lf]\n", pTradingAccount->FrozenCash);
		printf("\tFrozenCommission [%.8lf]\n", pTradingAccount->FrozenCommission);
		printf("\tCurrMargin [%.8lf]\n", pTradingAccount->CurrMargin);
		printf("\tCashIn [%.8lf]\n", pTradingAccount->CashIn);
		printf("\tCommission [%.8lf]\n", pTradingAccount->Commission);
		printf("\tCloseProfit [%.8lf]\n", pTradingAccount->CloseProfit);
		printf("\tPositionProfit [%.8lf]\n", pTradingAccount->PositionProfit);
		printf("\tBalance [%.8lf]\n", pTradingAccount->Balance);
		printf("\tAvailable [%.8lf]\n", pTradingAccount->Available);
		printf("\tWithdrawQuota [%.8lf]\n", pTradingAccount->WithdrawQuota);
		printf("\tReserve [%.8lf]\n", pTradingAccount->Reserve);
		printf("\tCredit [%.8lf]\n", pTradingAccount->Credit);
		printf("\tMortgage [%.8lf]\n", pTradingAccount->Mortgage);
		printf("\tExchangeMargin [%.8lf]\n", pTradingAccount->ExchangeMargin);
		printf("\tDeliveryMargin [%.8lf]\n", pTradingAccount->DeliveryMargin);
		printf("\tExchangeDeliveryMargin [%.8lf]\n", pTradingAccount->ExchangeDeliveryMargin);
		printf("\tReserveBalance [%.8lf]\n", pTradingAccount->ReserveBalance);
		printf("\tPreFundMortgageIn [%.8lf]\n", pTradingAccount->PreFundMortgageIn);
		printf("\tPreFundMortgageOut [%.8lf]\n", pTradingAccount->PreFundMortgageOut);
		printf("\tFundMortgageIn [%.8lf]\n", pTradingAccount->FundMortgageIn);
		printf("\tFundMortgageOut [%.8lf]\n", pTradingAccount->FundMortgageOut);
		printf("\tFundMortgageAvailable [%.8lf]\n", pTradingAccount->FundMortgageAvailable);
		printf("\tMortgageableFund [%.8lf]\n", pTradingAccount->MortgageableFund);
		printf("\tSpecProductMargin [%.8lf]\n", pTradingAccount->SpecProductMargin);
		printf("\tSpecProductFrozenMargin [%.8lf]\n", pTradingAccount->SpecProductFrozenMargin);
		printf("\tSpecProductCommission [%.8lf]\n", pTradingAccount->SpecProductCommission);
		printf("\tSpecProductFrozenCommission [%.8lf]\n", pTradingAccount->SpecProductFrozenCommission);
		printf("\tSpecProductPositionProfit [%.8lf]\n", pTradingAccount->SpecProductPositionProfit);
		printf("\tSpecProductCloseProfit [%.8lf]\n", pTradingAccount->SpecProductCloseProfit);
		printf("\tSpecProductPositionProfitByAlg [%.8lf]\n", pTradingAccount->SpecProductPositionProfitByAlg);
		printf("\tSpecProductExchangeMargin [%.8lf]\n", pTradingAccount->SpecProductExchangeMargin);
		printf("\tFrozenSwap [%.8lf]\n", pTradingAccount->FrozenSwap);
		printf("\tRemainSwap [%.8lf]\n", pTradingAccount->RemainSwap);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQrySecAgentTradingAccount>\n");
};

void CTraderSpi::OnRspQrySecAgentCheckMode(CThostFtdcSecAgentCheckModeField *pSecAgentCheckMode, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQrySecAgentCheckMode>\n");
	if (pSecAgentCheckMode)
	{
		printf("\tInvestorID [%s]\n", pSecAgentCheckMode->InvestorID);
		printf("\tBrokerID [%s]\n", pSecAgentCheckMode->BrokerID);
		printf("\tCurrencyID [%s]\n", pSecAgentCheckMode->CurrencyID);
		printf("\tBrokerSecAgentID [%s]\n", pSecAgentCheckMode->BrokerSecAgentID);
		printf("\tCheckSelfAccount [%d]\n", pSecAgentCheckMode->CheckSelfAccount);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQrySecAgentCheckMode>\n");
};

void CTraderSpi::OnRspQrySecAgentTradeInfo(CThostFtdcSecAgentTradeInfoField *pSecAgentTradeInfo, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQrySecAgentTradeInfo>\n");
	if (pSecAgentTradeInfo)
	{
		printf("\tBrokerID [%s]\n", pSecAgentTradeInfo->BrokerID);
		printf("\tBrokerSecAgentID [%s]\n", pSecAgentTradeInfo->BrokerSecAgentID);
		printf("\tInvestorID [%s]\n", pSecAgentTradeInfo->InvestorID);
		printf("\tLongCustomerName [%s]\n", pSecAgentTradeInfo->LongCustomerName);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQrySecAgentTradeInfo>\n");
};

void CTraderSpi::OnRspQryOptionInstrTradeCost(CThostFtdcOptionInstrTradeCostField *pOptionInstrTradeCost, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryOptionInstrTradeCost>\n");
	if (pOptionInstrTradeCost)
	{
		printf("\tBrokerID [%s]\n", pOptionInstrTradeCost->BrokerID);
		printf("\tInvestorID [%s]\n", pOptionInstrTradeCost->InvestorID);
		printf("\tInstrumentID [%s]\n", pOptionInstrTradeCost->InstrumentID);
		printf("\tExchangeID [%s]\n", pOptionInstrTradeCost->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pOptionInstrTradeCost->InvestUnitID);
		printf("\tHedgeFlag [%c]\n", pOptionInstrTradeCost->HedgeFlag);
		printf("\tFixedMargin [%.8lf]\n", pOptionInstrTradeCost->FixedMargin);
		printf("\tMiniMargin [%.8lf]\n", pOptionInstrTradeCost->MiniMargin);
		printf("\tRoyalty [%.8lf]\n", pOptionInstrTradeCost->Royalty);
		printf("\tExchFixedMargin [%.8lf]\n", pOptionInstrTradeCost->ExchFixedMargin);
		printf("\tExchMiniMargin [%.8lf]\n", pOptionInstrTradeCost->ExchMiniMargin);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryOptionInstrTradeCost>\n");
};

void CTraderSpi::OnRspQryOptionInstrCommRate(CThostFtdcOptionInstrCommRateField *pOptionInstrCommRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryOptionInstrCommRate>\n");
	if (pOptionInstrCommRate)
	{
		printf("\tInstrumentID [%s]\n", pOptionInstrCommRate->InstrumentID);
		printf("\tBrokerID [%s]\n", pOptionInstrCommRate->BrokerID);
		printf("\tInvestorID [%s]\n", pOptionInstrCommRate->InvestorID);
		printf("\tExchangeID [%s]\n", pOptionInstrCommRate->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pOptionInstrCommRate->InvestUnitID);
		printf("\tInvestorRange [%c]\n", pOptionInstrCommRate->InvestorRange);
		printf("\tOpenRatioByMoney [%.8lf]\n", pOptionInstrCommRate->OpenRatioByMoney);
		printf("\tOpenRatioByVolume [%.8lf]\n", pOptionInstrCommRate->OpenRatioByVolume);
		printf("\tCloseRatioByMoney [%.8lf]\n", pOptionInstrCommRate->CloseRatioByMoney);
		printf("\tCloseRatioByVolume [%.8lf]\n", pOptionInstrCommRate->CloseRatioByVolume);
		printf("\tCloseTodayRatioByMoney [%.8lf]\n", pOptionInstrCommRate->CloseTodayRatioByMoney);
		printf("\tCloseTodayRatioByVolume [%.8lf]\n", pOptionInstrCommRate->CloseTodayRatioByVolume);
		printf("\tStrikeRatioByMoney [%.8lf]\n", pOptionInstrCommRate->StrikeRatioByMoney);
		printf("\tStrikeRatioByVolume [%.8lf]\n", pOptionInstrCommRate->StrikeRatioByVolume);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryOptionInstrCommRate>\n");
};

void CTraderSpi::OnRspQryExecOrder(CThostFtdcExecOrderField *pExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryExecOrder>\n");
	if (pExecOrder)
	{
		printf("\tBrokerID [%s]\n", pExecOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pExecOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pExecOrder->InstrumentID);
		printf("\tExecOrderRef [%s]\n", pExecOrder->ExecOrderRef);
		printf("\tUserID [%s]\n", pExecOrder->UserID);
		printf("\tBusinessUnit [%s]\n", pExecOrder->BusinessUnit);
		printf("\tExecOrderLocalID [%s]\n", pExecOrder->ExecOrderLocalID);
		printf("\tExchangeID [%s]\n", pExecOrder->ExchangeID);
		printf("\tParticipantID [%s]\n", pExecOrder->ParticipantID);
		printf("\tClientID [%s]\n", pExecOrder->ClientID);
		printf("\tExchangeInstID [%s]\n", pExecOrder->ExchangeInstID);
		printf("\tTraderID [%s]\n", pExecOrder->TraderID);
		printf("\tTradingDay [%s]\n", pExecOrder->TradingDay);
		printf("\tExecOrderSysID [%s]\n", pExecOrder->ExecOrderSysID);
		printf("\tInsertDate [%s]\n", pExecOrder->InsertDate);
		printf("\tInsertTime [%s]\n", pExecOrder->InsertTime);
		printf("\tCancelTime [%s]\n", pExecOrder->CancelTime);
		printf("\tClearingPartID [%s]\n", pExecOrder->ClearingPartID);
		printf("\tUserProductInfo [%s]\n", pExecOrder->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pExecOrder->StatusMsg);
		printf("\tActiveUserID [%s]\n", pExecOrder->ActiveUserID);
		printf("\tBranchID [%s]\n", pExecOrder->BranchID);
		printf("\tInvestUnitID [%s]\n", pExecOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pExecOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pExecOrder->CurrencyID);
		printf("\tIPAddress [%s]\n", pExecOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pExecOrder->MacAddress);
		printf("\tVolume [%d]\n", pExecOrder->Volume);
		printf("\tRequestID [%d]\n", pExecOrder->RequestID);
		printf("\tInstallID [%d]\n", pExecOrder->InstallID);
		printf("\tNotifySequence [%d]\n", pExecOrder->NotifySequence);
		printf("\tSettlementID [%d]\n", pExecOrder->SettlementID);
		printf("\tSequenceNo [%d]\n", pExecOrder->SequenceNo);
		printf("\tFrontID [%d]\n", pExecOrder->FrontID);
		printf("\tSessionID [%d]\n", pExecOrder->SessionID);
		printf("\tBrokerExecOrderSeq [%d]\n", pExecOrder->BrokerExecOrderSeq);
		printf("\tOffsetFlag [%c]\n", pExecOrder->OffsetFlag);
		printf("\tHedgeFlag [%c]\n", pExecOrder->HedgeFlag);
		printf("\tActionType [%c]\n", pExecOrder->ActionType);
		printf("\tPosiDirection [%c]\n", pExecOrder->PosiDirection);
		printf("\tReservePositionFlag [%c]\n", pExecOrder->ReservePositionFlag);
		printf("\tCloseFlag [%c]\n", pExecOrder->CloseFlag);
		printf("\tOrderSubmitStatus [%c]\n", pExecOrder->OrderSubmitStatus);
		printf("\tExecResult [%c]\n", pExecOrder->ExecResult);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryExecOrder>\n");
};

void CTraderSpi::OnRspQryForQuote(CThostFtdcForQuoteField *pForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryForQuote>\n");
	if (pForQuote)
	{
		printf("\tBrokerID [%s]\n", pForQuote->BrokerID);
		printf("\tInvestorID [%s]\n", pForQuote->InvestorID);
		printf("\tInstrumentID [%s]\n", pForQuote->InstrumentID);
		printf("\tForQuoteRef [%s]\n", pForQuote->ForQuoteRef);
		printf("\tUserID [%s]\n", pForQuote->UserID);
		printf("\tForQuoteLocalID [%s]\n", pForQuote->ForQuoteLocalID);
		printf("\tExchangeID [%s]\n", pForQuote->ExchangeID);
		printf("\tParticipantID [%s]\n", pForQuote->ParticipantID);
		printf("\tClientID [%s]\n", pForQuote->ClientID);
		printf("\tExchangeInstID [%s]\n", pForQuote->ExchangeInstID);
		printf("\tTraderID [%s]\n", pForQuote->TraderID);
		printf("\tInsertDate [%s]\n", pForQuote->InsertDate);
		printf("\tInsertTime [%s]\n", pForQuote->InsertTime);
		printf("\tStatusMsg [%s]\n", pForQuote->StatusMsg);
		printf("\tActiveUserID [%s]\n", pForQuote->ActiveUserID);
		printf("\tInvestUnitID [%s]\n", pForQuote->InvestUnitID);
		printf("\tIPAddress [%s]\n", pForQuote->IPAddress);
		printf("\tMacAddress [%s]\n", pForQuote->MacAddress);
		printf("\tInstallID [%d]\n", pForQuote->InstallID);
		printf("\tFrontID [%d]\n", pForQuote->FrontID);
		printf("\tSessionID [%d]\n", pForQuote->SessionID);
		printf("\tBrokerForQutoSeq [%d]\n", pForQuote->BrokerForQutoSeq);
		printf("\tForQuoteStatus [%c]\n", pForQuote->ForQuoteStatus);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryForQuote>\n");
};

void CTraderSpi::OnRspQryQuote(CThostFtdcQuoteField *pQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryQuote>\n");
	if (pQuote)
	{
		printf("\tBrokerID [%s]\n", pQuote->BrokerID);
		printf("\tInvestorID [%s]\n", pQuote->InvestorID);
		printf("\tInstrumentID [%s]\n", pQuote->InstrumentID);
		printf("\tQuoteRef [%s]\n", pQuote->QuoteRef);
		printf("\tUserID [%s]\n", pQuote->UserID);
		printf("\tBusinessUnit [%s]\n", pQuote->BusinessUnit);
		printf("\tQuoteLocalID [%s]\n", pQuote->QuoteLocalID);
		printf("\tExchangeID [%s]\n", pQuote->ExchangeID);
		printf("\tParticipantID [%s]\n", pQuote->ParticipantID);
		printf("\tClientID [%s]\n", pQuote->ClientID);
		printf("\tExchangeInstID [%s]\n", pQuote->ExchangeInstID);
		printf("\tTraderID [%s]\n", pQuote->TraderID);
		printf("\tTradingDay [%s]\n", pQuote->TradingDay);
		printf("\tQuoteSysID [%s]\n", pQuote->QuoteSysID);
		printf("\tInsertDate [%s]\n", pQuote->InsertDate);
		printf("\tInsertTime [%s]\n", pQuote->InsertTime);
		printf("\tCancelTime [%s]\n", pQuote->CancelTime);
		printf("\tClearingPartID [%s]\n", pQuote->ClearingPartID);
		printf("\tAskOrderSysID [%s]\n", pQuote->AskOrderSysID);
		printf("\tBidOrderSysID [%s]\n", pQuote->BidOrderSysID);
		printf("\tUserProductInfo [%s]\n", pQuote->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pQuote->StatusMsg);
		printf("\tActiveUserID [%s]\n", pQuote->ActiveUserID);
		printf("\tAskOrderRef [%s]\n", pQuote->AskOrderRef);
		printf("\tBidOrderRef [%s]\n", pQuote->BidOrderRef);
		printf("\tForQuoteSysID [%s]\n", pQuote->ForQuoteSysID);
		printf("\tBranchID [%s]\n", pQuote->BranchID);
		printf("\tInvestUnitID [%s]\n", pQuote->InvestUnitID);
		printf("\tAccountID [%s]\n", pQuote->AccountID);
		printf("\tCurrencyID [%s]\n", pQuote->CurrencyID);
		printf("\tIPAddress [%s]\n", pQuote->IPAddress);
		printf("\tMacAddress [%s]\n", pQuote->MacAddress);
		printf("\tAskVolume [%d]\n", pQuote->AskVolume);
		printf("\tBidVolume [%d]\n", pQuote->BidVolume);
		printf("\tRequestID [%d]\n", pQuote->RequestID);
		printf("\tInstallID [%d]\n", pQuote->InstallID);
		printf("\tNotifySequence [%d]\n", pQuote->NotifySequence);
		printf("\tSettlementID [%d]\n", pQuote->SettlementID);
		printf("\tSequenceNo [%d]\n", pQuote->SequenceNo);
		printf("\tFrontID [%d]\n", pQuote->FrontID);
		printf("\tSessionID [%d]\n", pQuote->SessionID);
		printf("\tBrokerQuoteSeq [%d]\n", pQuote->BrokerQuoteSeq);
		printf("\tAskOffsetFlag [%c]\n", pQuote->AskOffsetFlag);
		printf("\tBidOffsetFlag [%c]\n", pQuote->BidOffsetFlag);
		printf("\tAskHedgeFlag [%c]\n", pQuote->AskHedgeFlag);
		printf("\tBidHedgeFlag [%c]\n", pQuote->BidHedgeFlag);
		printf("\tOrderSubmitStatus [%c]\n", pQuote->OrderSubmitStatus);
		printf("\tQuoteStatus [%c]\n", pQuote->QuoteStatus);
		printf("\tAskPrice [%.8lf]\n", pQuote->AskPrice);
		printf("\tBidPrice [%.8lf]\n", pQuote->BidPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryQuote>\n");
};

void CTraderSpi::OnRspQryOptionSelfClose(CThostFtdcOptionSelfCloseField *pOptionSelfClose, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryOptionSelfClose>\n");
	if (pOptionSelfClose)
	{
		printf("\tBrokerID [%s]\n", pOptionSelfClose->BrokerID);
		printf("\tInvestorID [%s]\n", pOptionSelfClose->InvestorID);
		printf("\tInstrumentID [%s]\n", pOptionSelfClose->InstrumentID);
		printf("\tOptionSelfCloseRef [%s]\n", pOptionSelfClose->OptionSelfCloseRef);
		printf("\tUserID [%s]\n", pOptionSelfClose->UserID);
		printf("\tBusinessUnit [%s]\n", pOptionSelfClose->BusinessUnit);
		printf("\tOptionSelfCloseLocalID [%s]\n", pOptionSelfClose->OptionSelfCloseLocalID);
		printf("\tExchangeID [%s]\n", pOptionSelfClose->ExchangeID);
		printf("\tParticipantID [%s]\n", pOptionSelfClose->ParticipantID);
		printf("\tClientID [%s]\n", pOptionSelfClose->ClientID);
		printf("\tExchangeInstID [%s]\n", pOptionSelfClose->ExchangeInstID);
		printf("\tTraderID [%s]\n", pOptionSelfClose->TraderID);
		printf("\tTradingDay [%s]\n", pOptionSelfClose->TradingDay);
		printf("\tOptionSelfCloseSysID [%s]\n", pOptionSelfClose->OptionSelfCloseSysID);
		printf("\tInsertDate [%s]\n", pOptionSelfClose->InsertDate);
		printf("\tInsertTime [%s]\n", pOptionSelfClose->InsertTime);
		printf("\tCancelTime [%s]\n", pOptionSelfClose->CancelTime);
		printf("\tClearingPartID [%s]\n", pOptionSelfClose->ClearingPartID);
		printf("\tUserProductInfo [%s]\n", pOptionSelfClose->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pOptionSelfClose->StatusMsg);
		printf("\tActiveUserID [%s]\n", pOptionSelfClose->ActiveUserID);
		printf("\tBranchID [%s]\n", pOptionSelfClose->BranchID);
		printf("\tInvestUnitID [%s]\n", pOptionSelfClose->InvestUnitID);
		printf("\tAccountID [%s]\n", pOptionSelfClose->AccountID);
		printf("\tCurrencyID [%s]\n", pOptionSelfClose->CurrencyID);
		printf("\tIPAddress [%s]\n", pOptionSelfClose->IPAddress);
		printf("\tMacAddress [%s]\n", pOptionSelfClose->MacAddress);
		printf("\tVolume [%d]\n", pOptionSelfClose->Volume);
		printf("\tRequestID [%d]\n", pOptionSelfClose->RequestID);
		printf("\tInstallID [%d]\n", pOptionSelfClose->InstallID);
		printf("\tNotifySequence [%d]\n", pOptionSelfClose->NotifySequence);
		printf("\tSettlementID [%d]\n", pOptionSelfClose->SettlementID);
		printf("\tSequenceNo [%d]\n", pOptionSelfClose->SequenceNo);
		printf("\tFrontID [%d]\n", pOptionSelfClose->FrontID);
		printf("\tSessionID [%d]\n", pOptionSelfClose->SessionID);
		printf("\tBrokerOptionSelfCloseSeq [%d]\n", pOptionSelfClose->BrokerOptionSelfCloseSeq);
		printf("\tHedgeFlag [%c]\n", pOptionSelfClose->HedgeFlag);
		printf("\tOptSelfCloseFlag [%c]\n", pOptionSelfClose->OptSelfCloseFlag);
		printf("\tOrderSubmitStatus [%c]\n", pOptionSelfClose->OrderSubmitStatus);
		printf("\tExecResult [%c]\n", pOptionSelfClose->ExecResult);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryOptionSelfClose>\n");
};

void CTraderSpi::OnRspQryInvestUnit(CThostFtdcInvestUnitField *pInvestUnit, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryInvestUnit>\n");
	if (pInvestUnit)
	{
		printf("\tBrokerID [%s]\n", pInvestUnit->BrokerID);
		printf("\tInvestorID [%s]\n", pInvestUnit->InvestorID);
		printf("\tInvestUnitID [%s]\n", pInvestUnit->InvestUnitID);
		printf("\tInvestorUnitName [%s]\n", pInvestUnit->InvestorUnitName);
		printf("\tInvestorGroupID [%s]\n", pInvestUnit->InvestorGroupID);
		printf("\tCommModelID [%s]\n", pInvestUnit->CommModelID);
		printf("\tMarginModelID [%s]\n", pInvestUnit->MarginModelID);
		printf("\tAccountID [%s]\n", pInvestUnit->AccountID);
		printf("\tCurrencyID [%s]\n", pInvestUnit->CurrencyID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryInvestUnit>\n");
};

void CTraderSpi::OnRspQryCombInstrumentGuard(CThostFtdcCombInstrumentGuardField *pCombInstrumentGuard, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryCombInstrumentGuard>\n");
	if (pCombInstrumentGuard)
	{
		printf("\tBrokerID [%s]\n", pCombInstrumentGuard->BrokerID);
		printf("\tInstrumentID [%s]\n", pCombInstrumentGuard->InstrumentID);
		printf("\tExchangeID [%s]\n", pCombInstrumentGuard->ExchangeID);
		printf("\tGuarantRatio [%.8lf]\n", pCombInstrumentGuard->GuarantRatio);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryCombInstrumentGuard>\n");
};

void CTraderSpi::OnRspQryCombAction(CThostFtdcCombActionField *pCombAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryCombAction>\n");
	if (pCombAction)
	{
		printf("\tBrokerID [%s]\n", pCombAction->BrokerID);
		printf("\tInvestorID [%s]\n", pCombAction->InvestorID);
		printf("\tInstrumentID [%s]\n", pCombAction->InstrumentID);
		printf("\tCombActionRef [%s]\n", pCombAction->CombActionRef);
		printf("\tUserID [%s]\n", pCombAction->UserID);
		printf("\tActionLocalID [%s]\n", pCombAction->ActionLocalID);
		printf("\tExchangeID [%s]\n", pCombAction->ExchangeID);
		printf("\tParticipantID [%s]\n", pCombAction->ParticipantID);
		printf("\tClientID [%s]\n", pCombAction->ClientID);
		printf("\tExchangeInstID [%s]\n", pCombAction->ExchangeInstID);
		printf("\tTraderID [%s]\n", pCombAction->TraderID);
		printf("\tTradingDay [%s]\n", pCombAction->TradingDay);
		printf("\tUserProductInfo [%s]\n", pCombAction->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pCombAction->StatusMsg);
		printf("\tIPAddress [%s]\n", pCombAction->IPAddress);
		printf("\tMacAddress [%s]\n", pCombAction->MacAddress);
		printf("\tComTradeID [%s]\n", pCombAction->ComTradeID);
		printf("\tBranchID [%s]\n", pCombAction->BranchID);
		printf("\tInvestUnitID [%s]\n", pCombAction->InvestUnitID);
		printf("\tVolume [%d]\n", pCombAction->Volume);
		printf("\tInstallID [%d]\n", pCombAction->InstallID);
		printf("\tNotifySequence [%d]\n", pCombAction->NotifySequence);
		printf("\tSettlementID [%d]\n", pCombAction->SettlementID);
		printf("\tSequenceNo [%d]\n", pCombAction->SequenceNo);
		printf("\tFrontID [%d]\n", pCombAction->FrontID);
		printf("\tSessionID [%d]\n", pCombAction->SessionID);
		printf("\tDirection [%c]\n", pCombAction->Direction);
		printf("\tCombDirection [%c]\n", pCombAction->CombDirection);
		printf("\tHedgeFlag [%c]\n", pCombAction->HedgeFlag);
		printf("\tActionStatus [%c]\n", pCombAction->ActionStatus);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryCombAction>\n");
};

void CTraderSpi::OnRspQryTransferSerial(CThostFtdcTransferSerialField *pTransferSerial, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryTransferSerial>\n");
	if (pTransferSerial)
	{
		printf("\tTradeDate [%s]\n", pTransferSerial->TradeDate);
		printf("\tTradingDay [%s]\n", pTransferSerial->TradingDay);
		printf("\tTradeTime [%s]\n", pTransferSerial->TradeTime);
		printf("\tTradeCode [%s]\n", pTransferSerial->TradeCode);
		printf("\tBankID [%s]\n", pTransferSerial->BankID);
		printf("\tBankBranchID [%s]\n", pTransferSerial->BankBranchID);
		printf("\tBankAccount [%s]\n", pTransferSerial->BankAccount);
		printf("\tBankSerial [%s]\n", pTransferSerial->BankSerial);
		printf("\tBrokerID [%s]\n", pTransferSerial->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pTransferSerial->BrokerBranchID);
		printf("\tAccountID [%s]\n", pTransferSerial->AccountID);
		printf("\tInvestorID [%s]\n", pTransferSerial->InvestorID);
		printf("\tIdentifiedCardNo [%s]\n", pTransferSerial->IdentifiedCardNo);
		printf("\tCurrencyID [%s]\n", pTransferSerial->CurrencyID);
		printf("\tOperatorCode [%s]\n", pTransferSerial->OperatorCode);
		printf("\tBankNewAccount [%s]\n", pTransferSerial->BankNewAccount);
		printf("\tErrorMsg [%s]\n", pTransferSerial->ErrorMsg);
		printf("\tPlateSerial [%d]\n", pTransferSerial->PlateSerial);
		printf("\tSessionID [%d]\n", pTransferSerial->SessionID);
		printf("\tFutureSerial [%d]\n", pTransferSerial->FutureSerial);
		printf("\tErrorID [%d]\n", pTransferSerial->ErrorID);
		printf("\tBankAccType [%c]\n", pTransferSerial->BankAccType);
		printf("\tFutureAccType [%c]\n", pTransferSerial->FutureAccType);
		printf("\tIdCardType [%c]\n", pTransferSerial->IdCardType);
		printf("\tAvailabilityFlag [%c]\n", pTransferSerial->AvailabilityFlag);
		printf("\tTradeAmount [%.8lf]\n", pTransferSerial->TradeAmount);
		printf("\tCustFee [%.8lf]\n", pTransferSerial->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pTransferSerial->BrokerFee);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryTransferSerial>\n");
};

void CTraderSpi::OnRspQryAccountregister(CThostFtdcAccountregisterField *pAccountregister, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryAccountregister>\n");
	if (pAccountregister)
	{
		printf("\tTradeDay [%s]\n", pAccountregister->TradeDay);
		printf("\tBankID [%s]\n", pAccountregister->BankID);
		printf("\tBankBranchID [%s]\n", pAccountregister->BankBranchID);
		printf("\tBankAccount [%s]\n", pAccountregister->BankAccount);
		printf("\tBrokerID [%s]\n", pAccountregister->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pAccountregister->BrokerBranchID);
		printf("\tAccountID [%s]\n", pAccountregister->AccountID);
		printf("\tIdentifiedCardNo [%s]\n", pAccountregister->IdentifiedCardNo);
		printf("\tCustomerName [%s]\n", pAccountregister->CustomerName);
		printf("\tCurrencyID [%s]\n", pAccountregister->CurrencyID);
		printf("\tRegDate [%s]\n", pAccountregister->RegDate);
		printf("\tOutDate [%s]\n", pAccountregister->OutDate);
		printf("\tLongCustomerName [%s]\n", pAccountregister->LongCustomerName);
		printf("\tTID [%d]\n", pAccountregister->TID);
		printf("\tIdCardType [%c]\n", pAccountregister->IdCardType);
		printf("\tOpenOrDestroy [%c]\n", pAccountregister->OpenOrDestroy);
		printf("\tCustType [%c]\n", pAccountregister->CustType);
		printf("\tBankAccType [%c]\n", pAccountregister->BankAccType);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryAccountregister>\n");
};

void CTraderSpi::OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspError>\n");
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspError>\n");
};
void CTraderSpi::OnRtnOrder(CThostFtdcOrderField *pOrder)
{
	printf("<OnRtnOrder>\n");
	if (pOrder)
	{
		printf("\tBrokerID [%s]\n", pOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pOrder->InstrumentID);
		printf("\tOrderRef [%s]\n", pOrder->OrderRef);
		printf("\tUserID [%s]\n", pOrder->UserID);
		printf("\tCombOffsetFlag [%s]\n", pOrder->CombOffsetFlag);
		printf("\tCombHedgeFlag [%s]\n", pOrder->CombHedgeFlag);
		printf("\tGTDDate [%s]\n", pOrder->GTDDate);
		printf("\tBusinessUnit [%s]\n", pOrder->BusinessUnit);
		printf("\tOrderLocalID [%s]\n", pOrder->OrderLocalID);
		printf("\tExchangeID [%s]\n", pOrder->ExchangeID);
		printf("\tParticipantID [%s]\n", pOrder->ParticipantID);
		printf("\tClientID [%s]\n", pOrder->ClientID);
		printf("\tExchangeInstID [%s]\n", pOrder->ExchangeInstID);
		printf("\tTraderID [%s]\n", pOrder->TraderID);
		printf("\tTradingDay [%s]\n", pOrder->TradingDay);
		printf("\tOrderSysID [%s]\n", pOrder->OrderSysID);
		printf("\tInsertDate [%s]\n", pOrder->InsertDate);
		printf("\tInsertTime [%s]\n", pOrder->InsertTime);
		printf("\tActiveTime [%s]\n", pOrder->ActiveTime);
		printf("\tSuspendTime [%s]\n", pOrder->SuspendTime);
		printf("\tUpdateTime [%s]\n", pOrder->UpdateTime);
		printf("\tCancelTime [%s]\n", pOrder->CancelTime);
		printf("\tActiveTraderID [%s]\n", pOrder->ActiveTraderID);
		printf("\tClearingPartID [%s]\n", pOrder->ClearingPartID);
		printf("\tUserProductInfo [%s]\n", pOrder->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pOrder->StatusMsg);
		printf("\tActiveUserID [%s]\n", pOrder->ActiveUserID);
		printf("\tRelativeOrderSysID [%s]\n", pOrder->RelativeOrderSysID);
		printf("\tBranchID [%s]\n", pOrder->BranchID);
		printf("\tInvestUnitID [%s]\n", pOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pOrder->CurrencyID);
		printf("\tIPAddress [%s]\n", pOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pOrder->MacAddress);
		printf("\tVolumeTotalOriginal [%d]\n", pOrder->VolumeTotalOriginal);
		printf("\tMinVolume [%d]\n", pOrder->MinVolume);
		printf("\tIsAutoSuspend [%d]\n", pOrder->IsAutoSuspend);
		printf("\tRequestID [%d]\n", pOrder->RequestID);
		printf("\tInstallID [%d]\n", pOrder->InstallID);
		printf("\tNotifySequence [%d]\n", pOrder->NotifySequence);
		printf("\tSettlementID [%d]\n", pOrder->SettlementID);
		printf("\tVolumeTraded [%d]\n", pOrder->VolumeTraded);
		printf("\tVolumeTotal [%d]\n", pOrder->VolumeTotal);
		printf("\tSequenceNo [%d]\n", pOrder->SequenceNo);
		printf("\tFrontID [%d]\n", pOrder->FrontID);
		printf("\tSessionID [%d]\n", pOrder->SessionID);
		printf("\tUserForceClose [%d]\n", pOrder->UserForceClose);
		printf("\tBrokerOrderSeq [%d]\n", pOrder->BrokerOrderSeq);
		printf("\tZCETotalTradedVolume [%d]\n", pOrder->ZCETotalTradedVolume);
		printf("\tIsSwapOrder [%d]\n", pOrder->IsSwapOrder);
		printf("\tOrderPriceType [%c]\n", pOrder->OrderPriceType);
		printf("\tDirection [%c]\n", pOrder->Direction);
		printf("\tTimeCondition [%c]\n", pOrder->TimeCondition);
		printf("\tVolumeCondition [%c]\n", pOrder->VolumeCondition);
		printf("\tContingentCondition [%c]\n", pOrder->ContingentCondition);
		printf("\tForceCloseReason [%c]\n", pOrder->ForceCloseReason);
		printf("\tOrderSubmitStatus [%c]\n", pOrder->OrderSubmitStatus);
		printf("\tOrderSource [%c]\n", pOrder->OrderSource);
		printf("\tOrderStatus [%c]\n", pOrder->OrderStatus);
		printf("\tOrderType [%c]\n", pOrder->OrderType);
		printf("\tLimitPrice [%.8lf]\n", pOrder->LimitPrice);
		printf("\tStopPrice [%.8lf]\n", pOrder->StopPrice);
	}
	printf("</OnRtnOrder>\n");
};
void CTraderSpi::OnRtnTrade(CThostFtdcTradeField *pTrade)
{
	printf("<OnRtnTrade>\n");
	if (pTrade)
	{
		printf("\tBrokerID [%s]\n", pTrade->BrokerID);
		printf("\tInvestorID [%s]\n", pTrade->InvestorID);
		printf("\tInstrumentID [%s]\n", pTrade->InstrumentID);
		printf("\tOrderRef [%s]\n", pTrade->OrderRef);
		printf("\tUserID [%s]\n", pTrade->UserID);
		printf("\tExchangeID [%s]\n", pTrade->ExchangeID);
		printf("\tTradeID [%s]\n", pTrade->TradeID);
		printf("\tOrderSysID [%s]\n", pTrade->OrderSysID);
		printf("\tParticipantID [%s]\n", pTrade->ParticipantID);
		printf("\tClientID [%s]\n", pTrade->ClientID);
		printf("\tExchangeInstID [%s]\n", pTrade->ExchangeInstID);
		printf("\tTradeDate [%s]\n", pTrade->TradeDate);
		printf("\tTradeTime [%s]\n", pTrade->TradeTime);
		printf("\tTraderID [%s]\n", pTrade->TraderID);
		printf("\tOrderLocalID [%s]\n", pTrade->OrderLocalID);
		printf("\tClearingPartID [%s]\n", pTrade->ClearingPartID);
		printf("\tBusinessUnit [%s]\n", pTrade->BusinessUnit);
		printf("\tTradingDay [%s]\n", pTrade->TradingDay);
		printf("\tInvestUnitID [%s]\n", pTrade->InvestUnitID);
		printf("\tVolume [%d]\n", pTrade->Volume);
		printf("\tSequenceNo [%d]\n", pTrade->SequenceNo);
		printf("\tSettlementID [%d]\n", pTrade->SettlementID);
		printf("\tBrokerOrderSeq [%d]\n", pTrade->BrokerOrderSeq);
		printf("\tDirection [%c]\n", pTrade->Direction);
		printf("\tTradingRole [%c]\n", pTrade->TradingRole);
		printf("\tOffsetFlag [%c]\n", pTrade->OffsetFlag);
		printf("\tHedgeFlag [%c]\n", pTrade->HedgeFlag);
		printf("\tTradeType [%c]\n", pTrade->TradeType);
		printf("\tPriceSource [%c]\n", pTrade->PriceSource);
		printf("\tTradeSource [%c]\n", pTrade->TradeSource);
		printf("\tPrice [%.8lf]\n", pTrade->Price);
	}
	printf("</OnRtnTrade>\n");
};
void CTraderSpi::OnErrRtnOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnOrderInsert>\n");
	if (pInputOrder)
	{
		printf("\tBrokerID [%s]\n", pInputOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pInputOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputOrder->InstrumentID);
		printf("\tOrderRef [%s]\n", pInputOrder->OrderRef);
		printf("\tUserID [%s]\n", pInputOrder->UserID);
		printf("\tCombOffsetFlag [%s]\n", pInputOrder->CombOffsetFlag);
		printf("\tCombHedgeFlag [%s]\n", pInputOrder->CombHedgeFlag);
		printf("\tGTDDate [%s]\n", pInputOrder->GTDDate);
		printf("\tBusinessUnit [%s]\n", pInputOrder->BusinessUnit);
		printf("\tExchangeID [%s]\n", pInputOrder->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pInputOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pInputOrder->CurrencyID);
		printf("\tClientID [%s]\n", pInputOrder->ClientID);
		printf("\tIPAddress [%s]\n", pInputOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pInputOrder->MacAddress);
		printf("\tVolumeTotalOriginal [%d]\n", pInputOrder->VolumeTotalOriginal);
		printf("\tMinVolume [%d]\n", pInputOrder->MinVolume);
		printf("\tIsAutoSuspend [%d]\n", pInputOrder->IsAutoSuspend);
		printf("\tRequestID [%d]\n", pInputOrder->RequestID);
		printf("\tUserForceClose [%d]\n", pInputOrder->UserForceClose);
		printf("\tIsSwapOrder [%d]\n", pInputOrder->IsSwapOrder);
		printf("\tOrderPriceType [%c]\n", pInputOrder->OrderPriceType);
		printf("\tDirection [%c]\n", pInputOrder->Direction);
		printf("\tTimeCondition [%c]\n", pInputOrder->TimeCondition);
		printf("\tVolumeCondition [%c]\n", pInputOrder->VolumeCondition);
		printf("\tContingentCondition [%c]\n", pInputOrder->ContingentCondition);
		printf("\tForceCloseReason [%c]\n", pInputOrder->ForceCloseReason);
		printf("\tLimitPrice [%.8lf]\n", pInputOrder->LimitPrice);
		printf("\tStopPrice [%.8lf]\n", pInputOrder->StopPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnOrderInsert>\n");
};
void CTraderSpi::OnErrRtnOrderAction(CThostFtdcOrderActionField *pOrderAction, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnOrderAction>\n");
	if (pOrderAction)
	{
		printf("\tBrokerID [%s]\n", pOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pOrderAction->InvestorID);
		printf("\tOrderRef [%s]\n", pOrderAction->OrderRef);
		printf("\tExchangeID [%s]\n", pOrderAction->ExchangeID);
		printf("\tOrderSysID [%s]\n", pOrderAction->OrderSysID);
		printf("\tActionDate [%s]\n", pOrderAction->ActionDate);
		printf("\tActionTime [%s]\n", pOrderAction->ActionTime);
		printf("\tTraderID [%s]\n", pOrderAction->TraderID);
		printf("\tOrderLocalID [%s]\n", pOrderAction->OrderLocalID);
		printf("\tActionLocalID [%s]\n", pOrderAction->ActionLocalID);
		printf("\tParticipantID [%s]\n", pOrderAction->ParticipantID);
		printf("\tClientID [%s]\n", pOrderAction->ClientID);
		printf("\tBusinessUnit [%s]\n", pOrderAction->BusinessUnit);
		printf("\tUserID [%s]\n", pOrderAction->UserID);
		printf("\tStatusMsg [%s]\n", pOrderAction->StatusMsg);
		printf("\tInstrumentID [%s]\n", pOrderAction->InstrumentID);
		printf("\tBranchID [%s]\n", pOrderAction->BranchID);
		printf("\tInvestUnitID [%s]\n", pOrderAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pOrderAction->IPAddress);
		printf("\tMacAddress [%s]\n", pOrderAction->MacAddress);
		printf("\tOrderActionRef [%d]\n", pOrderAction->OrderActionRef);
		printf("\tRequestID [%d]\n", pOrderAction->RequestID);
		printf("\tFrontID [%d]\n", pOrderAction->FrontID);
		printf("\tSessionID [%d]\n", pOrderAction->SessionID);
		printf("\tVolumeChange [%d]\n", pOrderAction->VolumeChange);
		printf("\tInstallID [%d]\n", pOrderAction->InstallID);
		printf("\tActionFlag [%c]\n", pOrderAction->ActionFlag);
		printf("\tOrderActionStatus [%c]\n", pOrderAction->OrderActionStatus);
		printf("\tLimitPrice [%.8lf]\n", pOrderAction->LimitPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnOrderAction>\n");
};
void CTraderSpi::OnRtnInstrumentStatus(CThostFtdcInstrumentStatusField *pInstrumentStatus)
{
	printf("<OnRtnInstrumentStatus>\n");
	if (pInstrumentStatus)
	{
		printf("\tExchangeID [%s]\n", pInstrumentStatus->ExchangeID);
		printf("\tExchangeInstID [%s]\n", pInstrumentStatus->ExchangeInstID);
		printf("\tSettlementGroupID [%s]\n", pInstrumentStatus->SettlementGroupID);
		printf("\tInstrumentID [%s]\n", pInstrumentStatus->InstrumentID);
		printf("\tEnterTime [%s]\n", pInstrumentStatus->EnterTime);
		printf("\tTradingSegmentSN [%d]\n", pInstrumentStatus->TradingSegmentSN);
		printf("\tInstrumentStatus [%c]\n", pInstrumentStatus->InstrumentStatus);
		printf("\tEnterReason [%c]\n", pInstrumentStatus->EnterReason);
	}
	printf("</OnRtnInstrumentStatus>\n");
};
void CTraderSpi::OnRtnBulletin(CThostFtdcBulletinField *pBulletin)
{
	printf("<OnRtnBulletin>\n");
	if (pBulletin)
	{
		printf("\tExchangeID [%s]\n", pBulletin->ExchangeID);
		printf("\tTradingDay [%s]\n", pBulletin->TradingDay);
		printf("\tNewsType [%s]\n", pBulletin->NewsType);
		printf("\tSendTime [%s]\n", pBulletin->SendTime);
		printf("\tAbstract [%s]\n", pBulletin->Abstract);
		printf("\tComeFrom [%s]\n", pBulletin->ComeFrom);
		printf("\tContent [%s]\n", pBulletin->Content);
		printf("\tURLLink [%s]\n", pBulletin->URLLink);
		printf("\tMarketID [%s]\n", pBulletin->MarketID);
		printf("\tBulletinID [%d]\n", pBulletin->BulletinID);
		printf("\tSequenceNo [%d]\n", pBulletin->SequenceNo);
		printf("\tNewsUrgency [%c]\n", pBulletin->NewsUrgency);
	}
	printf("</OnRtnBulletin>\n");
};
void CTraderSpi::OnRtnTradingNotice(CThostFtdcTradingNoticeInfoField *pTradingNoticeInfo)
{
	printf("<OnRtnTradingNotice>\n");
	if (pTradingNoticeInfo)
	{
		printf("\tBrokerID [%s]\n", pTradingNoticeInfo->BrokerID);
		printf("\tInvestorID [%s]\n", pTradingNoticeInfo->InvestorID);
		printf("\tSendTime [%s]\n", pTradingNoticeInfo->SendTime);
		printf("\tFieldContent [%s]\n", pTradingNoticeInfo->FieldContent);
		printf("\tInvestUnitID [%s]\n", pTradingNoticeInfo->InvestUnitID);
		printf("\tSequenceNo [%d]\n", pTradingNoticeInfo->SequenceNo);
		printf("\tSequenceSeries [%d]\n", pTradingNoticeInfo->SequenceSeries);
	}
	printf("</OnRtnTradingNotice>\n");
};
void CTraderSpi::OnRtnErrorConditionalOrder(CThostFtdcErrorConditionalOrderField *pErrorConditionalOrder)
{
	printf("<OnRtnErrorConditionalOrder>\n");
	if (pErrorConditionalOrder)
	{
		printf("\tBrokerID [%s]\n", pErrorConditionalOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pErrorConditionalOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pErrorConditionalOrder->InstrumentID);
		printf("\tOrderRef [%s]\n", pErrorConditionalOrder->OrderRef);
		printf("\tUserID [%s]\n", pErrorConditionalOrder->UserID);
		printf("\tCombOffsetFlag [%s]\n", pErrorConditionalOrder->CombOffsetFlag);
		printf("\tCombHedgeFlag [%s]\n", pErrorConditionalOrder->CombHedgeFlag);
		printf("\tGTDDate [%s]\n", pErrorConditionalOrder->GTDDate);
		printf("\tBusinessUnit [%s]\n", pErrorConditionalOrder->BusinessUnit);
		printf("\tOrderLocalID [%s]\n", pErrorConditionalOrder->OrderLocalID);
		printf("\tExchangeID [%s]\n", pErrorConditionalOrder->ExchangeID);
		printf("\tParticipantID [%s]\n", pErrorConditionalOrder->ParticipantID);
		printf("\tClientID [%s]\n", pErrorConditionalOrder->ClientID);
		printf("\tExchangeInstID [%s]\n", pErrorConditionalOrder->ExchangeInstID);
		printf("\tTraderID [%s]\n", pErrorConditionalOrder->TraderID);
		printf("\tTradingDay [%s]\n", pErrorConditionalOrder->TradingDay);
		printf("\tOrderSysID [%s]\n", pErrorConditionalOrder->OrderSysID);
		printf("\tInsertDate [%s]\n", pErrorConditionalOrder->InsertDate);
		printf("\tInsertTime [%s]\n", pErrorConditionalOrder->InsertTime);
		printf("\tActiveTime [%s]\n", pErrorConditionalOrder->ActiveTime);
		printf("\tSuspendTime [%s]\n", pErrorConditionalOrder->SuspendTime);
		printf("\tUpdateTime [%s]\n", pErrorConditionalOrder->UpdateTime);
		printf("\tCancelTime [%s]\n", pErrorConditionalOrder->CancelTime);
		printf("\tActiveTraderID [%s]\n", pErrorConditionalOrder->ActiveTraderID);
		printf("\tClearingPartID [%s]\n", pErrorConditionalOrder->ClearingPartID);
		printf("\tUserProductInfo [%s]\n", pErrorConditionalOrder->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pErrorConditionalOrder->StatusMsg);
		printf("\tActiveUserID [%s]\n", pErrorConditionalOrder->ActiveUserID);
		printf("\tRelativeOrderSysID [%s]\n", pErrorConditionalOrder->RelativeOrderSysID);
		printf("\tErrorMsg [%s]\n", pErrorConditionalOrder->ErrorMsg);
		printf("\tBranchID [%s]\n", pErrorConditionalOrder->BranchID);
		printf("\tInvestUnitID [%s]\n", pErrorConditionalOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pErrorConditionalOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pErrorConditionalOrder->CurrencyID);
		printf("\tIPAddress [%s]\n", pErrorConditionalOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pErrorConditionalOrder->MacAddress);
		printf("\tVolumeTotalOriginal [%d]\n", pErrorConditionalOrder->VolumeTotalOriginal);
		printf("\tMinVolume [%d]\n", pErrorConditionalOrder->MinVolume);
		printf("\tIsAutoSuspend [%d]\n", pErrorConditionalOrder->IsAutoSuspend);
		printf("\tRequestID [%d]\n", pErrorConditionalOrder->RequestID);
		printf("\tInstallID [%d]\n", pErrorConditionalOrder->InstallID);
		printf("\tNotifySequence [%d]\n", pErrorConditionalOrder->NotifySequence);
		printf("\tSettlementID [%d]\n", pErrorConditionalOrder->SettlementID);
		printf("\tVolumeTraded [%d]\n", pErrorConditionalOrder->VolumeTraded);
		printf("\tVolumeTotal [%d]\n", pErrorConditionalOrder->VolumeTotal);
		printf("\tSequenceNo [%d]\n", pErrorConditionalOrder->SequenceNo);
		printf("\tFrontID [%d]\n", pErrorConditionalOrder->FrontID);
		printf("\tSessionID [%d]\n", pErrorConditionalOrder->SessionID);
		printf("\tUserForceClose [%d]\n", pErrorConditionalOrder->UserForceClose);
		printf("\tBrokerOrderSeq [%d]\n", pErrorConditionalOrder->BrokerOrderSeq);
		printf("\tZCETotalTradedVolume [%d]\n", pErrorConditionalOrder->ZCETotalTradedVolume);
		printf("\tErrorID [%d]\n", pErrorConditionalOrder->ErrorID);
		printf("\tIsSwapOrder [%d]\n", pErrorConditionalOrder->IsSwapOrder);
		printf("\tOrderPriceType [%c]\n", pErrorConditionalOrder->OrderPriceType);
		printf("\tDirection [%c]\n", pErrorConditionalOrder->Direction);
		printf("\tTimeCondition [%c]\n", pErrorConditionalOrder->TimeCondition);
		printf("\tVolumeCondition [%c]\n", pErrorConditionalOrder->VolumeCondition);
		printf("\tContingentCondition [%c]\n", pErrorConditionalOrder->ContingentCondition);
		printf("\tForceCloseReason [%c]\n", pErrorConditionalOrder->ForceCloseReason);
		printf("\tOrderSubmitStatus [%c]\n", pErrorConditionalOrder->OrderSubmitStatus);
		printf("\tOrderSource [%c]\n", pErrorConditionalOrder->OrderSource);
		printf("\tOrderStatus [%c]\n", pErrorConditionalOrder->OrderStatus);
		printf("\tOrderType [%c]\n", pErrorConditionalOrder->OrderType);
		printf("\tLimitPrice [%.8lf]\n", pErrorConditionalOrder->LimitPrice);
		printf("\tStopPrice [%.8lf]\n", pErrorConditionalOrder->StopPrice);
	}
	printf("</OnRtnErrorConditionalOrder>\n");
};
void CTraderSpi::OnRtnExecOrder(CThostFtdcExecOrderField *pExecOrder)
{
	printf("<OnRtnExecOrder>\n");
	if (pExecOrder)
	{
		printf("\tBrokerID [%s]\n", pExecOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pExecOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pExecOrder->InstrumentID);
		printf("\tExecOrderRef [%s]\n", pExecOrder->ExecOrderRef);
		printf("\tUserID [%s]\n", pExecOrder->UserID);
		printf("\tBusinessUnit [%s]\n", pExecOrder->BusinessUnit);
		printf("\tExecOrderLocalID [%s]\n", pExecOrder->ExecOrderLocalID);
		printf("\tExchangeID [%s]\n", pExecOrder->ExchangeID);
		printf("\tParticipantID [%s]\n", pExecOrder->ParticipantID);
		printf("\tClientID [%s]\n", pExecOrder->ClientID);
		printf("\tExchangeInstID [%s]\n", pExecOrder->ExchangeInstID);
		printf("\tTraderID [%s]\n", pExecOrder->TraderID);
		printf("\tTradingDay [%s]\n", pExecOrder->TradingDay);
		printf("\tExecOrderSysID [%s]\n", pExecOrder->ExecOrderSysID);
		printf("\tInsertDate [%s]\n", pExecOrder->InsertDate);
		printf("\tInsertTime [%s]\n", pExecOrder->InsertTime);
		printf("\tCancelTime [%s]\n", pExecOrder->CancelTime);
		printf("\tClearingPartID [%s]\n", pExecOrder->ClearingPartID);
		printf("\tUserProductInfo [%s]\n", pExecOrder->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pExecOrder->StatusMsg);
		printf("\tActiveUserID [%s]\n", pExecOrder->ActiveUserID);
		printf("\tBranchID [%s]\n", pExecOrder->BranchID);
		printf("\tInvestUnitID [%s]\n", pExecOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pExecOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pExecOrder->CurrencyID);
		printf("\tIPAddress [%s]\n", pExecOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pExecOrder->MacAddress);
		printf("\tVolume [%d]\n", pExecOrder->Volume);
		printf("\tRequestID [%d]\n", pExecOrder->RequestID);
		printf("\tInstallID [%d]\n", pExecOrder->InstallID);
		printf("\tNotifySequence [%d]\n", pExecOrder->NotifySequence);
		printf("\tSettlementID [%d]\n", pExecOrder->SettlementID);
		printf("\tSequenceNo [%d]\n", pExecOrder->SequenceNo);
		printf("\tFrontID [%d]\n", pExecOrder->FrontID);
		printf("\tSessionID [%d]\n", pExecOrder->SessionID);
		printf("\tBrokerExecOrderSeq [%d]\n", pExecOrder->BrokerExecOrderSeq);
		printf("\tOffsetFlag [%c]\n", pExecOrder->OffsetFlag);
		printf("\tHedgeFlag [%c]\n", pExecOrder->HedgeFlag);
		printf("\tActionType [%c]\n", pExecOrder->ActionType);
		printf("\tPosiDirection [%c]\n", pExecOrder->PosiDirection);
		printf("\tReservePositionFlag [%c]\n", pExecOrder->ReservePositionFlag);
		printf("\tCloseFlag [%c]\n", pExecOrder->CloseFlag);
		printf("\tOrderSubmitStatus [%c]\n", pExecOrder->OrderSubmitStatus);
		printf("\tExecResult [%c]\n", pExecOrder->ExecResult);
	}
	printf("</OnRtnExecOrder>\n");
};
void CTraderSpi::OnErrRtnExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnExecOrderInsert>\n");
	if (pInputExecOrder)
	{
		printf("\tBrokerID [%s]\n", pInputExecOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pInputExecOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputExecOrder->InstrumentID);
		printf("\tExecOrderRef [%s]\n", pInputExecOrder->ExecOrderRef);
		printf("\tUserID [%s]\n", pInputExecOrder->UserID);
		printf("\tBusinessUnit [%s]\n", pInputExecOrder->BusinessUnit);
		printf("\tExchangeID [%s]\n", pInputExecOrder->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputExecOrder->InvestUnitID);
		printf("\tAccountID [%s]\n", pInputExecOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pInputExecOrder->CurrencyID);
		printf("\tClientID [%s]\n", pInputExecOrder->ClientID);
		printf("\tIPAddress [%s]\n", pInputExecOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pInputExecOrder->MacAddress);
		printf("\tVolume [%d]\n", pInputExecOrder->Volume);
		printf("\tRequestID [%d]\n", pInputExecOrder->RequestID);
		printf("\tOffsetFlag [%c]\n", pInputExecOrder->OffsetFlag);
		printf("\tHedgeFlag [%c]\n", pInputExecOrder->HedgeFlag);
		printf("\tActionType [%c]\n", pInputExecOrder->ActionType);
		printf("\tPosiDirection [%c]\n", pInputExecOrder->PosiDirection);
		printf("\tReservePositionFlag [%c]\n", pInputExecOrder->ReservePositionFlag);
		printf("\tCloseFlag [%c]\n", pInputExecOrder->CloseFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnExecOrderInsert>\n");
};
void CTraderSpi::OnErrRtnExecOrderAction(CThostFtdcExecOrderActionField *pExecOrderAction, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnExecOrderAction>\n");
	if (pExecOrderAction)
	{
		printf("\tBrokerID [%s]\n", pExecOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pExecOrderAction->InvestorID);
		printf("\tExecOrderRef [%s]\n", pExecOrderAction->ExecOrderRef);
		printf("\tExchangeID [%s]\n", pExecOrderAction->ExchangeID);
		printf("\tExecOrderSysID [%s]\n", pExecOrderAction->ExecOrderSysID);
		printf("\tActionDate [%s]\n", pExecOrderAction->ActionDate);
		printf("\tActionTime [%s]\n", pExecOrderAction->ActionTime);
		printf("\tTraderID [%s]\n", pExecOrderAction->TraderID);
		printf("\tExecOrderLocalID [%s]\n", pExecOrderAction->ExecOrderLocalID);
		printf("\tActionLocalID [%s]\n", pExecOrderAction->ActionLocalID);
		printf("\tParticipantID [%s]\n", pExecOrderAction->ParticipantID);
		printf("\tClientID [%s]\n", pExecOrderAction->ClientID);
		printf("\tBusinessUnit [%s]\n", pExecOrderAction->BusinessUnit);
		printf("\tUserID [%s]\n", pExecOrderAction->UserID);
		printf("\tStatusMsg [%s]\n", pExecOrderAction->StatusMsg);
		printf("\tInstrumentID [%s]\n", pExecOrderAction->InstrumentID);
		printf("\tBranchID [%s]\n", pExecOrderAction->BranchID);
		printf("\tInvestUnitID [%s]\n", pExecOrderAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pExecOrderAction->IPAddress);
		printf("\tMacAddress [%s]\n", pExecOrderAction->MacAddress);
		printf("\tExecOrderActionRef [%d]\n", pExecOrderAction->ExecOrderActionRef);
		printf("\tRequestID [%d]\n", pExecOrderAction->RequestID);
		printf("\tFrontID [%d]\n", pExecOrderAction->FrontID);
		printf("\tSessionID [%d]\n", pExecOrderAction->SessionID);
		printf("\tInstallID [%d]\n", pExecOrderAction->InstallID);
		printf("\tActionFlag [%c]\n", pExecOrderAction->ActionFlag);
		printf("\tOrderActionStatus [%c]\n", pExecOrderAction->OrderActionStatus);
		printf("\tActionType [%c]\n", pExecOrderAction->ActionType);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnExecOrderAction>\n");
};
void CTraderSpi::OnErrRtnForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnForQuoteInsert>\n");
	if (pInputForQuote)
	{
		printf("\tBrokerID [%s]\n", pInputForQuote->BrokerID);
		printf("\tInvestorID [%s]\n", pInputForQuote->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputForQuote->InstrumentID);
		printf("\tForQuoteRef [%s]\n", pInputForQuote->ForQuoteRef);
		printf("\tUserID [%s]\n", pInputForQuote->UserID);
		printf("\tExchangeID [%s]\n", pInputForQuote->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputForQuote->InvestUnitID);
		printf("\tIPAddress [%s]\n", pInputForQuote->IPAddress);
		printf("\tMacAddress [%s]\n", pInputForQuote->MacAddress);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnForQuoteInsert>\n");
};
void CTraderSpi::OnRtnQuote(CThostFtdcQuoteField *pQuote)
{
	printf("<OnRtnQuote>\n");
	if (pQuote)
	{
		printf("\tBrokerID [%s]\n", pQuote->BrokerID);
		printf("\tInvestorID [%s]\n", pQuote->InvestorID);
		printf("\tInstrumentID [%s]\n", pQuote->InstrumentID);
		printf("\tQuoteRef [%s]\n", pQuote->QuoteRef);
		printf("\tUserID [%s]\n", pQuote->UserID);
		printf("\tBusinessUnit [%s]\n", pQuote->BusinessUnit);
		printf("\tQuoteLocalID [%s]\n", pQuote->QuoteLocalID);
		printf("\tExchangeID [%s]\n", pQuote->ExchangeID);
		printf("\tParticipantID [%s]\n", pQuote->ParticipantID);
		printf("\tClientID [%s]\n", pQuote->ClientID);
		printf("\tExchangeInstID [%s]\n", pQuote->ExchangeInstID);
		printf("\tTraderID [%s]\n", pQuote->TraderID);
		printf("\tTradingDay [%s]\n", pQuote->TradingDay);
		printf("\tQuoteSysID [%s]\n", pQuote->QuoteSysID);
		printf("\tInsertDate [%s]\n", pQuote->InsertDate);
		printf("\tInsertTime [%s]\n", pQuote->InsertTime);
		printf("\tCancelTime [%s]\n", pQuote->CancelTime);
		printf("\tClearingPartID [%s]\n", pQuote->ClearingPartID);
		printf("\tAskOrderSysID [%s]\n", pQuote->AskOrderSysID);
		printf("\tBidOrderSysID [%s]\n", pQuote->BidOrderSysID);
		printf("\tUserProductInfo [%s]\n", pQuote->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pQuote->StatusMsg);
		printf("\tActiveUserID [%s]\n", pQuote->ActiveUserID);
		printf("\tAskOrderRef [%s]\n", pQuote->AskOrderRef);
		printf("\tBidOrderRef [%s]\n", pQuote->BidOrderRef);
		printf("\tForQuoteSysID [%s]\n", pQuote->ForQuoteSysID);
		printf("\tBranchID [%s]\n", pQuote->BranchID);
		printf("\tInvestUnitID [%s]\n", pQuote->InvestUnitID);
		printf("\tAccountID [%s]\n", pQuote->AccountID);
		printf("\tCurrencyID [%s]\n", pQuote->CurrencyID);
		printf("\tIPAddress [%s]\n", pQuote->IPAddress);
		printf("\tMacAddress [%s]\n", pQuote->MacAddress);
		printf("\tAskVolume [%d]\n", pQuote->AskVolume);
		printf("\tBidVolume [%d]\n", pQuote->BidVolume);
		printf("\tRequestID [%d]\n", pQuote->RequestID);
		printf("\tInstallID [%d]\n", pQuote->InstallID);
		printf("\tNotifySequence [%d]\n", pQuote->NotifySequence);
		printf("\tSettlementID [%d]\n", pQuote->SettlementID);
		printf("\tSequenceNo [%d]\n", pQuote->SequenceNo);
		printf("\tFrontID [%d]\n", pQuote->FrontID);
		printf("\tSessionID [%d]\n", pQuote->SessionID);
		printf("\tBrokerQuoteSeq [%d]\n", pQuote->BrokerQuoteSeq);
		printf("\tAskOffsetFlag [%c]\n", pQuote->AskOffsetFlag);
		printf("\tBidOffsetFlag [%c]\n", pQuote->BidOffsetFlag);
		printf("\tAskHedgeFlag [%c]\n", pQuote->AskHedgeFlag);
		printf("\tBidHedgeFlag [%c]\n", pQuote->BidHedgeFlag);
		printf("\tOrderSubmitStatus [%c]\n", pQuote->OrderSubmitStatus);
		printf("\tQuoteStatus [%c]\n", pQuote->QuoteStatus);
		printf("\tAskPrice [%.8lf]\n", pQuote->AskPrice);
		printf("\tBidPrice [%.8lf]\n", pQuote->BidPrice);
	}
	printf("</OnRtnQuote>\n");
};
void CTraderSpi::OnErrRtnQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnQuoteInsert>\n");
	if (pInputQuote)
	{
		printf("\tBrokerID [%s]\n", pInputQuote->BrokerID);
		printf("\tInvestorID [%s]\n", pInputQuote->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputQuote->InstrumentID);
		printf("\tQuoteRef [%s]\n", pInputQuote->QuoteRef);
		printf("\tUserID [%s]\n", pInputQuote->UserID);
		printf("\tBusinessUnit [%s]\n", pInputQuote->BusinessUnit);
		printf("\tAskOrderRef [%s]\n", pInputQuote->AskOrderRef);
		printf("\tBidOrderRef [%s]\n", pInputQuote->BidOrderRef);
		printf("\tForQuoteSysID [%s]\n", pInputQuote->ForQuoteSysID);
		printf("\tExchangeID [%s]\n", pInputQuote->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputQuote->InvestUnitID);
		printf("\tClientID [%s]\n", pInputQuote->ClientID);
		printf("\tIPAddress [%s]\n", pInputQuote->IPAddress);
		printf("\tMacAddress [%s]\n", pInputQuote->MacAddress);
		printf("\tAskVolume [%d]\n", pInputQuote->AskVolume);
		printf("\tBidVolume [%d]\n", pInputQuote->BidVolume);
		printf("\tRequestID [%d]\n", pInputQuote->RequestID);
		printf("\tAskOffsetFlag [%c]\n", pInputQuote->AskOffsetFlag);
		printf("\tBidOffsetFlag [%c]\n", pInputQuote->BidOffsetFlag);
		printf("\tAskHedgeFlag [%c]\n", pInputQuote->AskHedgeFlag);
		printf("\tBidHedgeFlag [%c]\n", pInputQuote->BidHedgeFlag);
		printf("\tAskPrice [%.8lf]\n", pInputQuote->AskPrice);
		printf("\tBidPrice [%.8lf]\n", pInputQuote->BidPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnQuoteInsert>\n");
};
void CTraderSpi::OnErrRtnQuoteAction(CThostFtdcQuoteActionField *pQuoteAction, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnQuoteAction>\n");
	if (pQuoteAction)
	{
		printf("\tBrokerID [%s]\n", pQuoteAction->BrokerID);
		printf("\tInvestorID [%s]\n", pQuoteAction->InvestorID);
		printf("\tQuoteRef [%s]\n", pQuoteAction->QuoteRef);
		printf("\tExchangeID [%s]\n", pQuoteAction->ExchangeID);
		printf("\tQuoteSysID [%s]\n", pQuoteAction->QuoteSysID);
		printf("\tActionDate [%s]\n", pQuoteAction->ActionDate);
		printf("\tActionTime [%s]\n", pQuoteAction->ActionTime);
		printf("\tTraderID [%s]\n", pQuoteAction->TraderID);
		printf("\tQuoteLocalID [%s]\n", pQuoteAction->QuoteLocalID);
		printf("\tActionLocalID [%s]\n", pQuoteAction->ActionLocalID);
		printf("\tParticipantID [%s]\n", pQuoteAction->ParticipantID);
		printf("\tClientID [%s]\n", pQuoteAction->ClientID);
		printf("\tBusinessUnit [%s]\n", pQuoteAction->BusinessUnit);
		printf("\tUserID [%s]\n", pQuoteAction->UserID);
		printf("\tStatusMsg [%s]\n", pQuoteAction->StatusMsg);
		printf("\tInstrumentID [%s]\n", pQuoteAction->InstrumentID);
		printf("\tBranchID [%s]\n", pQuoteAction->BranchID);
		printf("\tInvestUnitID [%s]\n", pQuoteAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pQuoteAction->IPAddress);
		printf("\tMacAddress [%s]\n", pQuoteAction->MacAddress);
		printf("\tQuoteActionRef [%d]\n", pQuoteAction->QuoteActionRef);
		printf("\tRequestID [%d]\n", pQuoteAction->RequestID);
		printf("\tFrontID [%d]\n", pQuoteAction->FrontID);
		printf("\tSessionID [%d]\n", pQuoteAction->SessionID);
		printf("\tInstallID [%d]\n", pQuoteAction->InstallID);
		printf("\tActionFlag [%c]\n", pQuoteAction->ActionFlag);
		printf("\tOrderActionStatus [%c]\n", pQuoteAction->OrderActionStatus);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnQuoteAction>\n");
};
void CTraderSpi::OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp)
{
	printf("<OnRtnForQuoteRsp>\n");
	if (pForQuoteRsp)
	{
		printf("\tTradingDay [%s]\n", pForQuoteRsp->TradingDay);
		printf("\tInstrumentID [%s]\n", pForQuoteRsp->InstrumentID);
		printf("\tForQuoteSysID [%s]\n", pForQuoteRsp->ForQuoteSysID);
		printf("\tForQuoteTime [%s]\n", pForQuoteRsp->ForQuoteTime);
		printf("\tActionDay [%s]\n", pForQuoteRsp->ActionDay);
		printf("\tExchangeID [%s]\n", pForQuoteRsp->ExchangeID);
	}
	printf("</OnRtnForQuoteRsp>\n");
};
void CTraderSpi::OnRtnCFMMCTradingAccountToken(CThostFtdcCFMMCTradingAccountTokenField *pCFMMCTradingAccountToken)
{
	printf("<OnRtnCFMMCTradingAccountToken>\n");
	if (pCFMMCTradingAccountToken)
	{
		printf("\tBrokerID [%s]\n", pCFMMCTradingAccountToken->BrokerID);
		printf("\tParticipantID [%s]\n", pCFMMCTradingAccountToken->ParticipantID);
		printf("\tAccountID [%s]\n", pCFMMCTradingAccountToken->AccountID);
		printf("\tToken [%s]\n", pCFMMCTradingAccountToken->Token);
		printf("\tKeyID [%d]\n", pCFMMCTradingAccountToken->KeyID);
	}
	printf("</OnRtnCFMMCTradingAccountToken>\n");
};
void CTraderSpi::OnErrRtnBatchOrderAction(CThostFtdcBatchOrderActionField *pBatchOrderAction, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnBatchOrderAction>\n");
	if (pBatchOrderAction)
	{
		printf("\tBrokerID [%s]\n", pBatchOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pBatchOrderAction->InvestorID);
		printf("\tExchangeID [%s]\n", pBatchOrderAction->ExchangeID);
		printf("\tActionDate [%s]\n", pBatchOrderAction->ActionDate);
		printf("\tActionTime [%s]\n", pBatchOrderAction->ActionTime);
		printf("\tTraderID [%s]\n", pBatchOrderAction->TraderID);
		printf("\tActionLocalID [%s]\n", pBatchOrderAction->ActionLocalID);
		printf("\tParticipantID [%s]\n", pBatchOrderAction->ParticipantID);
		printf("\tClientID [%s]\n", pBatchOrderAction->ClientID);
		printf("\tBusinessUnit [%s]\n", pBatchOrderAction->BusinessUnit);
		printf("\tUserID [%s]\n", pBatchOrderAction->UserID);
		printf("\tStatusMsg [%s]\n", pBatchOrderAction->StatusMsg);
		printf("\tInvestUnitID [%s]\n", pBatchOrderAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pBatchOrderAction->IPAddress);
		printf("\tMacAddress [%s]\n", pBatchOrderAction->MacAddress);
		printf("\tOrderActionRef [%d]\n", pBatchOrderAction->OrderActionRef);
		printf("\tRequestID [%d]\n", pBatchOrderAction->RequestID);
		printf("\tFrontID [%d]\n", pBatchOrderAction->FrontID);
		printf("\tSessionID [%d]\n", pBatchOrderAction->SessionID);
		printf("\tInstallID [%d]\n", pBatchOrderAction->InstallID);
		printf("\tOrderActionStatus [%c]\n", pBatchOrderAction->OrderActionStatus);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnBatchOrderAction>\n");
};
void CTraderSpi::OnRtnOptionSelfClose(CThostFtdcOptionSelfCloseField *pOptionSelfClose)
{
	printf("<OnRtnOptionSelfClose>\n");
	if (pOptionSelfClose)
	{
		printf("\tBrokerID [%s]\n", pOptionSelfClose->BrokerID);
		printf("\tInvestorID [%s]\n", pOptionSelfClose->InvestorID);
		printf("\tInstrumentID [%s]\n", pOptionSelfClose->InstrumentID);
		printf("\tOptionSelfCloseRef [%s]\n", pOptionSelfClose->OptionSelfCloseRef);
		printf("\tUserID [%s]\n", pOptionSelfClose->UserID);
		printf("\tBusinessUnit [%s]\n", pOptionSelfClose->BusinessUnit);
		printf("\tOptionSelfCloseLocalID [%s]\n", pOptionSelfClose->OptionSelfCloseLocalID);
		printf("\tExchangeID [%s]\n", pOptionSelfClose->ExchangeID);
		printf("\tParticipantID [%s]\n", pOptionSelfClose->ParticipantID);
		printf("\tClientID [%s]\n", pOptionSelfClose->ClientID);
		printf("\tExchangeInstID [%s]\n", pOptionSelfClose->ExchangeInstID);
		printf("\tTraderID [%s]\n", pOptionSelfClose->TraderID);
		printf("\tTradingDay [%s]\n", pOptionSelfClose->TradingDay);
		printf("\tOptionSelfCloseSysID [%s]\n", pOptionSelfClose->OptionSelfCloseSysID);
		printf("\tInsertDate [%s]\n", pOptionSelfClose->InsertDate);
		printf("\tInsertTime [%s]\n", pOptionSelfClose->InsertTime);
		printf("\tCancelTime [%s]\n", pOptionSelfClose->CancelTime);
		printf("\tClearingPartID [%s]\n", pOptionSelfClose->ClearingPartID);
		printf("\tUserProductInfo [%s]\n", pOptionSelfClose->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pOptionSelfClose->StatusMsg);
		printf("\tActiveUserID [%s]\n", pOptionSelfClose->ActiveUserID);
		printf("\tBranchID [%s]\n", pOptionSelfClose->BranchID);
		printf("\tInvestUnitID [%s]\n", pOptionSelfClose->InvestUnitID);
		printf("\tAccountID [%s]\n", pOptionSelfClose->AccountID);
		printf("\tCurrencyID [%s]\n", pOptionSelfClose->CurrencyID);
		printf("\tIPAddress [%s]\n", pOptionSelfClose->IPAddress);
		printf("\tMacAddress [%s]\n", pOptionSelfClose->MacAddress);
		printf("\tVolume [%d]\n", pOptionSelfClose->Volume);
		printf("\tRequestID [%d]\n", pOptionSelfClose->RequestID);
		printf("\tInstallID [%d]\n", pOptionSelfClose->InstallID);
		printf("\tNotifySequence [%d]\n", pOptionSelfClose->NotifySequence);
		printf("\tSettlementID [%d]\n", pOptionSelfClose->SettlementID);
		printf("\tSequenceNo [%d]\n", pOptionSelfClose->SequenceNo);
		printf("\tFrontID [%d]\n", pOptionSelfClose->FrontID);
		printf("\tSessionID [%d]\n", pOptionSelfClose->SessionID);
		printf("\tBrokerOptionSelfCloseSeq [%d]\n", pOptionSelfClose->BrokerOptionSelfCloseSeq);
		printf("\tHedgeFlag [%c]\n", pOptionSelfClose->HedgeFlag);
		printf("\tOptSelfCloseFlag [%c]\n", pOptionSelfClose->OptSelfCloseFlag);
		printf("\tOrderSubmitStatus [%c]\n", pOptionSelfClose->OrderSubmitStatus);
		printf("\tExecResult [%c]\n", pOptionSelfClose->ExecResult);
	}
	printf("</OnRtnOptionSelfClose>\n");
};
void CTraderSpi::OnErrRtnOptionSelfCloseInsert(CThostFtdcInputOptionSelfCloseField *pInputOptionSelfClose, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnOptionSelfCloseInsert>\n");
	if (pInputOptionSelfClose)
	{
		printf("\tBrokerID [%s]\n", pInputOptionSelfClose->BrokerID);
		printf("\tInvestorID [%s]\n", pInputOptionSelfClose->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputOptionSelfClose->InstrumentID);
		printf("\tOptionSelfCloseRef [%s]\n", pInputOptionSelfClose->OptionSelfCloseRef);
		printf("\tUserID [%s]\n", pInputOptionSelfClose->UserID);
		printf("\tBusinessUnit [%s]\n", pInputOptionSelfClose->BusinessUnit);
		printf("\tExchangeID [%s]\n", pInputOptionSelfClose->ExchangeID);
		printf("\tInvestUnitID [%s]\n", pInputOptionSelfClose->InvestUnitID);
		printf("\tAccountID [%s]\n", pInputOptionSelfClose->AccountID);
		printf("\tCurrencyID [%s]\n", pInputOptionSelfClose->CurrencyID);
		printf("\tClientID [%s]\n", pInputOptionSelfClose->ClientID);
		printf("\tIPAddress [%s]\n", pInputOptionSelfClose->IPAddress);
		printf("\tMacAddress [%s]\n", pInputOptionSelfClose->MacAddress);
		printf("\tVolume [%d]\n", pInputOptionSelfClose->Volume);
		printf("\tRequestID [%d]\n", pInputOptionSelfClose->RequestID);
		printf("\tHedgeFlag [%c]\n", pInputOptionSelfClose->HedgeFlag);
		printf("\tOptSelfCloseFlag [%c]\n", pInputOptionSelfClose->OptSelfCloseFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnOptionSelfCloseInsert>\n");
};
void CTraderSpi::OnErrRtnOptionSelfCloseAction(CThostFtdcOptionSelfCloseActionField *pOptionSelfCloseAction, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnOptionSelfCloseAction>\n");
	if (pOptionSelfCloseAction)
	{
		printf("\tBrokerID [%s]\n", pOptionSelfCloseAction->BrokerID);
		printf("\tInvestorID [%s]\n", pOptionSelfCloseAction->InvestorID);
		printf("\tOptionSelfCloseRef [%s]\n", pOptionSelfCloseAction->OptionSelfCloseRef);
		printf("\tExchangeID [%s]\n", pOptionSelfCloseAction->ExchangeID);
		printf("\tOptionSelfCloseSysID [%s]\n", pOptionSelfCloseAction->OptionSelfCloseSysID);
		printf("\tActionDate [%s]\n", pOptionSelfCloseAction->ActionDate);
		printf("\tActionTime [%s]\n", pOptionSelfCloseAction->ActionTime);
		printf("\tTraderID [%s]\n", pOptionSelfCloseAction->TraderID);
		printf("\tOptionSelfCloseLocalID [%s]\n", pOptionSelfCloseAction->OptionSelfCloseLocalID);
		printf("\tActionLocalID [%s]\n", pOptionSelfCloseAction->ActionLocalID);
		printf("\tParticipantID [%s]\n", pOptionSelfCloseAction->ParticipantID);
		printf("\tClientID [%s]\n", pOptionSelfCloseAction->ClientID);
		printf("\tBusinessUnit [%s]\n", pOptionSelfCloseAction->BusinessUnit);
		printf("\tUserID [%s]\n", pOptionSelfCloseAction->UserID);
		printf("\tStatusMsg [%s]\n", pOptionSelfCloseAction->StatusMsg);
		printf("\tInstrumentID [%s]\n", pOptionSelfCloseAction->InstrumentID);
		printf("\tBranchID [%s]\n", pOptionSelfCloseAction->BranchID);
		printf("\tInvestUnitID [%s]\n", pOptionSelfCloseAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pOptionSelfCloseAction->IPAddress);
		printf("\tMacAddress [%s]\n", pOptionSelfCloseAction->MacAddress);
		printf("\tOptionSelfCloseActionRef [%d]\n", pOptionSelfCloseAction->OptionSelfCloseActionRef);
		printf("\tRequestID [%d]\n", pOptionSelfCloseAction->RequestID);
		printf("\tFrontID [%d]\n", pOptionSelfCloseAction->FrontID);
		printf("\tSessionID [%d]\n", pOptionSelfCloseAction->SessionID);
		printf("\tInstallID [%d]\n", pOptionSelfCloseAction->InstallID);
		printf("\tActionFlag [%c]\n", pOptionSelfCloseAction->ActionFlag);
		printf("\tOrderActionStatus [%c]\n", pOptionSelfCloseAction->OrderActionStatus);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnOptionSelfCloseAction>\n");
};
void CTraderSpi::OnRtnCombAction(CThostFtdcCombActionField *pCombAction)
{
	printf("<OnRtnCombAction>\n");
	if (pCombAction)
	{
		printf("\tBrokerID [%s]\n", pCombAction->BrokerID);
		printf("\tInvestorID [%s]\n", pCombAction->InvestorID);
		printf("\tInstrumentID [%s]\n", pCombAction->InstrumentID);
		printf("\tCombActionRef [%s]\n", pCombAction->CombActionRef);
		printf("\tUserID [%s]\n", pCombAction->UserID);
		printf("\tActionLocalID [%s]\n", pCombAction->ActionLocalID);
		printf("\tExchangeID [%s]\n", pCombAction->ExchangeID);
		printf("\tParticipantID [%s]\n", pCombAction->ParticipantID);
		printf("\tClientID [%s]\n", pCombAction->ClientID);
		printf("\tExchangeInstID [%s]\n", pCombAction->ExchangeInstID);
		printf("\tTraderID [%s]\n", pCombAction->TraderID);
		printf("\tTradingDay [%s]\n", pCombAction->TradingDay);
		printf("\tUserProductInfo [%s]\n", pCombAction->UserProductInfo);
		printf("\tStatusMsg [%s]\n", pCombAction->StatusMsg);
		printf("\tIPAddress [%s]\n", pCombAction->IPAddress);
		printf("\tMacAddress [%s]\n", pCombAction->MacAddress);
		printf("\tComTradeID [%s]\n", pCombAction->ComTradeID);
		printf("\tBranchID [%s]\n", pCombAction->BranchID);
		printf("\tInvestUnitID [%s]\n", pCombAction->InvestUnitID);
		printf("\tVolume [%d]\n", pCombAction->Volume);
		printf("\tInstallID [%d]\n", pCombAction->InstallID);
		printf("\tNotifySequence [%d]\n", pCombAction->NotifySequence);
		printf("\tSettlementID [%d]\n", pCombAction->SettlementID);
		printf("\tSequenceNo [%d]\n", pCombAction->SequenceNo);
		printf("\tFrontID [%d]\n", pCombAction->FrontID);
		printf("\tSessionID [%d]\n", pCombAction->SessionID);
		printf("\tDirection [%c]\n", pCombAction->Direction);
		printf("\tCombDirection [%c]\n", pCombAction->CombDirection);
		printf("\tHedgeFlag [%c]\n", pCombAction->HedgeFlag);
		printf("\tActionStatus [%c]\n", pCombAction->ActionStatus);
	}
	printf("</OnRtnCombAction>\n");
};
void CTraderSpi::OnErrRtnCombActionInsert(CThostFtdcInputCombActionField *pInputCombAction, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnCombActionInsert>\n");
	if (pInputCombAction)
	{
		printf("\tBrokerID [%s]\n", pInputCombAction->BrokerID);
		printf("\tInvestorID [%s]\n", pInputCombAction->InvestorID);
		printf("\tInstrumentID [%s]\n", pInputCombAction->InstrumentID);
		printf("\tCombActionRef [%s]\n", pInputCombAction->CombActionRef);
		printf("\tUserID [%s]\n", pInputCombAction->UserID);
		printf("\tExchangeID [%s]\n", pInputCombAction->ExchangeID);
		printf("\tIPAddress [%s]\n", pInputCombAction->IPAddress);
		printf("\tMacAddress [%s]\n", pInputCombAction->MacAddress);
		printf("\tInvestUnitID [%s]\n", pInputCombAction->InvestUnitID);
		printf("\tVolume [%d]\n", pInputCombAction->Volume);
		printf("\tDirection [%c]\n", pInputCombAction->Direction);
		printf("\tCombDirection [%c]\n", pInputCombAction->CombDirection);
		printf("\tHedgeFlag [%c]\n", pInputCombAction->HedgeFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnCombActionInsert>\n");
};
void CTraderSpi::OnRspQryContractBank(CThostFtdcContractBankField *pContractBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryContractBank>\n");
	if (pContractBank)
	{
		printf("\tBrokerID [%s]\n", pContractBank->BrokerID);
		printf("\tBankID [%s]\n", pContractBank->BankID);
		printf("\tBankBrchID [%s]\n", pContractBank->BankBrchID);
		printf("\tBankName [%s]\n", pContractBank->BankName);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryContractBank>\n");
};

void CTraderSpi::OnRspQryParkedOrder(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryParkedOrder>\n");
	if (pParkedOrder)
	{
		printf("\tBrokerID [%s]\n", pParkedOrder->BrokerID);
		printf("\tInvestorID [%s]\n", pParkedOrder->InvestorID);
		printf("\tInstrumentID [%s]\n", pParkedOrder->InstrumentID);
		printf("\tOrderRef [%s]\n", pParkedOrder->OrderRef);
		printf("\tUserID [%s]\n", pParkedOrder->UserID);
		printf("\tCombOffsetFlag [%s]\n", pParkedOrder->CombOffsetFlag);
		printf("\tCombHedgeFlag [%s]\n", pParkedOrder->CombHedgeFlag);
		printf("\tGTDDate [%s]\n", pParkedOrder->GTDDate);
		printf("\tBusinessUnit [%s]\n", pParkedOrder->BusinessUnit);
		printf("\tExchangeID [%s]\n", pParkedOrder->ExchangeID);
		printf("\tParkedOrderID [%s]\n", pParkedOrder->ParkedOrderID);
		printf("\tErrorMsg [%s]\n", pParkedOrder->ErrorMsg);
		printf("\tAccountID [%s]\n", pParkedOrder->AccountID);
		printf("\tCurrencyID [%s]\n", pParkedOrder->CurrencyID);
		printf("\tClientID [%s]\n", pParkedOrder->ClientID);
		printf("\tInvestUnitID [%s]\n", pParkedOrder->InvestUnitID);
		printf("\tIPAddress [%s]\n", pParkedOrder->IPAddress);
		printf("\tMacAddress [%s]\n", pParkedOrder->MacAddress);
		printf("\tVolumeTotalOriginal [%d]\n", pParkedOrder->VolumeTotalOriginal);
		printf("\tMinVolume [%d]\n", pParkedOrder->MinVolume);
		printf("\tIsAutoSuspend [%d]\n", pParkedOrder->IsAutoSuspend);
		printf("\tRequestID [%d]\n", pParkedOrder->RequestID);
		printf("\tUserForceClose [%d]\n", pParkedOrder->UserForceClose);
		printf("\tErrorID [%d]\n", pParkedOrder->ErrorID);
		printf("\tIsSwapOrder [%d]\n", pParkedOrder->IsSwapOrder);
		printf("\tOrderPriceType [%c]\n", pParkedOrder->OrderPriceType);
		printf("\tDirection [%c]\n", pParkedOrder->Direction);
		printf("\tTimeCondition [%c]\n", pParkedOrder->TimeCondition);
		printf("\tVolumeCondition [%c]\n", pParkedOrder->VolumeCondition);
		printf("\tContingentCondition [%c]\n", pParkedOrder->ContingentCondition);
		printf("\tForceCloseReason [%c]\n", pParkedOrder->ForceCloseReason);
		printf("\tUserType [%c]\n", pParkedOrder->UserType);
		printf("\tStatus [%c]\n", pParkedOrder->Status);
		printf("\tLimitPrice [%.8lf]\n", pParkedOrder->LimitPrice);
		printf("\tStopPrice [%.8lf]\n", pParkedOrder->StopPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryParkedOrder>\n");
};

void CTraderSpi::OnRspQryParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryParkedOrderAction>\n");
	if (pParkedOrderAction)
	{
		printf("\tBrokerID [%s]\n", pParkedOrderAction->BrokerID);
		printf("\tInvestorID [%s]\n", pParkedOrderAction->InvestorID);
		printf("\tOrderRef [%s]\n", pParkedOrderAction->OrderRef);
		printf("\tExchangeID [%s]\n", pParkedOrderAction->ExchangeID);
		printf("\tOrderSysID [%s]\n", pParkedOrderAction->OrderSysID);
		printf("\tUserID [%s]\n", pParkedOrderAction->UserID);
		printf("\tInstrumentID [%s]\n", pParkedOrderAction->InstrumentID);
		printf("\tParkedOrderActionID [%s]\n", pParkedOrderAction->ParkedOrderActionID);
		printf("\tErrorMsg [%s]\n", pParkedOrderAction->ErrorMsg);
		printf("\tInvestUnitID [%s]\n", pParkedOrderAction->InvestUnitID);
		printf("\tIPAddress [%s]\n", pParkedOrderAction->IPAddress);
		printf("\tMacAddress [%s]\n", pParkedOrderAction->MacAddress);
		printf("\tOrderActionRef [%d]\n", pParkedOrderAction->OrderActionRef);
		printf("\tRequestID [%d]\n", pParkedOrderAction->RequestID);
		printf("\tFrontID [%d]\n", pParkedOrderAction->FrontID);
		printf("\tSessionID [%d]\n", pParkedOrderAction->SessionID);
		printf("\tVolumeChange [%d]\n", pParkedOrderAction->VolumeChange);
		printf("\tErrorID [%d]\n", pParkedOrderAction->ErrorID);
		printf("\tActionFlag [%c]\n", pParkedOrderAction->ActionFlag);
		printf("\tUserType [%c]\n", pParkedOrderAction->UserType);
		printf("\tStatus [%c]\n", pParkedOrderAction->Status);
		printf("\tLimitPrice [%.8lf]\n", pParkedOrderAction->LimitPrice);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryParkedOrderAction>\n");
};

void CTraderSpi::OnRspQryTradingNotice(CThostFtdcTradingNoticeField *pTradingNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryTradingNotice>\n");
	if (pTradingNotice)
	{
		printf("\tBrokerID [%s]\n", pTradingNotice->BrokerID);
		printf("\tInvestorID [%s]\n", pTradingNotice->InvestorID);
		printf("\tUserID [%s]\n", pTradingNotice->UserID);
		printf("\tSendTime [%s]\n", pTradingNotice->SendTime);
		printf("\tFieldContent [%s]\n", pTradingNotice->FieldContent);
		printf("\tInvestUnitID [%s]\n", pTradingNotice->InvestUnitID);
		printf("\tSequenceNo [%d]\n", pTradingNotice->SequenceNo);
		printf("\tInvestorRange [%c]\n", pTradingNotice->InvestorRange);
		printf("\tSequenceSeries [%d]\n", pTradingNotice->SequenceSeries);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryTradingNotice>\n");
};

void CTraderSpi::OnRspQryBrokerTradingParams(CThostFtdcBrokerTradingParamsField *pBrokerTradingParams, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryBrokerTradingParams>\n");
	if (pBrokerTradingParams)
	{
		printf("\tBrokerID [%s]\n", pBrokerTradingParams->BrokerID);
		printf("\tInvestorID [%s]\n", pBrokerTradingParams->InvestorID);
		printf("\tCurrencyID [%s]\n", pBrokerTradingParams->CurrencyID);
		printf("\tAccountID [%s]\n", pBrokerTradingParams->AccountID);
		printf("\tMarginPriceType [%c]\n", pBrokerTradingParams->MarginPriceType);
		printf("\tAlgorithm [%c]\n", pBrokerTradingParams->Algorithm);
		printf("\tAvailIncludeCloseProfit [%c]\n", pBrokerTradingParams->AvailIncludeCloseProfit);
		printf("\tOptionRoyaltyPriceType [%c]\n", pBrokerTradingParams->OptionRoyaltyPriceType);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryBrokerTradingParams>\n");
};

void CTraderSpi::OnRspQryBrokerTradingAlgos(CThostFtdcBrokerTradingAlgosField *pBrokerTradingAlgos, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQryBrokerTradingAlgos>\n");
	if (pBrokerTradingAlgos)
	{
		printf("\tBrokerID [%s]\n", pBrokerTradingAlgos->BrokerID);
		printf("\tExchangeID [%s]\n", pBrokerTradingAlgos->ExchangeID);
		printf("\tInstrumentID [%s]\n", pBrokerTradingAlgos->InstrumentID);
		printf("\tHandlePositionAlgoID [%c]\n", pBrokerTradingAlgos->HandlePositionAlgoID);
		printf("\tFindMarginRateAlgoID [%c]\n", pBrokerTradingAlgos->FindMarginRateAlgoID);
		printf("\tHandleTradingAccountAlgoID [%c]\n", pBrokerTradingAlgos->HandleTradingAccountAlgoID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQryBrokerTradingAlgos>\n");
};

void CTraderSpi::OnRspQueryCFMMCTradingAccountToken(CThostFtdcQueryCFMMCTradingAccountTokenField *pQueryCFMMCTradingAccountToken, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQueryCFMMCTradingAccountToken>\n");
	if (pQueryCFMMCTradingAccountToken)
	{
		printf("\tBrokerID [%s]\n", pQueryCFMMCTradingAccountToken->BrokerID);
		printf("\tInvestorID [%s]\n", pQueryCFMMCTradingAccountToken->InvestorID);
		printf("\tInvestUnitID [%s]\n", pQueryCFMMCTradingAccountToken->InvestUnitID);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQueryCFMMCTradingAccountToken>\n");
};

void CTraderSpi::OnRtnFromBankToFutureByBank(CThostFtdcRspTransferField *pRspTransfer)
{
	printf("<OnRtnFromBankToFutureByBank>\n");
	if (pRspTransfer)
	{
		printf("\tTradeCode [%s]\n", pRspTransfer->TradeCode);
		printf("\tBankID [%s]\n", pRspTransfer->BankID);
		printf("\tBankBranchID [%s]\n", pRspTransfer->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspTransfer->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspTransfer->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspTransfer->TradeDate);
		printf("\tTradeTime [%s]\n", pRspTransfer->TradeTime);
		printf("\tBankSerial [%s]\n", pRspTransfer->BankSerial);
		printf("\tTradingDay [%s]\n", pRspTransfer->TradingDay);
		printf("\tCustomerName [%s]\n", pRspTransfer->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspTransfer->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspTransfer->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspTransfer->BankPassWord);
		printf("\tAccountID [%s]\n", pRspTransfer->AccountID);
		printf("\tPassword [%s]\n", pRspTransfer->Password);
		printf("\tUserID [%s]\n", pRspTransfer->UserID);
		printf("\tCurrencyID [%s]\n", pRspTransfer->CurrencyID);
		printf("\tMessage [%s]\n", pRspTransfer->Message);
		printf("\tDigest [%s]\n", pRspTransfer->Digest);
		printf("\tDeviceID [%s]\n", pRspTransfer->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspTransfer->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspTransfer->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspTransfer->OperNo);
		printf("\tErrorMsg [%s]\n", pRspTransfer->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspTransfer->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pRspTransfer->PlateSerial);
		printf("\tSessionID [%d]\n", pRspTransfer->SessionID);
		printf("\tInstallID [%d]\n", pRspTransfer->InstallID);
		printf("\tFutureSerial [%d]\n", pRspTransfer->FutureSerial);
		printf("\tRequestID [%d]\n", pRspTransfer->RequestID);
		printf("\tTID [%d]\n", pRspTransfer->TID);
		printf("\tErrorID [%d]\n", pRspTransfer->ErrorID);
		printf("\tLastFragment [%c]\n", pRspTransfer->LastFragment);
		printf("\tIdCardType [%c]\n", pRspTransfer->IdCardType);
		printf("\tCustType [%c]\n", pRspTransfer->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspTransfer->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspTransfer->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspTransfer->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspTransfer->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspTransfer->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspTransfer->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspTransfer->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspTransfer->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspTransfer->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspTransfer->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspTransfer->BrokerFee);
	}
	printf("</OnRtnFromBankToFutureByBank>\n");
};
void CTraderSpi::OnRtnFromFutureToBankByBank(CThostFtdcRspTransferField *pRspTransfer)
{
	printf("<OnRtnFromFutureToBankByBank>\n");
	if (pRspTransfer)
	{
		printf("\tTradeCode [%s]\n", pRspTransfer->TradeCode);
		printf("\tBankID [%s]\n", pRspTransfer->BankID);
		printf("\tBankBranchID [%s]\n", pRspTransfer->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspTransfer->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspTransfer->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspTransfer->TradeDate);
		printf("\tTradeTime [%s]\n", pRspTransfer->TradeTime);
		printf("\tBankSerial [%s]\n", pRspTransfer->BankSerial);
		printf("\tTradingDay [%s]\n", pRspTransfer->TradingDay);
		printf("\tCustomerName [%s]\n", pRspTransfer->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspTransfer->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspTransfer->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspTransfer->BankPassWord);
		printf("\tAccountID [%s]\n", pRspTransfer->AccountID);
		printf("\tPassword [%s]\n", pRspTransfer->Password);
		printf("\tUserID [%s]\n", pRspTransfer->UserID);
		printf("\tCurrencyID [%s]\n", pRspTransfer->CurrencyID);
		printf("\tMessage [%s]\n", pRspTransfer->Message);
		printf("\tDigest [%s]\n", pRspTransfer->Digest);
		printf("\tDeviceID [%s]\n", pRspTransfer->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspTransfer->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspTransfer->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspTransfer->OperNo);
		printf("\tErrorMsg [%s]\n", pRspTransfer->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspTransfer->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pRspTransfer->PlateSerial);
		printf("\tSessionID [%d]\n", pRspTransfer->SessionID);
		printf("\tInstallID [%d]\n", pRspTransfer->InstallID);
		printf("\tFutureSerial [%d]\n", pRspTransfer->FutureSerial);
		printf("\tRequestID [%d]\n", pRspTransfer->RequestID);
		printf("\tTID [%d]\n", pRspTransfer->TID);
		printf("\tErrorID [%d]\n", pRspTransfer->ErrorID);
		printf("\tLastFragment [%c]\n", pRspTransfer->LastFragment);
		printf("\tIdCardType [%c]\n", pRspTransfer->IdCardType);
		printf("\tCustType [%c]\n", pRspTransfer->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspTransfer->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspTransfer->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspTransfer->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspTransfer->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspTransfer->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspTransfer->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspTransfer->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspTransfer->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspTransfer->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspTransfer->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspTransfer->BrokerFee);
	}
	printf("</OnRtnFromFutureToBankByBank>\n");
};
void CTraderSpi::OnRtnRepealFromBankToFutureByBank(CThostFtdcRspRepealField *pRspRepeal)
{
	printf("<OnRtnRepealFromBankToFutureByBank>\n");
	if (pRspRepeal)
	{
		printf("\tBankRepealSerial [%s]\n", pRspRepeal->BankRepealSerial);
		printf("\tTradeCode [%s]\n", pRspRepeal->TradeCode);
		printf("\tBankID [%s]\n", pRspRepeal->BankID);
		printf("\tBankBranchID [%s]\n", pRspRepeal->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspRepeal->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspRepeal->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspRepeal->TradeDate);
		printf("\tTradeTime [%s]\n", pRspRepeal->TradeTime);
		printf("\tBankSerial [%s]\n", pRspRepeal->BankSerial);
		printf("\tTradingDay [%s]\n", pRspRepeal->TradingDay);
		printf("\tCustomerName [%s]\n", pRspRepeal->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspRepeal->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspRepeal->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspRepeal->BankPassWord);
		printf("\tAccountID [%s]\n", pRspRepeal->AccountID);
		printf("\tPassword [%s]\n", pRspRepeal->Password);
		printf("\tUserID [%s]\n", pRspRepeal->UserID);
		printf("\tCurrencyID [%s]\n", pRspRepeal->CurrencyID);
		printf("\tMessage [%s]\n", pRspRepeal->Message);
		printf("\tDigest [%s]\n", pRspRepeal->Digest);
		printf("\tDeviceID [%s]\n", pRspRepeal->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspRepeal->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspRepeal->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspRepeal->OperNo);
		printf("\tErrorMsg [%s]\n", pRspRepeal->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspRepeal->LongCustomerName);
		printf("\tRepealTimeInterval [%d]\n", pRspRepeal->RepealTimeInterval);
		printf("\tRepealedTimes [%d]\n", pRspRepeal->RepealedTimes);
		printf("\tPlateRepealSerial [%d]\n", pRspRepeal->PlateRepealSerial);
		printf("\tFutureRepealSerial [%d]\n", pRspRepeal->FutureRepealSerial);
		printf("\tPlateSerial [%d]\n", pRspRepeal->PlateSerial);
		printf("\tSessionID [%d]\n", pRspRepeal->SessionID);
		printf("\tInstallID [%d]\n", pRspRepeal->InstallID);
		printf("\tFutureSerial [%d]\n", pRspRepeal->FutureSerial);
		printf("\tRequestID [%d]\n", pRspRepeal->RequestID);
		printf("\tTID [%d]\n", pRspRepeal->TID);
		printf("\tErrorID [%d]\n", pRspRepeal->ErrorID);
		printf("\tBankRepealFlag [%c]\n", pRspRepeal->BankRepealFlag);
		printf("\tBrokerRepealFlag [%c]\n", pRspRepeal->BrokerRepealFlag);
		printf("\tLastFragment [%c]\n", pRspRepeal->LastFragment);
		printf("\tIdCardType [%c]\n", pRspRepeal->IdCardType);
		printf("\tCustType [%c]\n", pRspRepeal->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspRepeal->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspRepeal->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspRepeal->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspRepeal->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspRepeal->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspRepeal->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspRepeal->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspRepeal->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspRepeal->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspRepeal->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspRepeal->BrokerFee);
	}
	printf("</OnRtnRepealFromBankToFutureByBank>\n");
};
void CTraderSpi::OnRtnRepealFromFutureToBankByBank(CThostFtdcRspRepealField *pRspRepeal)
{
	printf("<OnRtnRepealFromFutureToBankByBank>\n");
	if (pRspRepeal)
	{
		printf("\tBankRepealSerial [%s]\n", pRspRepeal->BankRepealSerial);
		printf("\tTradeCode [%s]\n", pRspRepeal->TradeCode);
		printf("\tBankID [%s]\n", pRspRepeal->BankID);
		printf("\tBankBranchID [%s]\n", pRspRepeal->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspRepeal->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspRepeal->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspRepeal->TradeDate);
		printf("\tTradeTime [%s]\n", pRspRepeal->TradeTime);
		printf("\tBankSerial [%s]\n", pRspRepeal->BankSerial);
		printf("\tTradingDay [%s]\n", pRspRepeal->TradingDay);
		printf("\tCustomerName [%s]\n", pRspRepeal->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspRepeal->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspRepeal->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspRepeal->BankPassWord);
		printf("\tAccountID [%s]\n", pRspRepeal->AccountID);
		printf("\tPassword [%s]\n", pRspRepeal->Password);
		printf("\tUserID [%s]\n", pRspRepeal->UserID);
		printf("\tCurrencyID [%s]\n", pRspRepeal->CurrencyID);
		printf("\tMessage [%s]\n", pRspRepeal->Message);
		printf("\tDigest [%s]\n", pRspRepeal->Digest);
		printf("\tDeviceID [%s]\n", pRspRepeal->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspRepeal->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspRepeal->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspRepeal->OperNo);
		printf("\tErrorMsg [%s]\n", pRspRepeal->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspRepeal->LongCustomerName);
		printf("\tRepealTimeInterval [%d]\n", pRspRepeal->RepealTimeInterval);
		printf("\tRepealedTimes [%d]\n", pRspRepeal->RepealedTimes);
		printf("\tPlateRepealSerial [%d]\n", pRspRepeal->PlateRepealSerial);
		printf("\tFutureRepealSerial [%d]\n", pRspRepeal->FutureRepealSerial);
		printf("\tPlateSerial [%d]\n", pRspRepeal->PlateSerial);
		printf("\tSessionID [%d]\n", pRspRepeal->SessionID);
		printf("\tInstallID [%d]\n", pRspRepeal->InstallID);
		printf("\tFutureSerial [%d]\n", pRspRepeal->FutureSerial);
		printf("\tRequestID [%d]\n", pRspRepeal->RequestID);
		printf("\tTID [%d]\n", pRspRepeal->TID);
		printf("\tErrorID [%d]\n", pRspRepeal->ErrorID);
		printf("\tBankRepealFlag [%c]\n", pRspRepeal->BankRepealFlag);
		printf("\tBrokerRepealFlag [%c]\n", pRspRepeal->BrokerRepealFlag);
		printf("\tLastFragment [%c]\n", pRspRepeal->LastFragment);
		printf("\tIdCardType [%c]\n", pRspRepeal->IdCardType);
		printf("\tCustType [%c]\n", pRspRepeal->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspRepeal->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspRepeal->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspRepeal->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspRepeal->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspRepeal->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspRepeal->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspRepeal->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspRepeal->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspRepeal->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspRepeal->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspRepeal->BrokerFee);
	}
	printf("</OnRtnRepealFromFutureToBankByBank>\n");
};
void CTraderSpi::OnRtnFromBankToFutureByFuture(CThostFtdcRspTransferField *pRspTransfer)
{
	printf("<OnRtnFromBankToFutureByFuture>\n");
	if (pRspTransfer)
	{
		printf("\tTradeCode [%s]\n", pRspTransfer->TradeCode);
		printf("\tBankID [%s]\n", pRspTransfer->BankID);
		printf("\tBankBranchID [%s]\n", pRspTransfer->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspTransfer->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspTransfer->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspTransfer->TradeDate);
		printf("\tTradeTime [%s]\n", pRspTransfer->TradeTime);
		printf("\tBankSerial [%s]\n", pRspTransfer->BankSerial);
		printf("\tTradingDay [%s]\n", pRspTransfer->TradingDay);
		printf("\tCustomerName [%s]\n", pRspTransfer->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspTransfer->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspTransfer->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspTransfer->BankPassWord);
		printf("\tAccountID [%s]\n", pRspTransfer->AccountID);
		printf("\tPassword [%s]\n", pRspTransfer->Password);
		printf("\tUserID [%s]\n", pRspTransfer->UserID);
		printf("\tCurrencyID [%s]\n", pRspTransfer->CurrencyID);
		printf("\tMessage [%s]\n", pRspTransfer->Message);
		printf("\tDigest [%s]\n", pRspTransfer->Digest);
		printf("\tDeviceID [%s]\n", pRspTransfer->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspTransfer->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspTransfer->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspTransfer->OperNo);
		printf("\tErrorMsg [%s]\n", pRspTransfer->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspTransfer->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pRspTransfer->PlateSerial);
		printf("\tSessionID [%d]\n", pRspTransfer->SessionID);
		printf("\tInstallID [%d]\n", pRspTransfer->InstallID);
		printf("\tFutureSerial [%d]\n", pRspTransfer->FutureSerial);
		printf("\tRequestID [%d]\n", pRspTransfer->RequestID);
		printf("\tTID [%d]\n", pRspTransfer->TID);
		printf("\tErrorID [%d]\n", pRspTransfer->ErrorID);
		printf("\tLastFragment [%c]\n", pRspTransfer->LastFragment);
		printf("\tIdCardType [%c]\n", pRspTransfer->IdCardType);
		printf("\tCustType [%c]\n", pRspTransfer->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspTransfer->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspTransfer->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspTransfer->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspTransfer->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspTransfer->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspTransfer->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspTransfer->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspTransfer->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspTransfer->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspTransfer->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspTransfer->BrokerFee);
	}
	printf("</OnRtnFromBankToFutureByFuture>\n");
};
void CTraderSpi::OnRtnFromFutureToBankByFuture(CThostFtdcRspTransferField *pRspTransfer)
{
	printf("<OnRtnFromFutureToBankByFuture>\n");
	if (pRspTransfer)
	{
		printf("\tTradeCode [%s]\n", pRspTransfer->TradeCode);
		printf("\tBankID [%s]\n", pRspTransfer->BankID);
		printf("\tBankBranchID [%s]\n", pRspTransfer->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspTransfer->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspTransfer->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspTransfer->TradeDate);
		printf("\tTradeTime [%s]\n", pRspTransfer->TradeTime);
		printf("\tBankSerial [%s]\n", pRspTransfer->BankSerial);
		printf("\tTradingDay [%s]\n", pRspTransfer->TradingDay);
		printf("\tCustomerName [%s]\n", pRspTransfer->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspTransfer->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspTransfer->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspTransfer->BankPassWord);
		printf("\tAccountID [%s]\n", pRspTransfer->AccountID);
		printf("\tPassword [%s]\n", pRspTransfer->Password);
		printf("\tUserID [%s]\n", pRspTransfer->UserID);
		printf("\tCurrencyID [%s]\n", pRspTransfer->CurrencyID);
		printf("\tMessage [%s]\n", pRspTransfer->Message);
		printf("\tDigest [%s]\n", pRspTransfer->Digest);
		printf("\tDeviceID [%s]\n", pRspTransfer->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspTransfer->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspTransfer->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspTransfer->OperNo);
		printf("\tErrorMsg [%s]\n", pRspTransfer->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspTransfer->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pRspTransfer->PlateSerial);
		printf("\tSessionID [%d]\n", pRspTransfer->SessionID);
		printf("\tInstallID [%d]\n", pRspTransfer->InstallID);
		printf("\tFutureSerial [%d]\n", pRspTransfer->FutureSerial);
		printf("\tRequestID [%d]\n", pRspTransfer->RequestID);
		printf("\tTID [%d]\n", pRspTransfer->TID);
		printf("\tErrorID [%d]\n", pRspTransfer->ErrorID);
		printf("\tLastFragment [%c]\n", pRspTransfer->LastFragment);
		printf("\tIdCardType [%c]\n", pRspTransfer->IdCardType);
		printf("\tCustType [%c]\n", pRspTransfer->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspTransfer->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspTransfer->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspTransfer->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspTransfer->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspTransfer->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspTransfer->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspTransfer->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspTransfer->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspTransfer->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspTransfer->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspTransfer->BrokerFee);
	}
	printf("</OnRtnFromFutureToBankByFuture>\n");
};
void CTraderSpi::OnRtnRepealFromBankToFutureByFutureManual(CThostFtdcRspRepealField *pRspRepeal)
{
	printf("<OnRtnRepealFromBankToFutureByFutureManual>\n");
	if (pRspRepeal)
	{
		printf("\tBankRepealSerial [%s]\n", pRspRepeal->BankRepealSerial);
		printf("\tTradeCode [%s]\n", pRspRepeal->TradeCode);
		printf("\tBankID [%s]\n", pRspRepeal->BankID);
		printf("\tBankBranchID [%s]\n", pRspRepeal->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspRepeal->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspRepeal->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspRepeal->TradeDate);
		printf("\tTradeTime [%s]\n", pRspRepeal->TradeTime);
		printf("\tBankSerial [%s]\n", pRspRepeal->BankSerial);
		printf("\tTradingDay [%s]\n", pRspRepeal->TradingDay);
		printf("\tCustomerName [%s]\n", pRspRepeal->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspRepeal->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspRepeal->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspRepeal->BankPassWord);
		printf("\tAccountID [%s]\n", pRspRepeal->AccountID);
		printf("\tPassword [%s]\n", pRspRepeal->Password);
		printf("\tUserID [%s]\n", pRspRepeal->UserID);
		printf("\tCurrencyID [%s]\n", pRspRepeal->CurrencyID);
		printf("\tMessage [%s]\n", pRspRepeal->Message);
		printf("\tDigest [%s]\n", pRspRepeal->Digest);
		printf("\tDeviceID [%s]\n", pRspRepeal->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspRepeal->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspRepeal->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspRepeal->OperNo);
		printf("\tErrorMsg [%s]\n", pRspRepeal->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspRepeal->LongCustomerName);
		printf("\tRepealTimeInterval [%d]\n", pRspRepeal->RepealTimeInterval);
		printf("\tRepealedTimes [%d]\n", pRspRepeal->RepealedTimes);
		printf("\tPlateRepealSerial [%d]\n", pRspRepeal->PlateRepealSerial);
		printf("\tFutureRepealSerial [%d]\n", pRspRepeal->FutureRepealSerial);
		printf("\tPlateSerial [%d]\n", pRspRepeal->PlateSerial);
		printf("\tSessionID [%d]\n", pRspRepeal->SessionID);
		printf("\tInstallID [%d]\n", pRspRepeal->InstallID);
		printf("\tFutureSerial [%d]\n", pRspRepeal->FutureSerial);
		printf("\tRequestID [%d]\n", pRspRepeal->RequestID);
		printf("\tTID [%d]\n", pRspRepeal->TID);
		printf("\tErrorID [%d]\n", pRspRepeal->ErrorID);
		printf("\tBankRepealFlag [%c]\n", pRspRepeal->BankRepealFlag);
		printf("\tBrokerRepealFlag [%c]\n", pRspRepeal->BrokerRepealFlag);
		printf("\tLastFragment [%c]\n", pRspRepeal->LastFragment);
		printf("\tIdCardType [%c]\n", pRspRepeal->IdCardType);
		printf("\tCustType [%c]\n", pRspRepeal->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspRepeal->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspRepeal->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspRepeal->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspRepeal->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspRepeal->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspRepeal->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspRepeal->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspRepeal->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspRepeal->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspRepeal->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspRepeal->BrokerFee);
	}
	printf("</OnRtnRepealFromBankToFutureByFutureManual>\n");
};
void CTraderSpi::OnRtnRepealFromFutureToBankByFutureManual(CThostFtdcRspRepealField *pRspRepeal)
{
	printf("<OnRtnRepealFromFutureToBankByFutureManual>\n");
	if (pRspRepeal)
	{
		printf("\tBankRepealSerial [%s]\n", pRspRepeal->BankRepealSerial);
		printf("\tTradeCode [%s]\n", pRspRepeal->TradeCode);
		printf("\tBankID [%s]\n", pRspRepeal->BankID);
		printf("\tBankBranchID [%s]\n", pRspRepeal->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspRepeal->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspRepeal->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspRepeal->TradeDate);
		printf("\tTradeTime [%s]\n", pRspRepeal->TradeTime);
		printf("\tBankSerial [%s]\n", pRspRepeal->BankSerial);
		printf("\tTradingDay [%s]\n", pRspRepeal->TradingDay);
		printf("\tCustomerName [%s]\n", pRspRepeal->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspRepeal->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspRepeal->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspRepeal->BankPassWord);
		printf("\tAccountID [%s]\n", pRspRepeal->AccountID);
		printf("\tPassword [%s]\n", pRspRepeal->Password);
		printf("\tUserID [%s]\n", pRspRepeal->UserID);
		printf("\tCurrencyID [%s]\n", pRspRepeal->CurrencyID);
		printf("\tMessage [%s]\n", pRspRepeal->Message);
		printf("\tDigest [%s]\n", pRspRepeal->Digest);
		printf("\tDeviceID [%s]\n", pRspRepeal->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspRepeal->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspRepeal->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspRepeal->OperNo);
		printf("\tErrorMsg [%s]\n", pRspRepeal->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspRepeal->LongCustomerName);
		printf("\tRepealTimeInterval [%d]\n", pRspRepeal->RepealTimeInterval);
		printf("\tRepealedTimes [%d]\n", pRspRepeal->RepealedTimes);
		printf("\tPlateRepealSerial [%d]\n", pRspRepeal->PlateRepealSerial);
		printf("\tFutureRepealSerial [%d]\n", pRspRepeal->FutureRepealSerial);
		printf("\tPlateSerial [%d]\n", pRspRepeal->PlateSerial);
		printf("\tSessionID [%d]\n", pRspRepeal->SessionID);
		printf("\tInstallID [%d]\n", pRspRepeal->InstallID);
		printf("\tFutureSerial [%d]\n", pRspRepeal->FutureSerial);
		printf("\tRequestID [%d]\n", pRspRepeal->RequestID);
		printf("\tTID [%d]\n", pRspRepeal->TID);
		printf("\tErrorID [%d]\n", pRspRepeal->ErrorID);
		printf("\tBankRepealFlag [%c]\n", pRspRepeal->BankRepealFlag);
		printf("\tBrokerRepealFlag [%c]\n", pRspRepeal->BrokerRepealFlag);
		printf("\tLastFragment [%c]\n", pRspRepeal->LastFragment);
		printf("\tIdCardType [%c]\n", pRspRepeal->IdCardType);
		printf("\tCustType [%c]\n", pRspRepeal->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspRepeal->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspRepeal->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspRepeal->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspRepeal->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspRepeal->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspRepeal->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspRepeal->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspRepeal->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspRepeal->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspRepeal->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspRepeal->BrokerFee);
	}
	printf("</OnRtnRepealFromFutureToBankByFutureManual>\n");
};
void CTraderSpi::OnRtnQueryBankBalanceByFuture(CThostFtdcNotifyQueryAccountField *pNotifyQueryAccount)
{
	printf("<OnRtnQueryBankBalanceByFuture>\n");
	if (pNotifyQueryAccount)
	{
		printf("\tTradeCode [%s]\n", pNotifyQueryAccount->TradeCode);
		printf("\tBankID [%s]\n", pNotifyQueryAccount->BankID);
		printf("\tBankBranchID [%s]\n", pNotifyQueryAccount->BankBranchID);
		printf("\tBrokerID [%s]\n", pNotifyQueryAccount->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pNotifyQueryAccount->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pNotifyQueryAccount->TradeDate);
		printf("\tTradeTime [%s]\n", pNotifyQueryAccount->TradeTime);
		printf("\tBankSerial [%s]\n", pNotifyQueryAccount->BankSerial);
		printf("\tTradingDay [%s]\n", pNotifyQueryAccount->TradingDay);
		printf("\tCustomerName [%s]\n", pNotifyQueryAccount->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pNotifyQueryAccount->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pNotifyQueryAccount->BankAccount);
		printf("\tBankPassWord [%s]\n", pNotifyQueryAccount->BankPassWord);
		printf("\tAccountID [%s]\n", pNotifyQueryAccount->AccountID);
		printf("\tPassword [%s]\n", pNotifyQueryAccount->Password);
		printf("\tUserID [%s]\n", pNotifyQueryAccount->UserID);
		printf("\tCurrencyID [%s]\n", pNotifyQueryAccount->CurrencyID);
		printf("\tDigest [%s]\n", pNotifyQueryAccount->Digest);
		printf("\tDeviceID [%s]\n", pNotifyQueryAccount->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pNotifyQueryAccount->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pNotifyQueryAccount->BankSecuAcc);
		printf("\tOperNo [%s]\n", pNotifyQueryAccount->OperNo);
		printf("\tErrorMsg [%s]\n", pNotifyQueryAccount->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pNotifyQueryAccount->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pNotifyQueryAccount->PlateSerial);
		printf("\tSessionID [%d]\n", pNotifyQueryAccount->SessionID);
		printf("\tFutureSerial [%d]\n", pNotifyQueryAccount->FutureSerial);
		printf("\tInstallID [%d]\n", pNotifyQueryAccount->InstallID);
		printf("\tRequestID [%d]\n", pNotifyQueryAccount->RequestID);
		printf("\tTID [%d]\n", pNotifyQueryAccount->TID);
		printf("\tErrorID [%d]\n", pNotifyQueryAccount->ErrorID);
		printf("\tLastFragment [%c]\n", pNotifyQueryAccount->LastFragment);
		printf("\tIdCardType [%c]\n", pNotifyQueryAccount->IdCardType);
		printf("\tCustType [%c]\n", pNotifyQueryAccount->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pNotifyQueryAccount->VerifyCertNoFlag);
		printf("\tBankAccType [%c]\n", pNotifyQueryAccount->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pNotifyQueryAccount->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pNotifyQueryAccount->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pNotifyQueryAccount->SecuPwdFlag);
		printf("\tBankUseAmount [%.8lf]\n", pNotifyQueryAccount->BankUseAmount);
		printf("\tBankFetchAmount [%.8lf]\n", pNotifyQueryAccount->BankFetchAmount);
	}
	printf("</OnRtnQueryBankBalanceByFuture>\n");
};
void CTraderSpi::OnErrRtnBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnBankToFutureByFuture>\n");
	if (pReqTransfer)
	{
		printf("\tTradeCode [%s]\n", pReqTransfer->TradeCode);
		printf("\tBankID [%s]\n", pReqTransfer->BankID);
		printf("\tBankBranchID [%s]\n", pReqTransfer->BankBranchID);
		printf("\tBrokerID [%s]\n", pReqTransfer->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pReqTransfer->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pReqTransfer->TradeDate);
		printf("\tTradeTime [%s]\n", pReqTransfer->TradeTime);
		printf("\tBankSerial [%s]\n", pReqTransfer->BankSerial);
		printf("\tTradingDay [%s]\n", pReqTransfer->TradingDay);
		printf("\tCustomerName [%s]\n", pReqTransfer->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pReqTransfer->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pReqTransfer->BankAccount);
		printf("\tBankPassWord [%s]\n", pReqTransfer->BankPassWord);
		printf("\tAccountID [%s]\n", pReqTransfer->AccountID);
		printf("\tPassword [%s]\n", pReqTransfer->Password);
		printf("\tUserID [%s]\n", pReqTransfer->UserID);
		printf("\tCurrencyID [%s]\n", pReqTransfer->CurrencyID);
		printf("\tMessage [%s]\n", pReqTransfer->Message);
		printf("\tDigest [%s]\n", pReqTransfer->Digest);
		printf("\tDeviceID [%s]\n", pReqTransfer->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pReqTransfer->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pReqTransfer->BankSecuAcc);
		printf("\tOperNo [%s]\n", pReqTransfer->OperNo);
		printf("\tLongCustomerName [%s]\n", pReqTransfer->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pReqTransfer->PlateSerial);
		printf("\tSessionID [%d]\n", pReqTransfer->SessionID);
		printf("\tInstallID [%d]\n", pReqTransfer->InstallID);
		printf("\tFutureSerial [%d]\n", pReqTransfer->FutureSerial);
		printf("\tRequestID [%d]\n", pReqTransfer->RequestID);
		printf("\tTID [%d]\n", pReqTransfer->TID);
		printf("\tLastFragment [%c]\n", pReqTransfer->LastFragment);
		printf("\tIdCardType [%c]\n", pReqTransfer->IdCardType);
		printf("\tCustType [%c]\n", pReqTransfer->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pReqTransfer->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pReqTransfer->FeePayFlag);
		printf("\tBankAccType [%c]\n", pReqTransfer->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pReqTransfer->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pReqTransfer->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pReqTransfer->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pReqTransfer->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pReqTransfer->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pReqTransfer->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pReqTransfer->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pReqTransfer->BrokerFee);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnBankToFutureByFuture>\n");
};
void CTraderSpi::OnErrRtnFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnFutureToBankByFuture>\n");
	if (pReqTransfer)
	{
		printf("\tTradeCode [%s]\n", pReqTransfer->TradeCode);
		printf("\tBankID [%s]\n", pReqTransfer->BankID);
		printf("\tBankBranchID [%s]\n", pReqTransfer->BankBranchID);
		printf("\tBrokerID [%s]\n", pReqTransfer->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pReqTransfer->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pReqTransfer->TradeDate);
		printf("\tTradeTime [%s]\n", pReqTransfer->TradeTime);
		printf("\tBankSerial [%s]\n", pReqTransfer->BankSerial);
		printf("\tTradingDay [%s]\n", pReqTransfer->TradingDay);
		printf("\tCustomerName [%s]\n", pReqTransfer->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pReqTransfer->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pReqTransfer->BankAccount);
		printf("\tBankPassWord [%s]\n", pReqTransfer->BankPassWord);
		printf("\tAccountID [%s]\n", pReqTransfer->AccountID);
		printf("\tPassword [%s]\n", pReqTransfer->Password);
		printf("\tUserID [%s]\n", pReqTransfer->UserID);
		printf("\tCurrencyID [%s]\n", pReqTransfer->CurrencyID);
		printf("\tMessage [%s]\n", pReqTransfer->Message);
		printf("\tDigest [%s]\n", pReqTransfer->Digest);
		printf("\tDeviceID [%s]\n", pReqTransfer->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pReqTransfer->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pReqTransfer->BankSecuAcc);
		printf("\tOperNo [%s]\n", pReqTransfer->OperNo);
		printf("\tLongCustomerName [%s]\n", pReqTransfer->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pReqTransfer->PlateSerial);
		printf("\tSessionID [%d]\n", pReqTransfer->SessionID);
		printf("\tInstallID [%d]\n", pReqTransfer->InstallID);
		printf("\tFutureSerial [%d]\n", pReqTransfer->FutureSerial);
		printf("\tRequestID [%d]\n", pReqTransfer->RequestID);
		printf("\tTID [%d]\n", pReqTransfer->TID);
		printf("\tLastFragment [%c]\n", pReqTransfer->LastFragment);
		printf("\tIdCardType [%c]\n", pReqTransfer->IdCardType);
		printf("\tCustType [%c]\n", pReqTransfer->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pReqTransfer->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pReqTransfer->FeePayFlag);
		printf("\tBankAccType [%c]\n", pReqTransfer->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pReqTransfer->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pReqTransfer->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pReqTransfer->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pReqTransfer->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pReqTransfer->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pReqTransfer->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pReqTransfer->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pReqTransfer->BrokerFee);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnFutureToBankByFuture>\n");
};
void CTraderSpi::OnErrRtnRepealBankToFutureByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnRepealBankToFutureByFutureManual>\n");
	if (pReqRepeal)
	{
		printf("\tBankRepealSerial [%s]\n", pReqRepeal->BankRepealSerial);
		printf("\tTradeCode [%s]\n", pReqRepeal->TradeCode);
		printf("\tBankID [%s]\n", pReqRepeal->BankID);
		printf("\tBankBranchID [%s]\n", pReqRepeal->BankBranchID);
		printf("\tBrokerID [%s]\n", pReqRepeal->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pReqRepeal->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pReqRepeal->TradeDate);
		printf("\tTradeTime [%s]\n", pReqRepeal->TradeTime);
		printf("\tBankSerial [%s]\n", pReqRepeal->BankSerial);
		printf("\tTradingDay [%s]\n", pReqRepeal->TradingDay);
		printf("\tCustomerName [%s]\n", pReqRepeal->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pReqRepeal->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pReqRepeal->BankAccount);
		printf("\tBankPassWord [%s]\n", pReqRepeal->BankPassWord);
		printf("\tAccountID [%s]\n", pReqRepeal->AccountID);
		printf("\tPassword [%s]\n", pReqRepeal->Password);
		printf("\tUserID [%s]\n", pReqRepeal->UserID);
		printf("\tCurrencyID [%s]\n", pReqRepeal->CurrencyID);
		printf("\tMessage [%s]\n", pReqRepeal->Message);
		printf("\tDigest [%s]\n", pReqRepeal->Digest);
		printf("\tDeviceID [%s]\n", pReqRepeal->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pReqRepeal->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pReqRepeal->BankSecuAcc);
		printf("\tOperNo [%s]\n", pReqRepeal->OperNo);
		printf("\tLongCustomerName [%s]\n", pReqRepeal->LongCustomerName);
		printf("\tRepealTimeInterval [%d]\n", pReqRepeal->RepealTimeInterval);
		printf("\tRepealedTimes [%d]\n", pReqRepeal->RepealedTimes);
		printf("\tPlateRepealSerial [%d]\n", pReqRepeal->PlateRepealSerial);
		printf("\tFutureRepealSerial [%d]\n", pReqRepeal->FutureRepealSerial);
		printf("\tPlateSerial [%d]\n", pReqRepeal->PlateSerial);
		printf("\tSessionID [%d]\n", pReqRepeal->SessionID);
		printf("\tInstallID [%d]\n", pReqRepeal->InstallID);
		printf("\tFutureSerial [%d]\n", pReqRepeal->FutureSerial);
		printf("\tRequestID [%d]\n", pReqRepeal->RequestID);
		printf("\tTID [%d]\n", pReqRepeal->TID);
		printf("\tBankRepealFlag [%c]\n", pReqRepeal->BankRepealFlag);
		printf("\tBrokerRepealFlag [%c]\n", pReqRepeal->BrokerRepealFlag);
		printf("\tLastFragment [%c]\n", pReqRepeal->LastFragment);
		printf("\tIdCardType [%c]\n", pReqRepeal->IdCardType);
		printf("\tCustType [%c]\n", pReqRepeal->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pReqRepeal->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pReqRepeal->FeePayFlag);
		printf("\tBankAccType [%c]\n", pReqRepeal->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pReqRepeal->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pReqRepeal->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pReqRepeal->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pReqRepeal->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pReqRepeal->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pReqRepeal->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pReqRepeal->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pReqRepeal->BrokerFee);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnRepealBankToFutureByFutureManual>\n");
};
void CTraderSpi::OnErrRtnRepealFutureToBankByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnRepealFutureToBankByFutureManual>\n");
	if (pReqRepeal)
	{
		printf("\tBankRepealSerial [%s]\n", pReqRepeal->BankRepealSerial);
		printf("\tTradeCode [%s]\n", pReqRepeal->TradeCode);
		printf("\tBankID [%s]\n", pReqRepeal->BankID);
		printf("\tBankBranchID [%s]\n", pReqRepeal->BankBranchID);
		printf("\tBrokerID [%s]\n", pReqRepeal->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pReqRepeal->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pReqRepeal->TradeDate);
		printf("\tTradeTime [%s]\n", pReqRepeal->TradeTime);
		printf("\tBankSerial [%s]\n", pReqRepeal->BankSerial);
		printf("\tTradingDay [%s]\n", pReqRepeal->TradingDay);
		printf("\tCustomerName [%s]\n", pReqRepeal->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pReqRepeal->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pReqRepeal->BankAccount);
		printf("\tBankPassWord [%s]\n", pReqRepeal->BankPassWord);
		printf("\tAccountID [%s]\n", pReqRepeal->AccountID);
		printf("\tPassword [%s]\n", pReqRepeal->Password);
		printf("\tUserID [%s]\n", pReqRepeal->UserID);
		printf("\tCurrencyID [%s]\n", pReqRepeal->CurrencyID);
		printf("\tMessage [%s]\n", pReqRepeal->Message);
		printf("\tDigest [%s]\n", pReqRepeal->Digest);
		printf("\tDeviceID [%s]\n", pReqRepeal->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pReqRepeal->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pReqRepeal->BankSecuAcc);
		printf("\tOperNo [%s]\n", pReqRepeal->OperNo);
		printf("\tLongCustomerName [%s]\n", pReqRepeal->LongCustomerName);
		printf("\tRepealTimeInterval [%d]\n", pReqRepeal->RepealTimeInterval);
		printf("\tRepealedTimes [%d]\n", pReqRepeal->RepealedTimes);
		printf("\tPlateRepealSerial [%d]\n", pReqRepeal->PlateRepealSerial);
		printf("\tFutureRepealSerial [%d]\n", pReqRepeal->FutureRepealSerial);
		printf("\tPlateSerial [%d]\n", pReqRepeal->PlateSerial);
		printf("\tSessionID [%d]\n", pReqRepeal->SessionID);
		printf("\tInstallID [%d]\n", pReqRepeal->InstallID);
		printf("\tFutureSerial [%d]\n", pReqRepeal->FutureSerial);
		printf("\tRequestID [%d]\n", pReqRepeal->RequestID);
		printf("\tTID [%d]\n", pReqRepeal->TID);
		printf("\tBankRepealFlag [%c]\n", pReqRepeal->BankRepealFlag);
		printf("\tBrokerRepealFlag [%c]\n", pReqRepeal->BrokerRepealFlag);
		printf("\tLastFragment [%c]\n", pReqRepeal->LastFragment);
		printf("\tIdCardType [%c]\n", pReqRepeal->IdCardType);
		printf("\tCustType [%c]\n", pReqRepeal->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pReqRepeal->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pReqRepeal->FeePayFlag);
		printf("\tBankAccType [%c]\n", pReqRepeal->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pReqRepeal->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pReqRepeal->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pReqRepeal->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pReqRepeal->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pReqRepeal->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pReqRepeal->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pReqRepeal->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pReqRepeal->BrokerFee);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnRepealFutureToBankByFutureManual>\n");
};
void CTraderSpi::OnErrRtnQueryBankBalanceByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo)
{
	printf("<OnErrRtnQueryBankBalanceByFuture>\n");
	if (pReqQueryAccount)
	{
		printf("\tTradeCode [%s]\n", pReqQueryAccount->TradeCode);
		printf("\tBankID [%s]\n", pReqQueryAccount->BankID);
		printf("\tBankBranchID [%s]\n", pReqQueryAccount->BankBranchID);
		printf("\tBrokerID [%s]\n", pReqQueryAccount->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pReqQueryAccount->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pReqQueryAccount->TradeDate);
		printf("\tTradeTime [%s]\n", pReqQueryAccount->TradeTime);
		printf("\tBankSerial [%s]\n", pReqQueryAccount->BankSerial);
		printf("\tTradingDay [%s]\n", pReqQueryAccount->TradingDay);
		printf("\tCustomerName [%s]\n", pReqQueryAccount->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pReqQueryAccount->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pReqQueryAccount->BankAccount);
		printf("\tBankPassWord [%s]\n", pReqQueryAccount->BankPassWord);
		printf("\tAccountID [%s]\n", pReqQueryAccount->AccountID);
		printf("\tPassword [%s]\n", pReqQueryAccount->Password);
		printf("\tUserID [%s]\n", pReqQueryAccount->UserID);
		printf("\tCurrencyID [%s]\n", pReqQueryAccount->CurrencyID);
		printf("\tDigest [%s]\n", pReqQueryAccount->Digest);
		printf("\tDeviceID [%s]\n", pReqQueryAccount->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pReqQueryAccount->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pReqQueryAccount->BankSecuAcc);
		printf("\tOperNo [%s]\n", pReqQueryAccount->OperNo);
		printf("\tLongCustomerName [%s]\n", pReqQueryAccount->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pReqQueryAccount->PlateSerial);
		printf("\tSessionID [%d]\n", pReqQueryAccount->SessionID);
		printf("\tFutureSerial [%d]\n", pReqQueryAccount->FutureSerial);
		printf("\tInstallID [%d]\n", pReqQueryAccount->InstallID);
		printf("\tRequestID [%d]\n", pReqQueryAccount->RequestID);
		printf("\tTID [%d]\n", pReqQueryAccount->TID);
		printf("\tLastFragment [%c]\n", pReqQueryAccount->LastFragment);
		printf("\tIdCardType [%c]\n", pReqQueryAccount->IdCardType);
		printf("\tCustType [%c]\n", pReqQueryAccount->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pReqQueryAccount->VerifyCertNoFlag);
		printf("\tBankAccType [%c]\n", pReqQueryAccount->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pReqQueryAccount->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pReqQueryAccount->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pReqQueryAccount->SecuPwdFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("</OnErrRtnQueryBankBalanceByFuture>\n");
};
void CTraderSpi::OnRtnRepealFromBankToFutureByFuture(CThostFtdcRspRepealField *pRspRepeal)
{
	printf("<OnRtnRepealFromBankToFutureByFuture>\n");
	if (pRspRepeal)
	{
		printf("\tBankRepealSerial [%s]\n", pRspRepeal->BankRepealSerial);
		printf("\tTradeCode [%s]\n", pRspRepeal->TradeCode);
		printf("\tBankID [%s]\n", pRspRepeal->BankID);
		printf("\tBankBranchID [%s]\n", pRspRepeal->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspRepeal->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspRepeal->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspRepeal->TradeDate);
		printf("\tTradeTime [%s]\n", pRspRepeal->TradeTime);
		printf("\tBankSerial [%s]\n", pRspRepeal->BankSerial);
		printf("\tTradingDay [%s]\n", pRspRepeal->TradingDay);
		printf("\tCustomerName [%s]\n", pRspRepeal->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspRepeal->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspRepeal->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspRepeal->BankPassWord);
		printf("\tAccountID [%s]\n", pRspRepeal->AccountID);
		printf("\tPassword [%s]\n", pRspRepeal->Password);
		printf("\tUserID [%s]\n", pRspRepeal->UserID);
		printf("\tCurrencyID [%s]\n", pRspRepeal->CurrencyID);
		printf("\tMessage [%s]\n", pRspRepeal->Message);
		printf("\tDigest [%s]\n", pRspRepeal->Digest);
		printf("\tDeviceID [%s]\n", pRspRepeal->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspRepeal->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspRepeal->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspRepeal->OperNo);
		printf("\tErrorMsg [%s]\n", pRspRepeal->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspRepeal->LongCustomerName);
		printf("\tRepealTimeInterval [%d]\n", pRspRepeal->RepealTimeInterval);
		printf("\tRepealedTimes [%d]\n", pRspRepeal->RepealedTimes);
		printf("\tPlateRepealSerial [%d]\n", pRspRepeal->PlateRepealSerial);
		printf("\tFutureRepealSerial [%d]\n", pRspRepeal->FutureRepealSerial);
		printf("\tPlateSerial [%d]\n", pRspRepeal->PlateSerial);
		printf("\tSessionID [%d]\n", pRspRepeal->SessionID);
		printf("\tInstallID [%d]\n", pRspRepeal->InstallID);
		printf("\tFutureSerial [%d]\n", pRspRepeal->FutureSerial);
		printf("\tRequestID [%d]\n", pRspRepeal->RequestID);
		printf("\tTID [%d]\n", pRspRepeal->TID);
		printf("\tErrorID [%d]\n", pRspRepeal->ErrorID);
		printf("\tBankRepealFlag [%c]\n", pRspRepeal->BankRepealFlag);
		printf("\tBrokerRepealFlag [%c]\n", pRspRepeal->BrokerRepealFlag);
		printf("\tLastFragment [%c]\n", pRspRepeal->LastFragment);
		printf("\tIdCardType [%c]\n", pRspRepeal->IdCardType);
		printf("\tCustType [%c]\n", pRspRepeal->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspRepeal->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspRepeal->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspRepeal->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspRepeal->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspRepeal->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspRepeal->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspRepeal->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspRepeal->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspRepeal->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspRepeal->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspRepeal->BrokerFee);
	}
	printf("</OnRtnRepealFromBankToFutureByFuture>\n");
};
void CTraderSpi::OnRtnRepealFromFutureToBankByFuture(CThostFtdcRspRepealField *pRspRepeal)
{
	printf("<OnRtnRepealFromFutureToBankByFuture>\n");
	if (pRspRepeal)
	{
		printf("\tBankRepealSerial [%s]\n", pRspRepeal->BankRepealSerial);
		printf("\tTradeCode [%s]\n", pRspRepeal->TradeCode);
		printf("\tBankID [%s]\n", pRspRepeal->BankID);
		printf("\tBankBranchID [%s]\n", pRspRepeal->BankBranchID);
		printf("\tBrokerID [%s]\n", pRspRepeal->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pRspRepeal->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pRspRepeal->TradeDate);
		printf("\tTradeTime [%s]\n", pRspRepeal->TradeTime);
		printf("\tBankSerial [%s]\n", pRspRepeal->BankSerial);
		printf("\tTradingDay [%s]\n", pRspRepeal->TradingDay);
		printf("\tCustomerName [%s]\n", pRspRepeal->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pRspRepeal->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pRspRepeal->BankAccount);
		printf("\tBankPassWord [%s]\n", pRspRepeal->BankPassWord);
		printf("\tAccountID [%s]\n", pRspRepeal->AccountID);
		printf("\tPassword [%s]\n", pRspRepeal->Password);
		printf("\tUserID [%s]\n", pRspRepeal->UserID);
		printf("\tCurrencyID [%s]\n", pRspRepeal->CurrencyID);
		printf("\tMessage [%s]\n", pRspRepeal->Message);
		printf("\tDigest [%s]\n", pRspRepeal->Digest);
		printf("\tDeviceID [%s]\n", pRspRepeal->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pRspRepeal->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pRspRepeal->BankSecuAcc);
		printf("\tOperNo [%s]\n", pRspRepeal->OperNo);
		printf("\tErrorMsg [%s]\n", pRspRepeal->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pRspRepeal->LongCustomerName);
		printf("\tRepealTimeInterval [%d]\n", pRspRepeal->RepealTimeInterval);
		printf("\tRepealedTimes [%d]\n", pRspRepeal->RepealedTimes);
		printf("\tPlateRepealSerial [%d]\n", pRspRepeal->PlateRepealSerial);
		printf("\tFutureRepealSerial [%d]\n", pRspRepeal->FutureRepealSerial);
		printf("\tPlateSerial [%d]\n", pRspRepeal->PlateSerial);
		printf("\tSessionID [%d]\n", pRspRepeal->SessionID);
		printf("\tInstallID [%d]\n", pRspRepeal->InstallID);
		printf("\tFutureSerial [%d]\n", pRspRepeal->FutureSerial);
		printf("\tRequestID [%d]\n", pRspRepeal->RequestID);
		printf("\tTID [%d]\n", pRspRepeal->TID);
		printf("\tErrorID [%d]\n", pRspRepeal->ErrorID);
		printf("\tBankRepealFlag [%c]\n", pRspRepeal->BankRepealFlag);
		printf("\tBrokerRepealFlag [%c]\n", pRspRepeal->BrokerRepealFlag);
		printf("\tLastFragment [%c]\n", pRspRepeal->LastFragment);
		printf("\tIdCardType [%c]\n", pRspRepeal->IdCardType);
		printf("\tCustType [%c]\n", pRspRepeal->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pRspRepeal->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pRspRepeal->FeePayFlag);
		printf("\tBankAccType [%c]\n", pRspRepeal->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pRspRepeal->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pRspRepeal->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pRspRepeal->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pRspRepeal->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pRspRepeal->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pRspRepeal->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pRspRepeal->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pRspRepeal->BrokerFee);
	}
	printf("</OnRtnRepealFromFutureToBankByFuture>\n");
};
void CTraderSpi::OnRspFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspFromBankToFutureByFuture>\n");
	if (pReqTransfer)
	{
		printf("\tTradeCode [%s]\n", pReqTransfer->TradeCode);
		printf("\tBankID [%s]\n", pReqTransfer->BankID);
		printf("\tBankBranchID [%s]\n", pReqTransfer->BankBranchID);
		printf("\tBrokerID [%s]\n", pReqTransfer->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pReqTransfer->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pReqTransfer->TradeDate);
		printf("\tTradeTime [%s]\n", pReqTransfer->TradeTime);
		printf("\tBankSerial [%s]\n", pReqTransfer->BankSerial);
		printf("\tTradingDay [%s]\n", pReqTransfer->TradingDay);
		printf("\tCustomerName [%s]\n", pReqTransfer->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pReqTransfer->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pReqTransfer->BankAccount);
		printf("\tBankPassWord [%s]\n", pReqTransfer->BankPassWord);
		printf("\tAccountID [%s]\n", pReqTransfer->AccountID);
		printf("\tPassword [%s]\n", pReqTransfer->Password);
		printf("\tUserID [%s]\n", pReqTransfer->UserID);
		printf("\tCurrencyID [%s]\n", pReqTransfer->CurrencyID);
		printf("\tMessage [%s]\n", pReqTransfer->Message);
		printf("\tDigest [%s]\n", pReqTransfer->Digest);
		printf("\tDeviceID [%s]\n", pReqTransfer->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pReqTransfer->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pReqTransfer->BankSecuAcc);
		printf("\tOperNo [%s]\n", pReqTransfer->OperNo);
		printf("\tLongCustomerName [%s]\n", pReqTransfer->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pReqTransfer->PlateSerial);
		printf("\tSessionID [%d]\n", pReqTransfer->SessionID);
		printf("\tInstallID [%d]\n", pReqTransfer->InstallID);
		printf("\tFutureSerial [%d]\n", pReqTransfer->FutureSerial);
		printf("\tRequestID [%d]\n", pReqTransfer->RequestID);
		printf("\tTID [%d]\n", pReqTransfer->TID);
		printf("\tLastFragment [%c]\n", pReqTransfer->LastFragment);
		printf("\tIdCardType [%c]\n", pReqTransfer->IdCardType);
		printf("\tCustType [%c]\n", pReqTransfer->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pReqTransfer->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pReqTransfer->FeePayFlag);
		printf("\tBankAccType [%c]\n", pReqTransfer->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pReqTransfer->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pReqTransfer->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pReqTransfer->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pReqTransfer->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pReqTransfer->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pReqTransfer->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pReqTransfer->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pReqTransfer->BrokerFee);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspFromBankToFutureByFuture>\n");
};

void CTraderSpi::OnRspFromFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspFromFutureToBankByFuture>\n");
	if (pReqTransfer)
	{
		printf("\tTradeCode [%s]\n", pReqTransfer->TradeCode);
		printf("\tBankID [%s]\n", pReqTransfer->BankID);
		printf("\tBankBranchID [%s]\n", pReqTransfer->BankBranchID);
		printf("\tBrokerID [%s]\n", pReqTransfer->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pReqTransfer->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pReqTransfer->TradeDate);
		printf("\tTradeTime [%s]\n", pReqTransfer->TradeTime);
		printf("\tBankSerial [%s]\n", pReqTransfer->BankSerial);
		printf("\tTradingDay [%s]\n", pReqTransfer->TradingDay);
		printf("\tCustomerName [%s]\n", pReqTransfer->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pReqTransfer->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pReqTransfer->BankAccount);
		printf("\tBankPassWord [%s]\n", pReqTransfer->BankPassWord);
		printf("\tAccountID [%s]\n", pReqTransfer->AccountID);
		printf("\tPassword [%s]\n", pReqTransfer->Password);
		printf("\tUserID [%s]\n", pReqTransfer->UserID);
		printf("\tCurrencyID [%s]\n", pReqTransfer->CurrencyID);
		printf("\tMessage [%s]\n", pReqTransfer->Message);
		printf("\tDigest [%s]\n", pReqTransfer->Digest);
		printf("\tDeviceID [%s]\n", pReqTransfer->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pReqTransfer->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pReqTransfer->BankSecuAcc);
		printf("\tOperNo [%s]\n", pReqTransfer->OperNo);
		printf("\tLongCustomerName [%s]\n", pReqTransfer->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pReqTransfer->PlateSerial);
		printf("\tSessionID [%d]\n", pReqTransfer->SessionID);
		printf("\tInstallID [%d]\n", pReqTransfer->InstallID);
		printf("\tFutureSerial [%d]\n", pReqTransfer->FutureSerial);
		printf("\tRequestID [%d]\n", pReqTransfer->RequestID);
		printf("\tTID [%d]\n", pReqTransfer->TID);
		printf("\tLastFragment [%c]\n", pReqTransfer->LastFragment);
		printf("\tIdCardType [%c]\n", pReqTransfer->IdCardType);
		printf("\tCustType [%c]\n", pReqTransfer->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pReqTransfer->VerifyCertNoFlag);
		printf("\tFeePayFlag [%c]\n", pReqTransfer->FeePayFlag);
		printf("\tBankAccType [%c]\n", pReqTransfer->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pReqTransfer->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pReqTransfer->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pReqTransfer->SecuPwdFlag);
		printf("\tTransferStatus [%c]\n", pReqTransfer->TransferStatus);
		printf("\tTradeAmount [%.8lf]\n", pReqTransfer->TradeAmount);
		printf("\tFutureFetchAmount [%.8lf]\n", pReqTransfer->FutureFetchAmount);
		printf("\tCustFee [%.8lf]\n", pReqTransfer->CustFee);
		printf("\tBrokerFee [%.8lf]\n", pReqTransfer->BrokerFee);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspFromFutureToBankByFuture>\n");
};

void CTraderSpi::OnRspQueryBankAccountMoneyByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
	printf("<OnRspQueryBankAccountMoneyByFuture>\n");
	if (pReqQueryAccount)
	{
		printf("\tTradeCode [%s]\n", pReqQueryAccount->TradeCode);
		printf("\tBankID [%s]\n", pReqQueryAccount->BankID);
		printf("\tBankBranchID [%s]\n", pReqQueryAccount->BankBranchID);
		printf("\tBrokerID [%s]\n", pReqQueryAccount->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pReqQueryAccount->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pReqQueryAccount->TradeDate);
		printf("\tTradeTime [%s]\n", pReqQueryAccount->TradeTime);
		printf("\tBankSerial [%s]\n", pReqQueryAccount->BankSerial);
		printf("\tTradingDay [%s]\n", pReqQueryAccount->TradingDay);
		printf("\tCustomerName [%s]\n", pReqQueryAccount->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pReqQueryAccount->IdentifiedCardNo);
		printf("\tBankAccount [%s]\n", pReqQueryAccount->BankAccount);
		printf("\tBankPassWord [%s]\n", pReqQueryAccount->BankPassWord);
		printf("\tAccountID [%s]\n", pReqQueryAccount->AccountID);
		printf("\tPassword [%s]\n", pReqQueryAccount->Password);
		printf("\tUserID [%s]\n", pReqQueryAccount->UserID);
		printf("\tCurrencyID [%s]\n", pReqQueryAccount->CurrencyID);
		printf("\tDigest [%s]\n", pReqQueryAccount->Digest);
		printf("\tDeviceID [%s]\n", pReqQueryAccount->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pReqQueryAccount->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pReqQueryAccount->BankSecuAcc);
		printf("\tOperNo [%s]\n", pReqQueryAccount->OperNo);
		printf("\tLongCustomerName [%s]\n", pReqQueryAccount->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pReqQueryAccount->PlateSerial);
		printf("\tSessionID [%d]\n", pReqQueryAccount->SessionID);
		printf("\tFutureSerial [%d]\n", pReqQueryAccount->FutureSerial);
		printf("\tInstallID [%d]\n", pReqQueryAccount->InstallID);
		printf("\tRequestID [%d]\n", pReqQueryAccount->RequestID);
		printf("\tTID [%d]\n", pReqQueryAccount->TID);
		printf("\tLastFragment [%c]\n", pReqQueryAccount->LastFragment);
		printf("\tIdCardType [%c]\n", pReqQueryAccount->IdCardType);
		printf("\tCustType [%c]\n", pReqQueryAccount->CustType);
		printf("\tVerifyCertNoFlag [%c]\n", pReqQueryAccount->VerifyCertNoFlag);
		printf("\tBankAccType [%c]\n", pReqQueryAccount->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pReqQueryAccount->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pReqQueryAccount->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pReqQueryAccount->SecuPwdFlag);
	}
	if (pRspInfo)
	{
		printf("\tErrorMsg [%s]\n", pRspInfo->ErrorMsg);
		printf("\tErrorID [%d]\n", pRspInfo->ErrorID);
	}
	printf("\tnRequestID [%d]\n", nRequestID);
	printf("\tbIsLast [%d]\n", bIsLast);
	printf("</OnRspQueryBankAccountMoneyByFuture>\n");
};

void CTraderSpi::OnRtnOpenAccountByBank(CThostFtdcOpenAccountField *pOpenAccount)
{
	printf("<OnRtnOpenAccountByBank>\n");
	if (pOpenAccount)
	{
		printf("\tTradeCode [%s]\n", pOpenAccount->TradeCode);
		printf("\tBankID [%s]\n", pOpenAccount->BankID);
		printf("\tBankBranchID [%s]\n", pOpenAccount->BankBranchID);
		printf("\tBrokerID [%s]\n", pOpenAccount->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pOpenAccount->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pOpenAccount->TradeDate);
		printf("\tTradeTime [%s]\n", pOpenAccount->TradeTime);
		printf("\tBankSerial [%s]\n", pOpenAccount->BankSerial);
		printf("\tTradingDay [%s]\n", pOpenAccount->TradingDay);
		printf("\tCustomerName [%s]\n", pOpenAccount->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pOpenAccount->IdentifiedCardNo);
		printf("\tCountryCode [%s]\n", pOpenAccount->CountryCode);
		printf("\tAddress [%s]\n", pOpenAccount->Address);
		printf("\tZipCode [%s]\n", pOpenAccount->ZipCode);
		printf("\tTelephone [%s]\n", pOpenAccount->Telephone);
		printf("\tMobilePhone [%s]\n", pOpenAccount->MobilePhone);
		printf("\tFax [%s]\n", pOpenAccount->Fax);
		printf("\tEMail [%s]\n", pOpenAccount->EMail);
		printf("\tBankAccount [%s]\n", pOpenAccount->BankAccount);
		printf("\tBankPassWord [%s]\n", pOpenAccount->BankPassWord);
		printf("\tAccountID [%s]\n", pOpenAccount->AccountID);
		printf("\tPassword [%s]\n", pOpenAccount->Password);
		printf("\tCurrencyID [%s]\n", pOpenAccount->CurrencyID);
		printf("\tDigest [%s]\n", pOpenAccount->Digest);
		printf("\tDeviceID [%s]\n", pOpenAccount->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pOpenAccount->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pOpenAccount->BankSecuAcc);
		printf("\tOperNo [%s]\n", pOpenAccount->OperNo);
		printf("\tUserID [%s]\n", pOpenAccount->UserID);
		printf("\tErrorMsg [%s]\n", pOpenAccount->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pOpenAccount->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pOpenAccount->PlateSerial);
		printf("\tSessionID [%d]\n", pOpenAccount->SessionID);
		printf("\tInstallID [%d]\n", pOpenAccount->InstallID);
		printf("\tTID [%d]\n", pOpenAccount->TID);
		printf("\tErrorID [%d]\n", pOpenAccount->ErrorID);
		printf("\tLastFragment [%c]\n", pOpenAccount->LastFragment);
		printf("\tIdCardType [%c]\n", pOpenAccount->IdCardType);
		printf("\tGender [%c]\n", pOpenAccount->Gender);
		printf("\tCustType [%c]\n", pOpenAccount->CustType);
		printf("\tMoneyAccountStatus [%c]\n", pOpenAccount->MoneyAccountStatus);
		printf("\tVerifyCertNoFlag [%c]\n", pOpenAccount->VerifyCertNoFlag);
		printf("\tCashExchangeCode [%c]\n", pOpenAccount->CashExchangeCode);
		printf("\tBankAccType [%c]\n", pOpenAccount->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pOpenAccount->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pOpenAccount->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pOpenAccount->SecuPwdFlag);
	}
	printf("</OnRtnOpenAccountByBank>\n");
};
void CTraderSpi::OnRtnCancelAccountByBank(CThostFtdcCancelAccountField *pCancelAccount)
{
	printf("<OnRtnCancelAccountByBank>\n");
	if (pCancelAccount)
	{
		printf("\tTradeCode [%s]\n", pCancelAccount->TradeCode);
		printf("\tBankID [%s]\n", pCancelAccount->BankID);
		printf("\tBankBranchID [%s]\n", pCancelAccount->BankBranchID);
		printf("\tBrokerID [%s]\n", pCancelAccount->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pCancelAccount->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pCancelAccount->TradeDate);
		printf("\tTradeTime [%s]\n", pCancelAccount->TradeTime);
		printf("\tBankSerial [%s]\n", pCancelAccount->BankSerial);
		printf("\tTradingDay [%s]\n", pCancelAccount->TradingDay);
		printf("\tCustomerName [%s]\n", pCancelAccount->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pCancelAccount->IdentifiedCardNo);
		printf("\tCountryCode [%s]\n", pCancelAccount->CountryCode);
		printf("\tAddress [%s]\n", pCancelAccount->Address);
		printf("\tZipCode [%s]\n", pCancelAccount->ZipCode);
		printf("\tTelephone [%s]\n", pCancelAccount->Telephone);
		printf("\tMobilePhone [%s]\n", pCancelAccount->MobilePhone);
		printf("\tFax [%s]\n", pCancelAccount->Fax);
		printf("\tEMail [%s]\n", pCancelAccount->EMail);
		printf("\tBankAccount [%s]\n", pCancelAccount->BankAccount);
		printf("\tBankPassWord [%s]\n", pCancelAccount->BankPassWord);
		printf("\tAccountID [%s]\n", pCancelAccount->AccountID);
		printf("\tPassword [%s]\n", pCancelAccount->Password);
		printf("\tCurrencyID [%s]\n", pCancelAccount->CurrencyID);
		printf("\tDigest [%s]\n", pCancelAccount->Digest);
		printf("\tDeviceID [%s]\n", pCancelAccount->DeviceID);
		printf("\tBrokerIDByBank [%s]\n", pCancelAccount->BrokerIDByBank);
		printf("\tBankSecuAcc [%s]\n", pCancelAccount->BankSecuAcc);
		printf("\tOperNo [%s]\n", pCancelAccount->OperNo);
		printf("\tUserID [%s]\n", pCancelAccount->UserID);
		printf("\tErrorMsg [%s]\n", pCancelAccount->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pCancelAccount->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pCancelAccount->PlateSerial);
		printf("\tSessionID [%d]\n", pCancelAccount->SessionID);
		printf("\tInstallID [%d]\n", pCancelAccount->InstallID);
		printf("\tTID [%d]\n", pCancelAccount->TID);
		printf("\tErrorID [%d]\n", pCancelAccount->ErrorID);
		printf("\tLastFragment [%c]\n", pCancelAccount->LastFragment);
		printf("\tIdCardType [%c]\n", pCancelAccount->IdCardType);
		printf("\tGender [%c]\n", pCancelAccount->Gender);
		printf("\tCustType [%c]\n", pCancelAccount->CustType);
		printf("\tMoneyAccountStatus [%c]\n", pCancelAccount->MoneyAccountStatus);
		printf("\tVerifyCertNoFlag [%c]\n", pCancelAccount->VerifyCertNoFlag);
		printf("\tCashExchangeCode [%c]\n", pCancelAccount->CashExchangeCode);
		printf("\tBankAccType [%c]\n", pCancelAccount->BankAccType);
		printf("\tBankSecuAccType [%c]\n", pCancelAccount->BankSecuAccType);
		printf("\tBankPwdFlag [%c]\n", pCancelAccount->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pCancelAccount->SecuPwdFlag);
	}
	printf("</OnRtnCancelAccountByBank>\n");
};
void CTraderSpi::OnRtnChangeAccountByBank(CThostFtdcChangeAccountField *pChangeAccount)
{
	printf("<OnRtnChangeAccountByBank>\n");
	if (pChangeAccount)
	{
		printf("\tTradeCode [%s]\n", pChangeAccount->TradeCode);
		printf("\tBankID [%s]\n", pChangeAccount->BankID);
		printf("\tBankBranchID [%s]\n", pChangeAccount->BankBranchID);
		printf("\tBrokerID [%s]\n", pChangeAccount->BrokerID);
		printf("\tBrokerBranchID [%s]\n", pChangeAccount->BrokerBranchID);
		printf("\tTradeDate [%s]\n", pChangeAccount->TradeDate);
		printf("\tTradeTime [%s]\n", pChangeAccount->TradeTime);
		printf("\tBankSerial [%s]\n", pChangeAccount->BankSerial);
		printf("\tTradingDay [%s]\n", pChangeAccount->TradingDay);
		printf("\tCustomerName [%s]\n", pChangeAccount->CustomerName);
		printf("\tIdentifiedCardNo [%s]\n", pChangeAccount->IdentifiedCardNo);
		printf("\tCountryCode [%s]\n", pChangeAccount->CountryCode);
		printf("\tAddress [%s]\n", pChangeAccount->Address);
		printf("\tZipCode [%s]\n", pChangeAccount->ZipCode);
		printf("\tTelephone [%s]\n", pChangeAccount->Telephone);
		printf("\tMobilePhone [%s]\n", pChangeAccount->MobilePhone);
		printf("\tFax [%s]\n", pChangeAccount->Fax);
		printf("\tEMail [%s]\n", pChangeAccount->EMail);
		printf("\tBankAccount [%s]\n", pChangeAccount->BankAccount);
		printf("\tBankPassWord [%s]\n", pChangeAccount->BankPassWord);
		printf("\tNewBankAccount [%s]\n", pChangeAccount->NewBankAccount);
		printf("\tNewBankPassWord [%s]\n", pChangeAccount->NewBankPassWord);
		printf("\tAccountID [%s]\n", pChangeAccount->AccountID);
		printf("\tPassword [%s]\n", pChangeAccount->Password);
		printf("\tCurrencyID [%s]\n", pChangeAccount->CurrencyID);
		printf("\tBrokerIDByBank [%s]\n", pChangeAccount->BrokerIDByBank);
		printf("\tDigest [%s]\n", pChangeAccount->Digest);
		printf("\tErrorMsg [%s]\n", pChangeAccount->ErrorMsg);
		printf("\tLongCustomerName [%s]\n", pChangeAccount->LongCustomerName);
		printf("\tPlateSerial [%d]\n", pChangeAccount->PlateSerial);
		printf("\tSessionID [%d]\n", pChangeAccount->SessionID);
		printf("\tInstallID [%d]\n", pChangeAccount->InstallID);
		printf("\tTID [%d]\n", pChangeAccount->TID);
		printf("\tErrorID [%d]\n", pChangeAccount->ErrorID);
		printf("\tLastFragment [%c]\n", pChangeAccount->LastFragment);
		printf("\tIdCardType [%c]\n", pChangeAccount->IdCardType);
		printf("\tGender [%c]\n", pChangeAccount->Gender);
		printf("\tCustType [%c]\n", pChangeAccount->CustType);
		printf("\tMoneyAccountStatus [%c]\n", pChangeAccount->MoneyAccountStatus);
		printf("\tBankAccType [%c]\n", pChangeAccount->BankAccType);
		printf("\tVerifyCertNoFlag [%c]\n", pChangeAccount->VerifyCertNoFlag);
		printf("\tBankPwdFlag [%c]\n", pChangeAccount->BankPwdFlag);
		printf("\tSecuPwdFlag [%c]\n", pChangeAccount->SecuPwdFlag);
	}
	printf("</OnRtnChangeAccountByBank>\n");
};

发表评论