Пример #1
0
double CSPTime::GetTimeTradeRatioOfOneDay( CSPTime tTradeLatestDay, CSPTime tNow )
{
	DWORD	dwSecOrder	=	tNow.ToStockTimeSecOrder();
	if( 0 == dwSecOrder )
		return 1;
	if( tTradeLatestDay.GetYear() == tNow.GetYear()
		&& tTradeLatestDay.GetMonth() == tNow.GetMonth()
		&& tTradeLatestDay.GetDay() == tNow.GetDay() )
		return ((double)dwSecOrder) / GetTradeSecondsOfOneDay();
	return 1;
}
Пример #2
0
/***
	手动改变拥有股票数量
*/
void CSimuRealOp::OnModified()
{
	// TODO: Add your control notification handler code here
	CSimuAddStockDlg	dlg;
	dlg.SetStrategy( m_pStrategy );
	dlg.SetMode( CSimuAddStockDlg::modeModifiedCash, "", m_pStrategy->RealGetCurrentCash(), 0 );
	if( IDOK == dlg.DoModal( ) )
	{
		double	dValue		=	dlg.GetValue();
		double	dValueOld	=	m_pStrategy->RealGetCurrentCash();
		
		OPRECORD	record;
		memset( &record, 0, sizeof(record) );
		CSPTime	tmNow	=	CSPTime::GetCurrentTime();
		CSPTime	tmDay	=	CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 );
		record.time		=	tmDay.GetTime();
		if( dValue > dValueOld )
			record.lOpType	=	STRATEGY_OPTYPE_ADDCASH;
		else
			record.lOpType	=	STRATEGY_OPTYPE_REMOVECASH;
		record.dSharePrice	=	fabs(dValue-dValueOld);
		if( m_pStrategy->RealOperate( record ) )
			Initialize( );
		else
			AfxMessageBox( IDS_SIMUREALOP_MODIFIEDCASHFAILED, MB_OK|MB_ICONINFORMATION );
		m_bModified	=	TRUE;
	}
}
Пример #3
0
/***
	手动移除拥有股票
*/
void CSimuRealOp::OnDeletestock() 
{
	// TODO: Add your control notification handler code here
	if( m_pStrategy && m_listStockOwn.IsWindowVisible() )
	{
		int	nSelected	=	m_listStockOwn.GetSelected();
		if( -1 == nSelected )
		{
			AfxMessageBox( IDS_SIMUREALOP_OPRECORDNOSEL, MB_OK | MB_ICONINFORMATION );
			return;
		}

		int	nStock	=	m_listStockOwn.GetItemData( nSelected );
		CStockOwnContainer	& stockown	=	m_pStrategy->RealGetStockOwn();
		BOOL	bOK	=	FALSE;
		if( nStock >= 0 && nStock < stockown.GetSize() )
		{
			OPRECORD	record;
			memset( &record, 0, sizeof(record) );
			CSPTime	tmNow	=	CSPTime::GetCurrentTime();
			CSPTime	tmDay	=	CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 );
			record.time		=	tmDay.GetTime();
			record.lOpType	=	STRATEGY_OPTYPE_REMOVESTOCK;
			strncpy( record.szCode, stockown.ElementAt(nStock).szCode, sizeof(record.szCode) );
			record.dwShare	=	stockown.ElementAt(nStock).dwShare;
			bOK		=	m_pStrategy->RealOperate( record );
			Initialize( );
			m_bModified	=	TRUE;
		}
		
		if( !bOK )
			AfxMessageBox( IDS_SIMUREALOP_CANNOTDELETE, MB_OK | MB_ICONINFORMATION );
	}
}
Пример #4
0
/***
	手动加入拥有股票
*/
void CSimuRealOp::OnAddstock() 
{
	CSimuAddStockDlg	dlg;
	dlg.SetStrategy( m_pStrategy );
	dlg.SetMode( CSimuAddStockDlg::modeAddStock, "", 0, 0 );
	if( IDOK == dlg.DoModal( ) )
	{
		CString	strStockCode	=	dlg.GetStockCode();
		double	dShare			=	dlg.GetValue();
		double	dSharePrice		=	dlg.GetPrice();
		
		OPRECORD	record;
		memset( &record, 0, sizeof(record) );
		CSPTime	tmNow	=	CSPTime::GetCurrentTime();
		CSPTime	tmDay	=	CSPTime( tmNow.GetYear(), tmNow.GetMonth(), tmNow.GetDay(), 0, 0, 0 );
		record.time		=	tmDay.GetTime();
		record.lOpType	=	STRATEGY_OPTYPE_ADDSTOCK;
		strncpy( record.szCode, strStockCode.GetBuffer(sizeof(record.szCode)+1), sizeof(record.szCode) );
		strStockCode.ReleaseBuffer();
		record.dwShare	=	(DWORD)dShare;
		record.dSharePrice	=	dSharePrice;
		if( m_pStrategy->RealOperate( record ) )
			Initialize( );
		else
			AfxMessageBox( IDS_SIMUREALOP_ADDSTOCKFAILED, MB_OK|MB_ICONINFORMATION );
		m_bModified	=	TRUE;
	}
}
Пример #5
0
time_t CSPTime::GetTimeTradeLatest( time_t tmTradeFirstToday )
{
	CSPTime	tNow	=	CSPTime::GetCurrentTime();
	CSPTime	tTradeFirstToday( tmTradeFirstToday );
	time_t	tmTradeLatest	=	-1;

	int	nYear	= tTradeFirstToday.GetYear();
	int nMonth	= tTradeFirstToday.GetMonth();
	int	nDay	= tTradeFirstToday.GetDay();

	if( tNow > tTradeFirstToday
		&& tNow.GetYear() == nYear && tNow.GetMonth() == nMonth && tNow.GetDay() == nDay )
	{
		tmTradeLatest	=	tNow.GetTime();
		if( (tNow.GetHour() == 11 && tNow.GetMinute() >= 30)
			|| tNow.GetHour() == 12 )
			tmTradeLatest	=	CSPTime(nYear,nMonth,nDay,11,30,0).GetTime();
		else if( tNow.GetHour() >= 15 )
			tmTradeLatest	=	CSPTime(nYear,nMonth,nDay,15,0,0).GetTime();
	}
	else if( tNow > tTradeFirstToday )
		tmTradeLatest	=	CSPTime(nYear,nMonth,nDay,15,0,0).GetTime();
	
	return tmTradeLatest;
}
Пример #6
0
int CKData::DayToMonth( CKData &kdday, CKData &kdmonth )
{
	// convert day k line to month k line
	SP_ASSERT( ktypeDay == kdday.GetKType() );
	SP_ASSERT( ktypeMonth == kdmonth.GetKType() );

	kdmonth.SetSize( 0, kdday.GetSize() / 20 + 5 );
	
	int nStart		=	kdday.GetSize() % 3;
	int	nCount		=	0;
	KDATA	dataDest;
	memset( &dataDest, 0, sizeof(dataDest) );
	int	nYearCur = 0, nMonthCur = 0 ;
	for( int pos=nStart; pos<kdday.GetSize(); pos++ )
	{
		KDATA & dataSrc = kdday.ElementAt( pos );

		CSPTime	tm;
		if( !tm.FromStockTimeDay(dataSrc.m_date) )
			continue;
		int nYear	=	tm.GetYear();
		int nMonth	=	tm.GetMonth();

		if( nYear != nYearCur || nMonth != nMonthCur )	// a new month
		{
			if( 0 != pos )
				kdmonth.Add( dataDest );				// add a month

			memcpy( &dataDest, &dataSrc, sizeof(dataDest) );	// begin a new month
			nYearCur	=	nYear;
			nMonthCur	=	nMonth;
		}
		else
		{
			dataDest.m_fAmount		+=	dataSrc.m_fAmount;
			if( dataDest.m_fHigh < dataSrc.m_fHigh )	dataDest.m_fHigh	=	dataSrc.m_fHigh;
			if( dataDest.m_fLow > dataSrc.m_fLow )		dataDest.m_fLow		=	dataSrc.m_fLow;
			dataDest.m_fVolume		+=	dataSrc.m_fVolume;
			dataDest.m_fClose		=	dataSrc.m_fClose;
		}

		if( pos == kdday.GetSize()-1 )	// the latest one
			kdmonth.Add( dataDest );
	}

	return kdmonth.GetSize();
}
Пример #7
0
DWORD CSPTime::GetStockTimeNext( DWORD dwDate, int ktype, DWORD dwYear )
{
	CSPTime	sptime;
	if( ktype == ktypeDay )
	{
		if( !sptime.FromStockTimeDay( dwDate ) )
			return -1;
		if( 6 == sptime.GetDayOfWeek() )	//	Friday
			sptime	+=	CSPTimeSpan(3,0,0,0);
		else
			sptime	+=	CSPTimeSpan(1,0,0,0);
		return sptime.ToStockTimeDay();
	}
	else if( ktype == ktypeWeek )
	{
		if( !sptime.FromStockTimeDay( dwDate ) )
			return -1;
		sptime	+=	CSPTimeSpan(7,0,0,0);
		return sptime.ToStockTimeDay();
	}
	else if( ktype == ktypeMonth )
	{
		if( !sptime.FromStockTimeDay( dwDate ) )
			return -1;
		int	nYearNew	=	sptime.GetYear();
		int nMonthNew	=	sptime.GetMonth();
		nYearNew	=	( nMonthNew >= 12 ? nYearNew+1 : nYearNew );
		nMonthNew	=	( nMonthNew >= 12 ? 1 : nMonthNew+1 );
		CSPTime	sptime2( nYearNew, nMonthNew, sptime.GetDay(), sptime.GetHour(),sptime.GetMinute(), sptime.GetSecond() );

		if( 6 == sptime2.GetDayOfWeek() )	//	Friday
			sptime2	+=	CSPTimeSpan(3,0,0,0);
		else
			sptime2	+=	CSPTimeSpan(1,0,0,0);
		return sptime2.ToStockTimeDay();
	}
	else if( ktype == ktypeMin5 )
	{
		if( !sptime.FromStockTimeMin( dwDate ) )
			return -1;
		if( sptime.GetHour() == 11 && sptime.GetMinute() >= 25 )
			sptime	+=	CSPTimeSpan(0,1,35,0);
		else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 55 )
			sptime	+=	CSPTimeSpan(0,18,35,0);
		else
			sptime	+=	CSPTimeSpan(0,0,5,0);
		return sptime.ToStockTimeMin();
	}
	else if( ktype == ktypeMin15 )
	{
		if( !sptime.FromStockTimeMin( dwDate ) )
			return -1;
		if( sptime.GetHour() == 11 && sptime.GetMinute() >= 15 )
			sptime	+=	CSPTimeSpan(0,1,45,0);
		else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 45 )
			sptime	+=	CSPTimeSpan(0,18,45,0);
		else
			sptime	+=	CSPTimeSpan(0,0,15,0);
		return sptime.ToStockTimeMin();
	}
	else if( ktype == ktypeMin30 )
	{
		if( !sptime.FromStockTimeMin( dwDate ) )
			return -1;
		if( sptime.GetHour() == 11 && sptime.GetMinute() >= 0 )
			sptime	+=	CSPTimeSpan(0,2,0,0);
		else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 30 )
			sptime	+=	CSPTimeSpan(0,19,0,0);
		else
			sptime	+=	CSPTimeSpan(0,0,30,0);
		return sptime.ToStockTimeMin();
	}
	else if( ktype == ktypeMin60 )
	{
		if( !sptime.FromStockTimeMin( dwDate ) )
			return -1;
		if( (sptime.GetHour() == 10 && sptime.GetMinute() >= 30) || sptime.GetHour() == 11 )
			sptime	+=	CSPTimeSpan(0,2,30,0);
		else if( sptime.GetHour() == 14 && sptime.GetMinute() >= 0 )
			sptime	+=	CSPTimeSpan(0,19,30,0);
		else
			sptime	+=	CSPTimeSpan(0,1,0,0);
		return sptime.ToStockTimeMin();
	}
	else
	{
		ASSERT( FALSE );
		return -1;
	}
}