亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? minute.cpp

?? 股票軟件
?? CPP
字號:
/*
	Cross Platform Core Code.

	Copyright(R) 2001-2002 Balang Software.
	All rights reserved.

	Using:
		class	CMinute;
*/

#include	"StdAfx.h"
#include	"Stock.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#ifdef	_DEBUG
#define	new	DEBUG_NEW
#endif

/////////////////////////////////////////////////////////////////////////////

CMinute::CMinute()
{
	m_pData = NULL;
	m_nSize = m_nMaxSize = m_nGrowBy = 0;
}

CMinute::CMinute( const CMinute &src )
{
	m_pData = NULL;
	m_nSize = m_nMaxSize = m_nGrowBy = 0;

	*this	=	src;
}

CMinute::~CMinute()
{
	if( m_pData )
		delete [] (BYTE*)m_pData;
}

void CMinute::SetSize(int nNewSize, int nGrowBy /* = -1 */)
{
	SP_ASSERT(nNewSize >= 0);

	if (nGrowBy != -1)
		m_nGrowBy = nGrowBy;  // set new size

	if (nNewSize == 0)
	{
		// shrink to nothing
		delete [] (BYTE*)m_pData;
		m_pData = NULL;
		m_nSize = m_nMaxSize = 0;
	}
	else if (m_pData == NULL)
	{
		// create one with exact size
#ifdef SIZE_T_MAX
		SP_ASSERT((long)nNewSize * sizeof(MINUTE) <= SIZE_T_MAX);  // no overflow
#endif
		m_pData = (MINUTE*) new BYTE[nNewSize * sizeof(MINUTE)];

		memset(m_pData, 0, nNewSize * sizeof(MINUTE));  // zero fill

		m_nSize = m_nMaxSize = nNewSize;
	}
	else if (nNewSize <= m_nMaxSize)
	{
		// it fits
		if (nNewSize > m_nSize)
		{
			// initialize the new elements

			memset(&m_pData[m_nSize], 0, (nNewSize-m_nSize) * sizeof(MINUTE));

		}

		m_nSize = nNewSize;
	}
	else
	{
		// Otherwise grow array
		int nNewMax;
		if (nNewSize < m_nMaxSize + m_nGrowBy)
			nNewMax = m_nMaxSize + m_nGrowBy;  // granularity
		else
			nNewMax = nNewSize;  // no slush

#ifdef SIZE_T_MAX
		SP_ASSERT((long)nNewMax * sizeof(MINUTE) <= SIZE_T_MAX);  // no overflow
#endif
		MINUTE* pNewData = (MINUTE*) new BYTE[nNewMax * sizeof(MINUTE)];

		// copy new data from old
		memcpy(pNewData, m_pData, m_nSize * sizeof(MINUTE));

		// construct remaining elements
		SP_ASSERT(nNewSize > m_nSize);

		memset(&pNewData[m_nSize], 0, (nNewSize-m_nSize) * sizeof(MINUTE));


		// get rid of old stuff (note: no destructors called)
		delete [] (BYTE*)m_pData;
		m_pData = pNewData;
		m_nSize = nNewSize;
		m_nMaxSize = nNewMax;
	}
}

void CMinute::FreeExtra()
{
	if (m_nSize != m_nMaxSize)
	{
		// shrink to desired size
#ifdef SIZE_T_MAX
		SP_ASSERT((long)m_nSize * sizeof(MINUTE) <= SIZE_T_MAX);  // no overflow
#endif
		MINUTE* pNewData = NULL;
		if (m_nSize != 0)
		{
			pNewData = (MINUTE*) new BYTE[m_nSize * sizeof(MINUTE)];
			// copy new data from old
			memcpy(pNewData, m_pData, m_nSize * sizeof(MINUTE));
		}

		// get rid of old stuff (note: no destructors called)
		delete [] (BYTE*)m_pData;
		m_pData = pNewData;
		m_nMaxSize = m_nSize;
	}
}

/////////////////////////////////////////////////////////////////////////////

