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

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

?? techswing.cpp

?? 股票軟件
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/*
	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

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

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

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

void CKDJ::SetDefaultParameters( )
{
	m_nRSVDays	=	9;
	m_nKDays	=	3;
	m_nDDays	=	3;
	m_nJ		=	1;
	m_itsGoldenFork	=	ITS_BUY;
	m_itsDeadFork	=	ITS_SELL;
}

void CKDJ::AttachParameters( CKDJ & src )
{
	m_nRSVDays	=	src.m_nRSVDays;
	m_nKDays	=	src.m_nKDays;
	m_nDDays	=	src.m_nDDays;
	m_nJ		=	src.m_nJ;
	m_itsGoldenFork	=	src.m_itsGoldenFork;
	m_itsDeadFork	=	src.m_itsDeadFork;
}

BOOL CKDJ::IsValidParameters( )
{
	return ( VALID_DAYS(m_nRSVDays) && VALID_DAYS(m_nKDays)
			&& VALID_DAYS(m_nDDays) && VALID_DAYS(m_nJ)
			&& VALID_ITS(m_itsGoldenFork) && VALID_ITS(m_itsDeadFork) );
}

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

// 計算RSV值
BOOL CKDJ::CalculateRSV( double * pValue, int nIndex )
{
	STT_ASSERT_CALCULATE1( m_pKData, nIndex );

	double	dH = 0, dL = 0, dRSV = 0;
	int	nCount	=	0;
	for( int k=nIndex; k>=0; k-- )
	{
		if( nIndex == k )
		{
			dH	=	m_pKData->ElementAt(k).m_fHigh;
			dL	=	m_pKData->ElementAt(k).m_fLow;
		}
		if( dH < m_pKData->ElementAt(k).m_fHigh )
			dH	=	m_pKData->ElementAt(k).m_fHigh;
		if( dL > m_pKData->ElementAt(k).m_fLow )
			dL	=	m_pKData->ElementAt(k).m_fLow;

		nCount	++;
		if( nCount == m_nRSVDays )
		{
			if( dH-dL < 1e-4 )
				dRSV	=	100;
			else
				dRSV	=	(m_pKData->ElementAt(nIndex).m_fClose - dL) * 100 / (dH - dL);
			if( pValue )	*pValue	=	dRSV;
			return TRUE;
		}
	}
	return FALSE;
}

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

	double	dK, dD, dJ;
	if( !Calculate( &dK, &dD, &dJ, nIndex, FALSE ) )
		return ITS_NOTHING;

	if( dK < 25 && dD < 25 && IsGoldenFork(nIndex, m_pdCache1, m_pdCache2) )
	{	// 低位金叉
		if( pnCode )	*pnCode	=	ITSC_GOLDENFORK;
		return m_itsGoldenFork;
	}
	if( dK > 75 && dD > 75 && IsDeadFork(nIndex, m_pdCache1, m_pdCache2) )
	{	// 高位死叉
		if( pnCode )	*pnCode	=	ITSC_DEADFORK;
		return m_itsDeadFork;
	}
	return ITS_NOTHING;
}

BOOL CKDJ::GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax )
{
	return AfxGetMinMaxInfo3( nStart, nEnd, pdMin, pdMax, this );
}

/***
	AX = 今天的收盤價 - N天中的最低價
	BX = N天中的最高價 - N天中的最低價
	RSV = (AX ÷ BX)× 100%
	NK = K計算天數,一般取3
	ND = D計算天數,一般取3
	K = 前一日K×(NK-1)/NK + RSV×1/NK 
	D = 前一日D×(ND-1)/ND + K×1/3
	J = 3D - 2K (或 J = 3K - 2D)
	第一次計算時,前一日的K、D值皆以50代替。
*/
BOOL CKDJ::Calculate( double *pValue1, double *pValue2, double *pValue3, int nIndex, BOOL bUseLast )
{
	STT_ASSERT_CALCULATE1( m_pKData, nIndex );

	if( m_nRSVDays > nIndex+1 )
		return FALSE;

	if( LoadFromCache( nIndex, pValue1, pValue2, pValue3 ) )
		return TRUE;

	double	dRSV = 0;
	double	dK = 50, dD = 50, dJ = 50;
	if( bUseLast && pValue1 && pValue2 )
	{
		if( CalculateRSV( &dRSV, nIndex ) )
		{
			dK	=	(m_nKDays-1)*(*pValue1)/m_nKDays + dRSV/m_nKDays;
			dD	=	(m_nDDays-1)*(*pValue2)/m_nDDays + dK/m_nDDays;
			if( mode3K2D == m_nJ )
				dJ	=	3 * dK - 2 * dD;
			else
				dJ	=	3 * dD - 2 * dK;
			if( pValue1 )	*pValue1	=	dK;
			if( pValue2 )	*pValue2	=	dD;
			if( pValue3 )	*pValue3	=	dJ;
			StoreToCache( nIndex, pValue1, pValue2, pValue3 );
			return TRUE;
		}
	}
	else
	{
		double	factor1 = 1, factor2 = 1;
		int k;
		for( k=nIndex; k > 0; k-- )
		{
			factor1		*=	((double)(m_nKDays-1))/m_nKDays;
			factor2		*=	((double)(m_nDDays-1))/m_nDDays;
			if( factor1 < 0.001 && factor2 < 0.001 )
				break;
		}
		for( ; k<=nIndex; k++ )
		{
			if( CalculateRSV( &dRSV, k ) )
			{
				dK	=	(m_nKDays-1)*(dK)/m_nKDays + dRSV/m_nKDays;
				dD	=	(m_nDDays-1)*(dD)/m_nDDays + dK/m_nDDays;
				if( mode3K2D == m_nJ )
					dJ	=	3 * dK - 2 * dD;
				else
					dJ	=	3 * dD - 2 * dK;
				if( nIndex == k )
				{
					if( pValue1 )	*pValue1	=	dK;
					if( pValue2 )	*pValue2	=	dD;
					if( pValue3 )	*pValue3	=	dJ;
					StoreToCache( nIndex, pValue1, pValue2, pValue3 );
					return TRUE;
				}
			}
		}
	}

	return FALSE;
}

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

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

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

