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

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

?? techtrend.cpp

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

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

*/

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

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

#ifdef	_DEBUG
#define	new	DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
//	CMACD
CMACD::CMACD( )
{
	SetDefaultParameters( );
}

CMACD::CMACD( CKData * pKData )
	: CTechnique( pKData )
{
	SetDefaultParameters( );
}

CMACD::~CMACD()
{
	Clear( );
}

void CMACD::SetDefaultParameters( )
{
	m_nEMA1Days	=	12;
	m_nEMA2Days	=	26;
	m_nDIFDays	=	9;

	m_itsDeviateOnBottom	=	ITS_BUYINTENSE;
	m_itsDeviateOnTop		=	ITS_SELLINTENSE;
	m_itsGoldenFork			=	ITS_BUY;
	m_itsDeadFork			=	ITS_SELL;
}

void CMACD::AttachParameters( CMACD & src )
{
	m_nEMA1Days	=	src.m_nEMA1Days;
	m_nEMA2Days	=	src.m_nEMA2Days;
	m_nDIFDays	=	src.m_nDIFDays;

	m_itsDeviateOnBottom	=	src.m_itsDeviateOnBottom;
	m_itsDeviateOnTop		=	src.m_itsDeviateOnTop;
	m_itsGoldenFork			=	src.m_itsGoldenFork;
	m_itsDeadFork			=	src.m_itsDeadFork;
}

BOOL CMACD::IsValidParameters( )
{
	return ( VALID_DAYS(m_nEMA1Days) && VALID_DAYS(m_nEMA2Days) && VALID_DAYS(m_nDIFDays)
		&& VALID_ITS(m_itsDeviateOnBottom) && VALID_ITS(m_itsDeviateOnTop)
		&& VALID_ITS(m_itsGoldenFork) && VALID_ITS(m_itsDeadFork) );
}

void CMACD::Clear( )
{
	CTechnique::Clear( );
}

int CMACD::GetSignal( int nIndex, UINT * pnCode )
{
	if( pnCode )	*pnCode	=	ITSC_NOTHING;
	PrepareCache( 0, -1, FALSE );

	int	nMaxDays	=	max( max(m_nEMA1Days,m_nEMA2Days) , m_nDIFDays );
	double	dLiminalLow = 0, dLiminalHigh = 0;
	if( !IntensityPrepare( nIndex, pnCode, nMaxDays, ITS_GETMINMAXDAYRANGE, &dLiminalLow, &dLiminalHigh, 0.309, 0.682 ) )
		return ITS_NOTHING;

	double	dEMA1, dEMA2, dDIF, dDEA;
	if( !Calculate( &dEMA1, &dEMA2, &dDIF, &dDEA, nIndex, FALSE ) )
		return ITS_NOTHING;

	if( IsDeviateOnBottom( nIndex, m_pdCache3, m_pdCache4 ) )
	{	// 底背離
		if( pnCode )	*pnCode	=	ITSC_DEVIATEONBOTTOM;
		return m_itsDeviateOnBottom;
	}
	if( IsDeviateOnTop( nIndex, m_pdCache3, m_pdCache4 ) )
	{	// 頂背離
		if( pnCode )	*pnCode	=	ITSC_DEVIATEONTOP;
		return m_itsDeviateOnTop;
	}
	if( dDIF < dLiminalLow && dDEA < dLiminalLow && IsGoldenFork( nIndex, m_pdCache3, m_pdCache4 ) )
	{	// 低位金叉
		if( pnCode )	*pnCode	=	ITSC_GOLDENFORK;
		return m_itsGoldenFork;
	}
	if( dDIF > dLiminalHigh && dDEA > dLiminalHigh && IsDeadFork( nIndex, m_pdCache3, m_pdCache4 ) )
	{	// 高位死叉
		if( pnCode )	*pnCode	=	ITSC_DEADFORK;
		return m_itsDeadFork;
	}
	if( dDIF < dLiminalLow && dDEA < dLiminalLow )
	{	// 低位
		if( pnCode )	*pnCode	=	ITSC_GOLDENFORK;
		return m_itsGoldenFork;
	}
	if( dDIF > dLiminalHigh && dDEA > dLiminalHigh )
	{	// 高位
		if( pnCode )	*pnCode	=	ITSC_DEADFORK;
		return m_itsDeadFork;
	}

	return	ITS_NOTHING;
}

