Esempio n. 1
0
///登录请求响应
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();
	}
}
Esempio n. 2
0
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;

}