void CR::SetDefaultParameters( )
{
	m_nDays		=	20;
}

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

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

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

int CR::GetSignal( int nIndex, UINT * pnCode )
{
	if( pnCode )	*pnCode	=	ITSC_NOTHING;
/*	double	dR;
	if( !Calculate( &dR, nIndex, FALSE ) )
		return ITS_NOTHING;
	if( dR > 80 )
	{
		if( pnCode )	*pnCode	=	ITSC_OVERSOLD;
		return m_itsSold;
	}
	if( dR < 20 )
	{
		if( pnCode )	*pnCode	=	ITSC_OVERBOUGHT;
		return m_itsBought;
	}
*/	
	// 無買賣信號
	return	ITS_NOTHING;
}

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

/***
	            H - C
	W%R指標值= ———— ×100
	            H - L                
	H = N日內最高價		L = N日內最低價		C = 當天收盤價
*/
BOOL CR::Calculate( double * pValue, int nIndex, BOOL bUseLast )
{
	STT_ASSERT_CALCULATE1( m_pKData, nIndex );

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

	double	dH = 0, dL = 0, dR = 0;
	int	nCount	=	0;
	for( int k=nIndex; k>=0; k-- )
	{
		if( nIndex == k )
		{
			dH	=	m_pKData->ElementAt(k).m_fHigh;
			dL	=	m_pKData->ElementAt(k).m_fLow;
		}
		if( dH < m_pKData->ElementAt(k).m_fHigh )
			dH	=	m_pKData->ElementAt(k).m_fHigh;
		if( dL > m_pKData->ElementAt(k).m_fLow )
			dL	=	m_pKData->ElementAt(k).m_fLow;

		nCount	++;
		if( nCount == m_nDays )
		{
			if( dH-dL < 1e-4 )
				dR	=	100;
			else
				dR	=	(dH - m_pKData->ElementAt(nIndex).m_fClose) * 100 / (dH - dL);
			if( pValue )	*pValue	=	dR;
			StoreToCache( nIndex, pValue );
			return TRUE;
		}
	}
	return FALSE;
}

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

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

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