/***
	EMA  = 短期移動均值
	EMA2 = 長期移動均值
	DIF  = 短期移動均值 - 長期移動均值
	DEA  = DIF的移動平滑值
	柱狀線值 = DIF - DEA
*/
BOOL CMACD::GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax )
{
	STT_ASSERT_GETMINMAXINFO( m_pKData, nStart, nEnd );

	double	dMin = 0, dMax = 0;
	double	dEMA1 = 0, dEMA2 = 0, dDIF = 0, dDEA = 0;
	BOOL	bFirst	=	TRUE;
	for( int k=nStart; k<=nEnd; k++ )
	{
		if( Calculate( &dEMA1, &dEMA2, &dDIF, &dDEA, k, !bFirst ) )
		{
			if( bFirst )	{	dMin	=	dDIF;	dMax	=	dDIF;	}
			
			if( dDIF < dMin )	dMin	=	dDIF;
			if( dDEA < dMin )	dMin	=	dDEA;
			if( 2*(dDIF-dDEA) < dMin )	dMin	=	2*(dDIF-dDEA); // WARNING: different

			if( dDIF > dMax )	dMax	=	dDIF;
			if( dDEA > dMax )	dMax	=	dDEA;
			if( 2*(dDIF-dDEA) > dMax )	dMax	=	2*(dDIF-dDEA); // WARNING: different
			bFirst	=	FALSE;
		}
	}
	dMin	-=	fabs(dMin)*0.02;
	dMax	+=	fabs(dMax)*0.02;
	if( fabs(dMin) < 1e-4 )
		dMin	=	-0.01;
	if( fabs(dMax) < 1e-4 )
		dMax	=	0.01;
	if( dMax - dMin < 0.03 )
		dMax	=	dMin + 0.05;

	if( pdMin )		*pdMin	=	dMin;
	if( pdMax )		*pdMax	=	dMax;
	return TRUE;
}

BOOL CMACD::Calculate( double *pdEMA1, double *pdEMA2, double *pdDIF, double *pdDEA,
					int nIndex, BOOL bUseLast )
{
	STT_ASSERT_CALCULATE1( m_pKData, nIndex );

	if( m_nEMA1Days > nIndex+1 || m_nEMA2Days > nIndex+1 || m_nDIFDays > nIndex+1 )
		return FALSE;

	if( LoadFromCache( nIndex, pdEMA1, pdEMA2, pdDIF, pdDEA ) )
		return TRUE;

	// Calculate EMA1, EMA2, DIF, DEA
	double	dEMA1New = 0, dEMA2New = 0, dDIFNew = 0, dDEANew = 0;
	if( bUseLast && pdEMA1 && pdEMA2 && pdDEA )
	{
		dEMA1New	=	(*pdEMA1)*(m_nEMA1Days-1)/(m_nEMA1Days+1) + 2 * m_pKData->MaindataAt(nIndex) /(m_nEMA1Days+1);
		dEMA2New	=	(*pdEMA2)*(m_nEMA2Days-1)/(m_nEMA2Days+1) + 2 * m_pKData->MaindataAt(nIndex) /(m_nEMA2Days+1);
		dDIFNew		=	dEMA1New-dEMA2New;
		dDEANew		=	(*pdDEA)*(m_nDIFDays-1)/(m_nDIFDays+1) + 2 * dDIFNew/(m_nDIFDays+1);
	}
	else
	{
		double	factor1 = 1, factor2 = 1;
		int k;
		for( k=nIndex; k > 0; k-- )
		{
			factor1		*=	((double)(m_nEMA1Days-1))/(m_nEMA1Days+1);
			factor2		*=	((double)(m_nEMA2Days-1))/(m_nEMA2Days+1);
			if( factor1 < 0.001 && factor2 < 0.001 )
				break;
		}
		dEMA1New	=	m_pKData->MaindataAt(k);
		dEMA2New	=	m_pKData->MaindataAt(k);
		dDIFNew		=	dEMA1New - dEMA2New;
		dDEANew		=	dDIFNew;
		for( ; k<=nIndex; k++ )
		{
			dEMA1New	=	dEMA1New * (m_nEMA1Days-1)/(m_nEMA1Days+1) + 2 * m_pKData->MaindataAt(k) /(m_nEMA1Days+1);
			dEMA2New	=	dEMA2New * (m_nEMA2Days-1)/(m_nEMA2Days+1) + 2 * m_pKData->MaindataAt(k) /(m_nEMA2Days+1);
			dDIFNew		=	dEMA1New - dEMA2New;
			dDEANew		=	dDEANew * (m_nDIFDays-1)/(m_nDIFDays+1) + 2 * dDIFNew / (m_nDIFDays+1);
		}
	}

	if( pdEMA1 )		*pdEMA1	=	dEMA1New;
	if( pdEMA2 )		*pdEMA2	=	dEMA2New;
	if( pdDIF )			*pdDIF	=	dDIFNew;
	if( pdDEA )			*pdDEA	=	dDEANew;
	StoreToCache( nIndex, pdEMA1, pdEMA2, pdDIF, pdDEA );
	return TRUE;
}