void CMinute::SetAtGrow(int nIndex, MINUTE newElement)
{
	SP_ASSERT(nIndex >= 0);

	if (nIndex >= m_nSize)
		SetSize(nIndex+1);
	m_pData[nIndex] = newElement;
}

void CMinute::InsertAt(int nIndex, MINUTE newElement, int nCount /*=1*/)
{
	SP_ASSERT(nIndex >= 0);    // will expand to meet need
	SP_ASSERT(nCount > 0);     // zero or negative size not allowed

	if (nIndex >= m_nSize)
	{
		// adding after the end of the array
		SetSize(nIndex + nCount);  // grow so nIndex is valid
	}
	else
	{
		// inserting in the middle of the array
		int nOldSize = m_nSize;
		SetSize(m_nSize + nCount);  // grow it to new size
		// shift old data up to fill gap
		memmove(&m_pData[nIndex+nCount], &m_pData[nIndex],
			(nOldSize-nIndex) * sizeof(MINUTE));

		// re-init slots we copied from

		memset(&m_pData[nIndex], 0, nCount * sizeof(MINUTE));

	}

	// insert new value in the gap
	SP_ASSERT(nIndex + nCount <= m_nSize);
	while (nCount--)
		m_pData[nIndex++] = newElement;
}

void CMinute::RemoveAt(int nIndex, int nCount /* = 1 */)
{
	SP_ASSERT(nIndex >= 0);
	SP_ASSERT(nCount >= 0);
	SP_ASSERT(nIndex + nCount <= m_nSize);

	// just remove a range
	int nMoveCount = m_nSize - (nIndex + nCount);

	if (nMoveCount)
		memcpy(&m_pData[nIndex], &m_pData[nIndex + nCount],
			nMoveCount * sizeof(MINUTE));
	m_nSize -= nCount;
}

int CMinute::InsertMinuteSort( MINUTE newElement )
{
	if( newElement.m_time <= 0 )
		return -1;
	else if( newElement.m_fNew < 1e-4 )
		return -1;
	else if( newElement.m_fVolume < 1e-4 )
		return -1;
	else if( !CSPTime::InTradeTime( newElement.m_time, 60 ) )
		return -1;

	time_t tmBegin = 0;
	if( GetSize() > 0 )
	{
		time_t tmLatest = ElementAt(GetSize()-1).m_time;
		CSPTime	sptime(tmLatest);
		CSPTime	sptimeBegin(sptime.GetYear(),sptime.GetMonth(),sptime.GetDay(),0,0,0);
		tmBegin = sptimeBegin.GetTime();
	}
	if( newElement.m_time <= tmBegin )
		return -1;

	for( int i=GetSize()-1; i>=0; i-- )
	{
		MINUTE	& temp = ElementAt(i);
		if( newElement.m_time == temp.m_time )
		{
			SetAt(i,newElement);
			return i;
		}
		if( newElement.m_time > temp.m_time )
		{
			InsertAt(i+1,newElement);
			return i+1;
		}
	}

	InsertAt( 0, newElement );
	return 0;
}

int SortMinute(const void *p1,const void *p2)
{
	MINUTE *pTemp1 = (MINUTE *)p1;
	MINUTE *pTemp2 = (MINUTE *)p2;

	if( pTemp1 && pTemp2 && pTemp1->m_time < pTemp2->m_time )
		return -1;
	else if( pTemp1 && pTemp2 && pTemp1->m_time > pTemp2->m_time )
		return 1;
	return 0;
}

void CMinute::Sort( )
{
	if( m_pData )
		qsort( m_pData, GetSize(), sizeof(MINUTE), SortMinute );
}

void CMinute::RemoveDirty( )
{
	time_t tmBegin = 0;
	if( GetSize() > 0 )
	{
		time_t tmLatest = ElementAt(GetSize()-1).m_time;
		CSPTime	sptime(tmLatest);
		CSPTime	sptimeBegin(sptime.GetYear(),sptime.GetMonth(),sptime.GetDay(),0,0,0);
		tmBegin = sptimeBegin.GetTime();
	}

	for( int i=GetSize()-1; i>=0; i-- )
	{
		if( ElementAt(i).m_time <= 0 )
			RemoveAt(i);
		else if( ElementAt(i).m_fNew < 1e-4 )
			RemoveAt(i);
		else if( ElementAt(i).m_fVolume < 1e-4 )
			RemoveAt(i);
		else if( !CSPTime::InTradeTime( ElementAt(i).m_time, 60 ) )
			RemoveAt(i);
		else if( ElementAt(i).m_time < tmBegin )
			RemoveAt(i);
		else if( i>1 && ElementAt(i).m_time == ElementAt(i-1).m_time )
			RemoveAt(i);
	}
}

