///登录请求响应 void CMdSpi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (bIsLast && !IsErrorRspInfo(pRspInfo)) { ///获取当前交易日 LOG2("Current Trading Day", m_pMdUserApi->GetTradingDay()); // 请求订阅行情 SubscribeMarketData(); // 请求订阅询价,只能订阅郑商所的询价,其他交易所通过traderapi相应接口返回 SubscribeForQuoteRsp(); } }
void CtpMdSpi::OnFrontConnected() { CXTraderApp* pApp = (CXTraderApp*)AfxGetApp(); if (g_pCWnd) { bRecconnect = TRUE; CXTraderDlg* pDlg = (CXTraderDlg*)g_pCWnd; //pDlg->SetStatusTxt(_T("MD√"),0); ReqUserLogin(pApp->m_sBROKER_ID);//,pApp->m_sINVESTOR_ID,pApp->m_sPASSWORD); DWORD dwRet = WaitForSingleObject(g_hEvent,WAIT_MS); if (dwRet==WAIT_OBJECT_0) { pDlg->SetTipTxt(_T("行情在线"),IDS_MD_TIPS); pDlg->SetPaneTxtColor(0,RED); ResetEvent(g_hEvent); } else { return; } //int iLen = pDlg->m_szInst.GetLength(); char szInst[MAX_PATH]; uni2ansi(CP_ACP,(LPTSTR)(LPCTSTR)pDlg->m_szInst,szInst); SubscribeMarketData(szInst); dwRet = WaitForSingleObject(g_hEvent,WAIT_MS); if (dwRet==WAIT_OBJECT_0) { ResetEvent(g_hEvent); } //Sleep(100); bMdSignal = TRUE; } else { ReqUserLogin(pApp->m_sBROKER_ID); } //if (g_bOnce)SetEvent(g_hEvent); }
void Z_DC_Spread_Policy::Init() { //初始化200更接近真实值 m_nHistoryCount = 90*15; //memset(&InsField,0,sizeof(FutureInstrumentField)); strcpy(m_MyTradeA.InsField.InstrumentID, m_MyTradeA.m_InstrumentID); strcpy(m_MyTradeB.InsField.InstrumentID, m_MyTradeB.m_InstrumentID); if(!m_pTrader->GetInstrument(&m_MyTradeA.InsField)){ throw "Invalid instrument_id A, please check."; Stop(); } if(!m_pTrader->GetInstrument(&m_MyTradeB.InsField)){ throw "Invalid instrument_id B, please check."; Stop(); } if(strcmp(m_MyTradeA.m_InstrumentID,m_MyTradeB.m_InstrumentID) == 0){ throw "The Same InstrumentID"; } //ClosePos(); cout<<"Price Tick: "<<m_MyTradeA.InsField.PriceTick<<" "<<m_MyTradeB.InsField.PriceTick<<" "<<m_MyTradeA.InsField.ExchangeID<<" "<<m_MyTradeB.InsField.ExchangeID<<" "<<strcmp(m_MyTradeB.InsField.ExchangeID,"SHFE")<<endl; //sleep(10); if(strcmp(m_MyTradeA.InsField.ExchangeID,"SHFE")==0){ m_pTrader->SetSHFE(true); cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; }if(strcmp(m_MyTradeB.InsField.ExchangeID,"SHFE") == 0){ m_pTrader->SetSHFE(true); cout<<"**********************************"<<endl; } GetStartTime(m_MyTradeA.m_InstrumentID); //订阅行情 SubscribeMarketData(m_MyTradeA.m_InstrumentID); SubscribeMarketData(m_MyTradeB.m_InstrumentID); m_MyTradeA.m_nMaxAddPosInWin = this->m_fAddPosInWin*m_MyTradeA.m_nMaxPos; m_MyTradeA.m_nMaxAddPosInLose = this->m_fAddPosInLose*m_MyTradeA.m_nMaxPos; m_MyTradeB.m_nMaxAddPosInWin = this->m_fAddPosInWin*m_MyTradeB.m_nMaxPos; m_MyTradeB.m_nMaxAddPosInLose = this->m_fAddPosInLose*m_MyTradeB.m_nMaxPos; cout<<"Inited and StartA:"<<m_MyTradeA.m_CountID<<" "<<m_MyTradeA.m_InstrumentID<<" "<<m_MyTradeA.m_nMaxPos<<" "<<m_MyTradeA.m_nMaxAddPosInWin<<" "<<m_MyTradeA.m_nMaxAddPosInLose<<endl; cout<<"Inited and StartB:"<<m_MyTradeB.m_CountID<<" "<<m_MyTradeB.m_InstrumentID<<" "<<m_MyTradeB.m_nMaxPos<<" "<<m_MyTradeB.m_nMaxAddPosInWin<<" "<<m_MyTradeB.m_nMaxAddPosInLose<<endl; m_MyTradeA.m_pSeries = m_pBarsCollection->CreateSeries(m_MyTradeA.m_InstrumentID,m_MyTradeA.InsField.ExchangeID,Minute,15,m_MyTradeA.InsField.VolumeMultiply,500); m_MyTradeA.m_pSeries->ReadHistoryLastN(10); /* m_MyTradeA.m_pSeries_1 = m_pBarsCollection->CreateSeries(m_MyTradeA.m_InstrumentID,m_MyTradeA.InsField.ExchangeID,m_nBarType_1,m_nBarLength_1,10,2048); m_MyTradeA.m_pSeries_1->ReadHistoryLastN(1500); */ //m_pSeries = m_pBarsCollection->CreateSeries(m_InstrumentID, "CFFEX", m_nBarType, m_nBarLength, 10, 2048); //m_pSeries->ReadHistoryLastN(m_nHistoryCount); //m_MyPUBU2 = new MyPUBU2(m_pSeries); /* m_MyTradeB.m_pSeries = m_pBarsCollection->CreateSeries(m_MyTradeB.m_InstrumentID,m_MyTradeB.InsField.ExchangeID,m_nBarType,m_nBarLength,10,2048); m_MyTradeB.m_pSeries->ReadHistoryLastN(1500); m_MyTradeB.m_pSeries_1 = m_pBarsCollection->CreateSeries(m_MyTradeB.m_InstrumentID,m_MyTradeB.InsField.ExchangeID,m_nBarType_1,m_nBarLength_1,10,2048); m_MyTradeB.m_pSeries_1->ReadHistoryLastN(1500); if(m_MyDCM != NULL){ delete m_MyDCM; } if(m_MyDCM_1 != NULL){ delete m_MyDCM_1; } m_MyDCM = new MyDCM(m_MyTradeA.m_pSeries,m_MyTradeB.m_pSeries,m_nN1,m_nN2,m_nN3); int _sizeA = m_MyTradeA.m_pSeries->m_nCount; int _sizeB = m_MyTradeB.m_pSeries->m_nCount; int _count = min(_sizeA, _sizeB); for(int i=_count; i>=2; i--){ m_MyDCM->Update(_sizeA - i,_sizeB - i); } if(m_MyTradeA.m_pSeries->GetBar(_sizeA - 1)->m_fHighest != m_MyTradeA.m_pSeries->GetBar(_sizeA - 1)->m_fLowest || m_MyTradeB.m_pSeries->GetBar(_sizeB - 1)->m_fHighest != m_MyTradeB.m_pSeries->GetBar(_sizeB - 1)->m_fLowest) { m_MyDCM->Update(_sizeA - 1,_sizeB - 1); } m_MyDCM_1 = new MyDCM(m_MyTradeA.m_pSeries_1,m_MyTradeB.m_pSeries_1,m_nN1,m_nN2,m_nN3); int _sizeA_1 = m_MyTradeA.m_pSeries_1->m_nCount; int _sizeB_1 = m_MyTradeB.m_pSeries_1->m_nCount; int _count_1 = min(_sizeA_1,_sizeB_1); for(int i=_count_1; i>=2; i--){ m_MyDCM_1->Update(_sizeA_1 - i,_sizeB_1 - i); } if(m_MyTradeA.m_pSeries_1->GetBar(_sizeA_1 - 1)->m_fHighest != m_MyTradeA.m_pSeries_1->GetBar(_sizeA_1 - 1)->m_fLowest || m_MyTradeB.m_pSeries_1->GetBar(_sizeB_1 - 1)->m_fHighest != m_MyTradeB.m_pSeries_1->GetBar(_sizeB_1 - 1)->m_fLowest) { m_MyDCM_1->Update(_sizeA_1 - 1,_sizeB_1 - 1); } cout<<m_MyTradeA.m_InstrumentID<<" init: "<<m_MyTradeA.m_pSeries->m_nCount<<" "<<m_MyDCM->m_fMA1<<" "<<m_MyDCM->m_fMA2<<" "<<m_MyDCM_1->m_fMA1<<" "<<m_MyDCM_1->m_fMA2<<endl; cout<<m_MyTradeB.m_InstrumentID<<" init: "<<m_MyTradeB.m_pSeries->m_nCount<<" "<<m_MyDCM->m_fMA1<<" "<<m_MyDCM->m_fMA2<<" "<<m_MyDCM_1->m_fMA1<<" "<<m_MyDCM_1->m_fMA2<<endl; */ //初始化 m_bStopOnClose = false; cout<<"Init end"<<endl; }