//////////////////////////////////////////////////////////////////////
//	CMIKE
CMIKE::CMIKE( )
{
	SetDefaultParameters( );
}

CMIKE::CMIKE( CKData * pKData )
	: CTechnique( pKData )
{
	SetDefaultParameters( );
}

CMIKE::~CMIKE()
{
	Clear( );
}

void CMIKE::SetDefaultParameters( )
{
	m_nDays	=	12;
}

void CMIKE::AttachParameters( CMIKE & src )
{
	m_nDays	=	src.m_nDays;
}

BOOL CMIKE::IsValidParameters( )
{
	return VALID_DAYS( m_nDays );
}

void CMIKE::Clear( )
{
	CTechnique::Clear( );
}

/***
	H:最高價	L:最低價	C:收盤價
	TP = (H+L+C)÷3
	第一條窄通道的上下限計算如下:
		弱阻力WR=TP+(TP-L)		弱支撐WS=TP-(H-TP)
	第二條通道的上下限計算如下:
		中阻力MR=TP+(H-L)		中支撐MS=TP-(H-L)
	第三條闊通道的上下限計算如下:
		強阻力SR=H+(H-L)			強支撐SS=L-(H-L)
*/
BOOL CMIKE::CalculateMIKE(	double *pWR, double *pMR, double *pSR,
							double *pWS, double *pMS, double *pSS, int nIndex )
{
	STT_ASSERT_CALCULATE1( m_pKData, nIndex );
	
	if( m_nDays * 2 > nIndex + 1 )
		return FALSE;

	double	TP	=	(m_pKData->ElementAt(nIndex).m_fHigh + m_pKData->ElementAt(nIndex).m_fLow + m_pKData->ElementAt(nIndex).m_fClose)/3.0;
	double	minN = 0, min2N = 0, maxN = 0, max2N = 0;
	for( int k=nIndex; k>=0; k -- )
	{
		KDATA	kd	=	m_pKData->ElementAt(k);
		if( nIndex-k < m_nDays )
		{
			if( nIndex == k )	{	minN = kd.m_fLow;	maxN = kd.m_fHigh;	}
			if( kd.m_fLow < minN )		minN = kd.m_fLow;
			if( kd.m_fHigh > maxN )	maxN = kd.m_fHigh;
		}
		if( nIndex-k < m_nDays*2 )
		{
			if( nIndex == k )	{	min2N = kd.m_fLow;	max2N = kd.m_fHigh;	}
			if( kd.m_fLow < min2N )	min2N = kd.m_fLow;
			if( kd.m_fHigh > max2N )	max2N = kd.m_fHigh;
		}
		else
		{
			break;
		}
	}
	if( pWR )	*pWR	=	( TP + (TP - minN) ) ;
	if( pMR )	*pMR	=	( TP + (maxN - minN) ) ;
	if( pSR )	*pSR	=	( TP + (max2N - minN) ) ;
	if( pWS )	*pWS	=	( TP - (maxN - TP) ) ;
	if( pMS )	*pMS	=	( TP - (maxN - minN) ) ;
	if( pSS )	*pSS	=	( TP - (maxN - min2N) ) ;
	return TRUE;
}

//////////////////////////////////////////////////////////////////////
//	CPSY
CPSY::CPSY( )
{
	SetDefaultParameters( );
}

CPSY::CPSY( CKData * pKData )
	: CTechnique( pKData )
{
	SetDefaultParameters( );
}

CPSY::~CPSY()
{
	Clear( );
}

void CPSY::SetDefaultParameters( )
{
	m_nDays			=	12;
	m_itsSold		=	ITS_BUY;
	m_itsBought		=	ITS_SELL;
}

void CPSY::AttachParameters( CPSY & src )
{
	m_nDays			=	src.m_nDays;
	m_itsSold		=	src.m_itsSold;
	m_itsBought		=	src.m_itsBought;
}