void CMinute::InsertAt(int nStartIndex, CMinute* pNewArray)
{
	SP_ASSERT(pNewArray != NULL);
	SP_ASSERT(nStartIndex >= 0);

	if (pNewArray->GetSize() > 0)
	{
		InsertAt(nStartIndex, pNewArray->GetAt(0), pNewArray->GetSize());
		for (int i = 0; i < pNewArray->GetSize(); i++)
			SetAt(nStartIndex + i, pNewArray->GetAt(i));
	}
}

CMinute	& CMinute::operator = ( const CMinute &src )
{
	Copy( src );
	return	*this;
}

void CMinute::Copy( const CMinute &src )
{
	SetSize( 0, src.GetSize()+5 );
	for( int i=0; i<src.GetSize(); i++ )
	{
		Add( src.GetAt(i) );
	}
}

BOOL CMinute::StatVolumeInfo( double *pdVolNow, double *pdVolOuter, double *pdVolInner )
{
	time_t	tmLatest	=	0;
	double	dVolNow = 0, dVolOuter = 0, dVolInner = 0;
	double	dPriceLast	=	-1;
	BOOL	bRise		=	TRUE;
	for( int k=0; k<GetSize(); k++ )
	{
		if( ElementAt(k).m_time > tmLatest )
		{
			tmLatest	=	ElementAt(k).m_time;
			dVolNow		=	ElementAt(k).m_fVolume;
		}
		double	dPrice	=	ElementAt(k).m_fNew;
		if( 0 != k )
		{
			double	dVolume	=	ElementAt(k).m_fVolume - ElementAt(k-1).m_fVolume;
			if( dPrice - dPriceLast > 1e-4 )
				bRise	=	TRUE;
			if( dPrice - dPriceLast < -1e-4 )
				bRise	=	FALSE;
			if( bRise )	dVolOuter	+=	dVolume;
			else		dVolInner	+=	dVolume;
		}
		dPriceLast	=	dPrice;
	}

	if( pdVolNow )
		*pdVolNow = dVolNow;
	if( pdVolOuter )
		*pdVolOuter = dVolOuter;
	if( pdVolInner )
		*pdVolInner = dVolInner;
	return TRUE;
}

BOOL CMinute::StatDealInfo( CSPDWordArray & adwPrice, CSPDWordArray & adwVolume, double * pdMaxVolume )
{
	adwPrice.RemoveAll();
	adwVolume.RemoveAll();

	int k=0;

	for(  k=0; k<GetSize(); k++ )
		adwPrice.AddUnique( DWORD(ElementAt(k).m_fNew * 1000) );
	adwPrice.Sort( );

	adwVolume.SetSize( adwPrice.GetSize() );
	for(  k=0; k<GetSize(); k++ )
	{
		DWORD	dwPrice		=	DWORD(ElementAt(k).m_fNew * 1000);
		DWORD	dwVolume	=	DWORD(ElementAt(k).m_fVolume);
		if( k > 0 )
			dwVolume	=	DWORD( ElementAt(k).m_fVolume - ElementAt(k-1).m_fVolume );

		int i;
		for( i=0; i<adwPrice.GetSize(); i++ )
		{
			if( adwPrice[i] == dwPrice )
				break;
		}
		if( i >= adwPrice.GetSize() )
			continue;

		adwVolume[i]	+=	dwVolume;
	}

	double	dMaxVolume = 0;
	for(  k=0; k<adwVolume.GetSize(); k++ )
	{
		if( dMaxVolume < (double)adwVolume[k] )
			dMaxVolume	=	(double)adwVolume[k];
	}
	if( pdMaxVolume )
		*pdMaxVolume	=	dMaxVolume;

	return adwPrice.GetSize() > 0;
}