void CRSI::SetDefaultParameters( )
{
	m_adwDays.RemoveAll();
	m_adwDays.Add( 10 );
	m_adwDays.Add( 20 );
	m_itsSold		=	ITS_BUY;
	m_itsGoldenFork	=	ITS_BUYINTENSE;
	m_itsDeadFork	=	ITS_SELLINTENSE;
}

void CRSI::AttachParameters( CRSI & src )
{
	m_adwDays.Copy( src.m_adwDays );
	m_itsSold		=	src.m_itsSold;
	m_itsGoldenFork	=	src.m_itsGoldenFork;
	m_itsDeadFork	=	src.m_itsDeadFork;
}

BOOL CRSI::IsValidParameters( )
{
	STT_VALID_DAYSARRAY( m_adwDays );
	return ( VALID_ITS(m_itsSold) && VALID_ITS(m_itsGoldenFork) && VALID_ITS(m_itsDeadFork) );
}

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

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

	if( nIndex <= 0 )
		return ITS_NOTHING;

	int	nForkSignal	=	GetForkSignal(nIndex, m_adwDays, m_itsGoldenFork, m_itsDeadFork, pnCode );
	for( int k=0; k<m_adwDays.GetSize(); k++ )
	{
		double	dRSI, dRSILast;
		if( !Calculate( &dRSILast, nIndex-1, m_adwDays[k], FALSE )
			|| !Calculate( &dRSI, nIndex, m_adwDays[k], FALSE ) )
			return ITS_NOTHING;
		if( dRSI < 20 )
		{	// 超賣
			if( pnCode )	*pnCode	=	ITSC_OVERSOLD;
			return m_itsSold;
		}
		if( dRSI < 40 && nForkSignal == m_itsGoldenFork )
		{	// 低位金叉
			if( pnCode )	*pnCode	=	ITSC_GOLDENFORK;
			return m_itsGoldenFork;
		}
		if( dRSI > 60 && nForkSignal == m_itsDeadFork )
		{	// 高位死叉
			if( pnCode )	*pnCode	=	ITSC_DEADFORK;
			return m_itsDeadFork;
		}
	}

	return	ITS_NOTHING;
}

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

/***
	RSI =(N日內上漲幅度累計÷N日內上漲及下跌幅度累計)×100%
*/
BOOL CRSI::Calculate( double * pValue, int nIndex, int nDays, BOOL bUseLast )
{
	STT_ASSERT_CALCULATE( m_pKData, nIndex, nDays );

	if( nDays > nIndex )
		return FALSE;

	double	dUC = 0, dDC = 0, dRSI = 0;
	int	nCount = 0;
	for( int k=nIndex; k>=1; k-- )
	{
		if( m_pKData->MaindataAt(k) > m_pKData->MaindataAt(k-1) )
			dUC	+=	( m_pKData->MaindataAt(k) - m_pKData->MaindataAt(k-1) );
		else
			dDC	+=	( m_pKData->MaindataAt(k-1) - m_pKData->MaindataAt(k) );

		nCount	++;
		if( nCount == nDays )
		{
			if( dUC+dDC < 1e-4 )
				dRSI	=	100;
			else
				dRSI	=	100*dUC/(dUC+dDC);
			if( pValue )	*pValue	=	dRSI;
			return TRUE;
		}
	}
	return FALSE;
}

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

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

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

void CBIAS::SetDefaultParameters( )
{
	m_nDays		=	10;
	m_itsSold	=	ITS_BUY;
	m_itsBought	=	ITS_SELL;
}

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

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

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

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

	double	dBIAS;
	if( !Calculate( &dBIAS, nIndex, FALSE ) )
		return ITS_NOTHING;

	if( dBIAS < -10 )
	{	// 超賣
		if( pnCode )	*pnCode	=	ITSC_OVERSOLD;
		return m_itsSold;
	}
	if( dBIAS > 5 )
	{	// 超買
		if( pnCode )	*pnCode	=	ITSC_OVERBOUGHT;
		return m_itsBought;
	}

	return	ITS_NOTHING;
}