BOOL CPSY::IsValidParameters( )
{
	return ( VALID_DAYS(m_nDays) && VALID_ITS(m_itsSold) && VALID_ITS(m_itsBought) );
}

void CPSY::Clear( )
{
	CTechnique::Clear( );
}

int CPSY::GetSignal( int nIndex, UINT * pnCode )
{
	if( pnCode )	*pnCode	=	ITSC_NOTHING;

	if( nIndex <= 0 )
		return ITS_NOTHING;

	double	dPSY = 0, dPSYLast;
	if( !Calculate( &dPSYLast, nIndex-1, FALSE )
		|| !Calculate( &dPSY, nIndex, FALSE ) )
		return ITS_NOTHING;
	if( dPSY < 30 && dPSY >= dPSYLast )
	{	// 超賣
		if( pnCode )	*pnCode	=	ITSC_OVERSOLD;
		return m_itsSold;
	}
	if( dPSY > 70 && dPSY <= dPSYLast )
	{	// 超買
		if( pnCode )	*pnCode	=	ITSC_OVERBOUGHT;
		return m_itsBought;
	}
	return	ITS_NOTHING;
}

BOOL CPSY::GetMinMaxInfo(int nStart, int nEnd,
				   double *pdMin, double *pdMax )
{
	if( pdMin )	*pdMin	=	0;
	if( pdMax )	*pdMax	=	100;
	return TRUE;
}