BOOL CMinute::GetDiffPercentMin5( double * pValue )
{
	if( GetSize( ) < 2 )
		return FALSE;
	MINUTE	& minCurrent = ElementAt(GetSize()-1);
	for( int i=GetSize()-2; i>=0; i-- )
	{
		LONG	l	=	minCurrent.m_time - ElementAt(i).m_time;
		if( l >= 200 && l <= 600 )
		{
			if( ElementAt(i).m_fNew > 1e-4 && minCurrent.m_fNew > 1e-4 )
			{
				if( pValue )	*pValue	=	100*minCurrent.m_fNew / ElementAt(i).m_fNew - 100;
				return TRUE;
			}
			break;
		}
	}

	return FALSE;
}

BOOL CMinute::GetLBDKMinMaxInfo( double dVolAverage, double *pdMin, double *pdMax )
{
	if( dVolAverage < 1e-4 )
		return FALSE;
	
	double	dMulti	=	1 / dVolAverage;
	double	dMin = 0, dMax = 1;
	for( int i=0; i<GetSize(); i++ )
	{
		CSPTime	sptime(ElementAt(i).m_time);
		double	dCurrent = dMulti * ElementAt(i).m_fVolume / CSPTime::GetTimeTradeRatioOfOneDay( sptime, sptime );
		if( 0 == i )
		{
			dMin	=	dCurrent;
			dMax	=	dCurrent;
		}
		if( dCurrent < dMin )	dMin	=	dCurrent;
		if( dCurrent > dMax )	dMax	=	dCurrent;
	}

	if( dMax < 1e-4 )	// 數據為零,缺省dMax=1
		dMax	=	1;
	if( pdMin )	*pdMin	=	dMin;
	if( pdMax )	*pdMax	=	dMax;
	return TRUE;
}

BOOL CMinute::GetIndexWave( double *pdWave, int nIndex )
{
	double dWave = 0;
	for( int k=nIndex-12; k<=nIndex; k++ )
	{
		if( k > 0 && k < GetSize() )
			dWave	+=	ElementAt(k).m_fNew - ElementAt(k-1).m_fNew;
	}
	if( pdWave )
		*pdWave	=	dWave;
	return TRUE;
}