BOOL CBIAS::GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax )
{
	return AfxGetMinMaxInfo1( nStart, nEnd, pdMin, pdMax, this );
}

/***
	              當日收盤價-N日移動平均值
	N日乖離率 = —————————————— ×100%
	                   N日移動平均值
*/
BOOL CBIAS::Calculate( double * pValue, int nIndex, BOOL bUseLast )
{
	STT_ASSERT_CALCULATE1( m_pKData, nIndex );

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

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

		nCount	++;
		if( nCount == m_nDays )
		{
			double	dResult	=	0;
			dMA	=	dMA / m_nDays;
			if( dMA > 1e-4 )
				dResult	=	100. * ( m_pKData->MaindataAt(nIndex) - dMA ) / dMA;
			if( pValue )	*pValue	=	dResult;
			StoreToCache( nIndex, pValue );
			return TRUE;
		}
	}
	return FALSE;
}

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

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

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

void CMTM::SetDefaultParameters( )
{
	m_nDays		=	10;
	m_nMADays	=	10;

	m_itsGoldenFork			=	ITS_BUY;
	m_itsDeadFork			=	ITS_SELL;
}

void CMTM::AttachParameters( CMTM & src )
{
	m_nDays		=	m_nDays;
	m_nMADays	=	m_nMADays;

	m_itsGoldenFork			=	src.m_itsGoldenFork;
	m_itsDeadFork			=	src.m_itsDeadFork;
}