/***
	        N日內上漲的天數
	PSY = —————————— × 100
	              N
*/
BOOL CPSY::Calculate( double * pValue, int nIndex, BOOL bUseLast )
{
	STT_ASSERT_CALCULATE1( m_pKData, nIndex );

	if( m_nDays > nIndex )
		return FALSE;
	if( LoadFromCache( nIndex, pValue ) )
		return TRUE;

	double	UD	=	0;
	int		nCount	=	0;
	for( int k=nIndex; k>=1; k-- )
	{
		if( m_pKData->MaindataAt(k) > m_pKData->MaindataAt(k-1) )
			UD	+=	1;

		nCount	++;
		if( nCount == m_nDays )
		{
			if( pValue )	*pValue	=	UD * 100 / m_nDays;
			StoreToCache( nIndex, pValue );
			return TRUE;
		}
	}
	return FALSE;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱子伦视频一区二区三区 | 国产99久久久国产精品潘金| 日韩一级成人av| 麻豆专区一区二区三区四区五区| 欧美一区二区在线播放| 裸体一区二区三区| 国产日产欧美一区二区视频| 91亚洲精品久久久蜜桃网站| 夜夜嗨av一区二区三区中文字幕 | 国产婷婷一区二区| 99精品国产一区二区三区不卡| 亚洲精品成人天堂一二三| 欧美日韩国产片| 六月丁香婷婷色狠狠久久| 国产日韩亚洲欧美综合| av电影在线观看一区| 午夜国产不卡在线观看视频| 精品国产区一区| 99综合电影在线视频| 亚洲成人激情av| 久久综合狠狠综合| 91香蕉视频mp4| 久久av资源站| 一区二区在线观看不卡| 精品国精品国产尤物美女| 99这里只有精品| 久久99国产精品麻豆| 一区二区激情小说| 久久亚洲精华国产精华液 | 九九热在线视频观看这里只有精品 | 国产真实乱对白精彩久久| 亚洲欧美自拍偷拍色图| 日韩午夜激情电影| 一本久久精品一区二区| 精品一区二区三区在线观看| 一二三区精品视频| 日本一区二区成人| 欧美一区二区三区免费在线看| 成人午夜激情在线| 久久国产精品免费| 亚洲成人av在线电影| 国产精品麻豆视频| 亚洲精品一线二线三线无人区| 欧美色倩网站大全免费| www.日本不卡| 国产一区二区三区电影在线观看| 日韩精品五月天| 亚洲一区二区三区三| 中文字幕亚洲在| 国产欧美一区二区三区网站 | 国产精品免费看片| 日韩欧美卡一卡二| 欧美精品第一页| 在线国产电影不卡| 欧美精品一区二区三区久久久| 91黄色激情网站| 9l国产精品久久久久麻豆| 国产盗摄一区二区三区| 九九视频精品免费| 麻豆一区二区三区| 日本午夜精品一区二区三区电影| 亚洲乱码中文字幕综合| 国产欧美一区二区精品秋霞影院| 日韩午夜精品电影| 日韩欧美综合在线| 欧美一区二区福利在线| 欧美精品一二三| 欧美日韩第一区日日骚| 欧美日本韩国一区二区三区视频 | 亚洲柠檬福利资源导航| 久久青草国产手机看片福利盒子 | 久久香蕉国产线看观看99| 日韩天堂在线观看| 日韩欧美不卡在线观看视频| 在线不卡欧美精品一区二区三区| 欧美在线一二三| 欧美精品久久久久久久多人混战 | 精品中文字幕一区二区| 久久99精品国产| 国产一区二区三区精品欧美日韩一区二区三区 | 精品国产百合女同互慰| 色综合久久综合网欧美综合网| 成人国产精品免费网站| 96av麻豆蜜桃一区二区| 色一情一乱一乱一91av| 日本韩国精品一区二区在线观看| 色综合天天综合网天天看片| 欧美丝袜自拍制服另类| 欧美三级午夜理伦三级中视频| 欧美男女性生活在线直播观看| 欧美老女人在线| 欧美mv日韩mv国产| 中文字幕精品一区二区三区精品| 日韩美女精品在线| 一区二区三区四区蜜桃| 五月天视频一区| 国产一区二区不卡老阿姨| 国产成人综合网| 欧洲一区二区三区在线| 日韩一区二区三区视频在线| 久久久www免费人成精品| 国产精品久久久久毛片软件| 亚洲精品成人天堂一二三| 美美哒免费高清在线观看视频一区二区| 精品国产1区2区3区| 中文字幕乱码久久午夜不卡| 亚洲免费在线电影| 首页国产欧美日韩丝袜| 国产福利精品导航| 欧美日韩在线综合| 国产视频一区二区在线观看| 一区二区三区中文字幕| 国产一区二区三区香蕉| 在线观看亚洲精品| 久久久久国产精品麻豆ai换脸| 亚洲另类中文字| 国产高清精品在线| 777xxx欧美| 亚洲三级电影网站| 韩国欧美国产1区| 欧美午夜精品免费| 中文字幕成人av| 蜜桃视频一区二区三区在线观看 | 国产亚洲污的网站| 亚洲影视在线观看| 国产黑丝在线一区二区三区| 欧美日韩国产不卡| 综合在线观看色| 国产一区二区三区免费| 精品视频一区二区不卡| 日韩一区欧美小说| 国产一区二区三区黄视频| 欧美剧情片在线观看| 中文一区一区三区高中清不卡| 奇米影视一区二区三区| 91久久精品一区二区二区| 欧美精品一区二区三区四区| 性欧美大战久久久久久久久| 色爱区综合激月婷婷| 久久精品男人的天堂| 日韩av电影免费观看高清完整版| 在线亚洲人成电影网站色www| 国产精品美女久久久久久久网站| 久久国产三级精品| 日韩一二三区不卡| 日韩av一二三| 欧美日韩一二区| 一区二区高清免费观看影视大全| 大胆欧美人体老妇| 欧美精品一区二区三区在线播放| 日本强好片久久久久久aaa| 欧美揉bbbbb揉bbbbb| 亚洲永久免费av| 一本一道久久a久久精品| 国产精品女主播av| 成人黄页在线观看| 国产精品午夜在线| 国产精品一二一区| 国产女主播视频一区二区| 国产精品夜夜嗨| 国产欧美日韩另类一区| 国产美女精品人人做人人爽| 亚洲精品在线观看视频| 九九久久精品视频| 久久精品综合网| 成人一区二区三区在线观看| 国产精品久久久久一区二区三区 | 国产风韵犹存在线视精品| 久久久91精品国产一区二区三区| 国产麻豆视频精品| 久久精品免视看| 成人精品在线视频观看| 国产精品动漫网站| 91社区在线播放| 亚洲一区视频在线观看视频| 欧美手机在线视频| 日韩成人午夜精品| 久久久久亚洲综合| 成人一道本在线| 一区二区三区在线观看动漫| 亚洲h在线观看| 国产精品国产三级国产普通话99 | 国产欧美日韩综合| 欧美在线高清视频| 国产91精品一区二区麻豆亚洲| 一二三区精品视频| 亚洲成人1区2区| 精品在线免费视频| 欧美日韩中文字幕精品| 奇米一区二区三区| 国产日产欧美一区二区三区| 色综合久久88色综合天天| 天天综合色天天综合色h| 精品国产乱码久久久久久久| 成人美女视频在线看| 亚洲成av人片在线观看无码| 欧美精品一区二| 色综合久久99| 久久精品国产77777蜜臀| 国产精品麻豆欧美日韩ww|