int CMinute::ToKData( CKData & kdata )
{
	// WILLCHECK

	kdata.Clear();
	if( GetSize() <= 0 )
		return 0;
	DWORD dwType = ElementAt(0).m_dwType;
	if( 5 == dwType || 15 == dwType || 30 == dwType || 60 == dwType )
	{
		if( 5 == dwType )
			kdata.SetKType(CKData::ktypeMin5);
		else if( dwType )
			kdata.SetKType(CKData::ktypeMin15);
		else if( 30 == dwType )
			kdata.SetKType(CKData::ktypeMin30);
		else if( 60 == dwType )
			kdata.SetKType(CKData::ktypeMin60);
		kdata.SetSize( 0, GetSize() + 1 );
		for( int i=0; i<GetSize(); i++ )
		{
			MINUTE & min = ElementAt(i);
			KDATA	kd;
			memset( &kd, 0, sizeof(kd) );
			kd.m_dwMarket	= min.m_dwMarket;
			strncpy( kd.m_szCode, min.m_szCode, sizeof(kd.m_szCode)-1 );
			kd.m_time		= min.m_time;
			CSPTime sptime(min.m_time);
			kd.m_date		= sptime.ToStockTimeMin();
			kd.m_fOpen		= (min.m_fHigh+min.m_fLow+min.m_fNew)/3;
			kd.m_fHigh		= min.m_fHigh;
			kd.m_fLow		= min.m_fLow;
			kd.m_fClose		= min.m_fNew;
			kd.m_fVolume	= min.m_fVolume;
			kd.m_fAmount	= min.m_fAmount;
			kdata.Add( kd );
		}
		return kdata.GetSize();
	}

	kdata.SetKType(CKData::ktypeMin5);
	kdata.SetSize( 0, GetSize() / 5 + 5 );

	int	nCount	=	0;
	KDATA	kd;
	for( int pos=0; pos<GetSize(); pos++ )
	{
		MINUTE & min = ElementAt( pos );

		nCount	++;
		if( 1 == nCount )
		{
			memset( &kd, 0, sizeof(kd) );
			kd.m_dwMarket	= min.m_dwMarket;
			strncpy( kd.m_szCode, min.m_szCode, sizeof(kd.m_szCode)-1 );
			kd.m_fOpen		= min.m_fNew;
			kd.m_fHigh		= min.m_fHigh;
			kd.m_fLow		= min.m_fLow;
			kd.m_fClose		= min.m_fNew;
			kd.m_fVolume	= min.m_fVolume;
			kd.m_fAmount	= min.m_fAmount;
		}
		else
		{
			if( kd.m_fHigh < min.m_fHigh )	kd.m_fHigh	=	min.m_fHigh;
			if( kd.m_fLow > min.m_fLow )	kd.m_fLow	=	min.m_fLow;
			kd.m_fAmount	+=	min.m_fAmount;
			kd.m_fVolume	+=	min.m_fVolume;
			kd.m_fClose		=	min.m_fNew;
		}

		CSPTime sptime(min.m_time);
		DWORD date	= sptime.ToStockTimeMin();
		if( !(date % 5) )
		{
			kd.m_time = min.m_time;
			kd.m_date = date;
			kdata.Add( kd );
			nCount = 0;
		}
	}
	
	return kdata.GetSize();
}
/////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜不卡av免费| 三级久久三级久久| 亚洲欧美日韩一区二区 | 日本不卡不码高清免费观看| 视频一区二区三区中文字幕| 免费成人深夜小野草| 成人免费毛片片v| 色婷婷av一区二区三区大白胸| 欧美日韩视频不卡| 久久免费偷拍视频| 亚洲激情第一区| 成人黄色在线网站| 欧美日韩国产综合视频在线观看 | 国内精品自线一区二区三区视频| 国产精品一区三区| 91精品国产综合久久香蕉麻豆 | 不卡一区在线观看| 日韩视频一区二区三区| 中文字幕一区二区三区精华液| 丝袜美腿亚洲综合| 欧美综合在线视频| 国产精品二三区| 国产成人在线观看| 91精品一区二区三区在线观看| 综合久久久久久久| 成人性色生活片| 国产日韩欧美亚洲| 久久色视频免费观看| 制服丝袜成人动漫| 国产精品无码永久免费888| 亚洲天堂成人网| 国产福利不卡视频| 久久久久国产精品厨房| 亚洲不卡av一区二区三区| 色综合天天综合网天天看片| 26uuu国产日韩综合| 日韩**一区毛片| 91精品国产综合久久久蜜臀图片| 亚洲欧美日韩国产一区二区三区| 粉嫩绯色av一区二区在线观看| 日韩午夜小视频| 成人一区二区三区视频在线观看 | 天天色 色综合| 欧美丰满少妇xxxbbb| 视频一区免费在线观看| 日韩欧美国产三级| 国产在线播精品第三| 欧美国产精品一区| www.日韩大片| 婷婷综合久久一区二区三区| 欧美久久久久久蜜桃| 国内精品自线一区二区三区视频| 国产偷国产偷精品高清尤物 | 一区二区三区在线视频观看| 欧美日韩免费观看一区三区| 青青草97国产精品免费观看无弹窗版| 日韩欧美视频在线| 国产成人av网站| 一区二区三区欧美久久| 欧美电影免费观看高清完整版在 | 成人激情校园春色| 亚洲永久免费视频| 久久色.com| 欧美日韩午夜精品| 欧美视频第二页| 国产一区二区0| 亚洲1区2区3区视频| 国产精品久久久久毛片软件| 日韩欧美一区二区不卡| 一本大道久久a久久综合| 激情欧美日韩一区二区| 亚洲电影在线播放| 国产精品免费视频网站| 久久你懂得1024| 日韩一级大片在线| 91精品欧美福利在线观看 | 中文av一区二区| 久久先锋影音av| 精品福利一二区| 欧美成人伊人久久综合网| 欧美日精品一区视频| 国产伦精一区二区三区| 极品少妇xxxx精品少妇偷拍| 男人的j进女人的j一区| 亚洲国产综合色| 石原莉奈一区二区三区在线观看| 亚洲视频狠狠干| 亚洲国产一区二区视频| 亚洲一区二区在线免费观看视频| 一区二区三区在线观看欧美| 亚洲一区二区三区四区的| 久久www免费人成看片高清| 欧美xxxxx牲另类人与| 欧美精品一区二区三区蜜桃| 日韩欧美一卡二卡| 中文字幕在线观看一区| 一区二区三区四区亚洲| 美女久久久精品| 9人人澡人人爽人人精品| 欧美日韩一级黄| 久久蜜桃av一区精品变态类天堂| 国产精品的网站| 香蕉乱码成人久久天堂爱免费| 免费的成人av| 欧美综合久久久| 久久久噜噜噜久久人人看| 亚洲精品欧美综合四区| 国产美女精品人人做人人爽| 在线观看91视频| 国产精品国产三级国产aⅴ原创| 三级一区在线视频先锋| 成人国产精品免费观看| 欧美成人一区二区三区在线观看| 一区二区三区四区在线| 成人av午夜电影| 国产日本亚洲高清| 狠狠色狠狠色综合系列| 日韩亚洲欧美高清| 免费的成人av| 精品国产一区二区亚洲人成毛片 | 99精品久久免费看蜜臀剧情介绍| 欧美人动与zoxxxx乱| 午夜不卡在线视频| 欧美情侣在线播放| 午夜免费欧美电影| 欧美日本国产视频| 日韩国产一二三区| 欧美一区三区四区| 久久国产精品色婷婷| 精品国产一区二区三区四区四| 蜜桃一区二区三区在线| 欧美精品一区二区在线观看| 激情综合色综合久久| 国产欧美视频一区二区| 成人一区在线观看| 亚洲国产精品影院| 4438亚洲最大| 国产91精品一区二区麻豆网站 | 欧美主播一区二区三区美女| 偷拍日韩校园综合在线| 日韩一区二区三区视频在线| 国产精品88av| 午夜影视日本亚洲欧洲精品| 欧美大黄免费观看| 成人美女在线视频| 1024成人网色www| 日韩久久精品一区| 96av麻豆蜜桃一区二区| 美女视频一区在线观看| 国产精品久久网站| 日韩欧美二区三区| 欧美亚洲高清一区| 韩国成人精品a∨在线观看| 亚洲一线二线三线久久久| 久久精品夜色噜噜亚洲aⅴ| 91精品国模一区二区三区| 色综合久久久网| 国产高清不卡二三区| 日韩国产欧美在线视频| 亚洲欧美一区二区久久| 久久九九99视频| 国产亚洲欧美色| 久久久国际精品| www国产亚洲精品久久麻豆| 在线不卡免费av| 欧美午夜电影网| 在线观看一区不卡| 色综合视频一区二区三区高清| proumb性欧美在线观看| 成人小视频在线| 91老师国产黑色丝袜在线| 成人av电影在线网| 成人激情综合网站| www.色精品| 精品视频全国免费看| 在线成人免费视频| 日韩一区二区不卡| 久久人人爽人人爽| 国产精品天干天干在线综合| 中文字幕一区在线观看视频| 亚洲激情图片一区| 日韩电影在线观看一区| 国产在线不卡一区| 99久久精品国产观看| 欧美日韩成人激情| 精品国内片67194| 日韩码欧中文字| 免费人成在线不卡| 国产最新精品精品你懂的| 色哟哟国产精品| 国产丝袜欧美中文另类| 亚洲六月丁香色婷婷综合久久| 日韩1区2区3区| 91视频观看视频| 久久久久久久精| 日韩电影在线一区二区三区| 成人av电影在线播放| 日韩一区二区三区观看| 中文字幕一区二区三区精华液| 久久精品国产99国产精品|