BOOL CMTM::IsValidParameters( )
{
	return ( VALID_DAYS( m_nDays ) && VALID_DAYS( m_nMADays )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品www牛牛影视| 国内久久精品视频| 日韩主播视频在线| 国产激情91久久精品导航| 风间由美一区二区三区在线观看 | 精品理论电影在线| 国产日韩欧美a| 一区二区免费在线播放| 免费成人av在线| 不卡的av电影在线观看| 欧美日韩亚洲综合在线| 国产欧美一区二区精品性色超碰 | 菠萝蜜视频在线观看一区| 欧美在线影院一区二区| 国产婷婷色一区二区三区在线| 一区二区三区久久| 国产成人av电影在线| 欧美一区二区三区人| 17c精品麻豆一区二区免费| 欧美aaaaaa午夜精品| 91免费国产在线| 欧美国产日本韩| 国产在线视频精品一区| 日韩欧美一区电影| 夜夜爽夜夜爽精品视频| 床上的激情91.| 国产欧美一二三区| 国产一区二区三区四区在线观看| 91久久精品网| 亚洲一区在线观看网站| 99精品欧美一区二区三区小说 | 激情丁香综合五月| 在线综合视频播放| 亚洲 欧美综合在线网络| 欧美色网站导航| 一区二区三区四区在线免费观看| 99久久er热在这里只有精品66| 欧美国产日韩a欧美在线观看| 成人性生交大片免费看视频在线| 久久久欧美精品sm网站| 国产98色在线|日韩| 中文字幕在线免费不卡| 欧美网站大全在线观看| 全国精品久久少妇| 欧美韩国日本一区| 欧美视频自拍偷拍| 九九在线精品视频| 有码一区二区三区| 久久先锋影音av鲁色资源网| 成人性生交大片免费 | 99精品视频在线观看| 亚洲一本大道在线| 日韩久久免费av| 色菇凉天天综合网| 韩国精品主播一区二区在线观看 | 成人免费黄色在线| 日日欢夜夜爽一区| 中文字幕乱码一区二区免费| 精品视频资源站| 成人91在线观看| 久久99精品久久久| 亚洲高清免费观看| 亚洲欧洲国产日韩| 26uuu国产一区二区三区| 色综合久久久久久久久| 国产一区亚洲一区| 青青草国产精品亚洲专区无| 国产精品免费av| 国产日本欧美一区二区| 日韩一区二区三区av| 色狠狠色狠狠综合| 一本大道久久a久久综合| 国产精品亚洲成人| 国产成人免费xxxxxxxx| 日本免费在线视频不卡一不卡二| 亚洲欧洲精品一区二区三区| 国产精品久久久99| 欧美激情一区三区| 国产精品传媒视频| 亚洲精品久久嫩草网站秘色| 亚洲美女视频在线观看| 亚洲综合av网| 国产毛片精品国产一区二区三区| 一本大道久久a久久精品综合| 日韩成人一级大片| 国产在线精品一区在线观看麻豆| 日本精品一区二区三区四区的功能| 51午夜精品国产| 亚洲国产wwwccc36天堂| 高清视频一区二区| 欧美一级生活片| 欧美一二三区在线| 久久久久久久久久久久久夜| 精品国产免费视频| 国产精品国产馆在线真实露脸 | 蜜桃精品在线观看| 91麻豆国产在线观看| 色婷婷久久久亚洲一区二区三区 | av影院午夜一区| 欧美精品成人一区二区三区四区| 91精品免费在线| 亚洲国产精品二十页| 久久99九九99精品| 免费观看日韩av| 不卡一区中文字幕| 7777女厕盗摄久久久| 久久久精品一品道一区| 国产麻豆成人传媒免费观看| 成人av午夜电影| 日韩欧美国产三级电影视频| 亚洲综合图片区| 91精品1区2区| 一区二区三区精品视频在线| 福利电影一区二区| 国产日产欧美一区二区视频| 蜜臀a∨国产成人精品| 欧美四级电影在线观看| 一区二区三区四区视频精品免费| 成人午夜电影网站| 自拍偷自拍亚洲精品播放| 成人h动漫精品| 亚洲日本护士毛茸茸| 99久久精品国产导航| 亚洲在线观看免费| 欧美剧情电影在线观看完整版免费励志电影 | 国产片一区二区| 成人动漫一区二区三区| **网站欧美大片在线观看| 91麻豆国产在线观看| 亚洲不卡一区二区三区| 欧美日韩你懂得| 国产在线日韩欧美| 亚洲免费观看在线观看| 欧美成人欧美edvon| 91一区二区在线| 欧美v亚洲v综合ⅴ国产v| 国产乱码精品一区二区三| 日本不卡在线视频| 亚洲精品五月天| 久久久久久久久99精品| 日韩欧美亚洲国产精品字幕久久久 | eeuss国产一区二区三区| 日韩中文欧美在线| 亚洲理论在线观看| 中文字幕一区免费在线观看| 欧美一级一区二区| 色综合天天性综合| 精品在线免费视频| 亚洲一区二区五区| 国产日韩精品一区二区三区 | 国内成人免费视频| 亚洲另类一区二区| 国产精品天天摸av网| 日韩欧美一二区| 欧美一区日韩一区| 欧美日韩一区中文字幕| 91在线国产观看| www.亚洲色图.com| 国产成人免费高清| 国产一区二区三区精品欧美日韩一区二区三区 | 久久99国产精品免费| 日本在线不卡视频| 午夜欧美视频在线观看| 亚洲午夜三级在线| 亚洲午夜视频在线| 午夜不卡av免费| 亚洲超丰满肉感bbw| 亚洲成av人片在线观看| 亚洲大尺度视频在线观看| 亚洲第四色夜色| 日日骚欧美日韩| 国产在线视频一区二区| 国产成人午夜高潮毛片| 国产精品亚洲专一区二区三区| 国产激情偷乱视频一区二区三区| 国产精品一区免费在线观看| 国产999精品久久| 91视频观看视频| 欧美日韩精品一区二区三区四区| 欧美日韩亚洲高清一区二区| 欧美丰满美乳xxx高潮www| 精品国产一区二区精华| 成人欧美一区二区三区小说| 亚洲精品国产高清久久伦理二区| 亚洲高清免费视频| 国产福利电影一区二区三区| 99精品久久只有精品| 欧美一三区三区四区免费在线看| 久久久影院官网| 亚洲国产精品欧美一二99| 韩国三级在线一区| 国产伦精品一区二区三区在线观看| 午夜私人影院久久久久| 免费一级欧美片在线观看| 国产一区免费电影| 日本精品裸体写真集在线观看| 久久久精品免费免费| 中文字幕在线免费不卡| 免费观看91视频大全| 欧洲日韩一区二区三区|