亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲一区视频在线| va亚洲va日韩不卡在线观看| 日韩一卡二卡三卡| 黄色日韩网站视频| 国产精品欧美久久久久无广告| 亚洲精品在线网站| 国产成人av资源| 亚洲日本在线视频观看| 欧美性大战xxxxx久久久| 日本成人超碰在线观看| 久久久久久久久伊人| 91天堂素人约啪| 一区二区三区国产| 欧美一区二区三区电影| 国产成人免费xxxxxxxx| 亚洲精品久久久蜜桃| 欧美日韩在线一区二区| 激情综合网av| 成人免费在线观看入口| 欧美日韩国产系列| 国产一区二区不卡老阿姨| 综合婷婷亚洲小说| 欧美一区二区三区四区久久| 国产美女主播视频一区| 亚洲婷婷综合久久一本伊一区| 国v精品久久久网| 亚洲美女视频在线观看| 欧美一区二区三区视频免费| 国产91色综合久久免费分享| 亚洲福利一区二区| 久久久久国产一区二区三区四区| 免费观看日韩av| 国产日韩精品一区二区三区 | 欧美在线免费观看亚洲| 裸体在线国模精品偷拍| 日本一区二区三级电影在线观看| 国产精品自拍网站| 亚洲一区视频在线| 久久久久久久久久久久电影| 91视频免费看| 美女视频黄久久| 亚洲欧美日韩国产综合在线| 日韩亚洲欧美一区二区三区| av不卡一区二区三区| 久久精品国产一区二区三| 18成人在线视频| 91免费视频观看| 久久精品国产亚洲aⅴ| 一区二区三区欧美亚洲| 亚洲精品一区二区精华| 欧美视频在线一区二区三区| 国产高清不卡一区| 欧美a一区二区| 一区二区三区日本| 国产精品女主播在线观看| 日韩欧美一区中文| 欧美在线一二三四区| 成人性生交大片免费看视频在线 | 美日韩一区二区三区| 亚洲人妖av一区二区| 欧美一个色资源| 日本韩国一区二区| 国产成人av一区二区三区在线观看| 亚洲欧洲三级电影| 日韩免费成人网| 欧美亚洲一区二区在线| 不卡影院免费观看| k8久久久一区二区三区| 亚洲人成影院在线观看| 欧美成人综合网站| 欧美色图天堂网| 99精品视频在线观看免费| 国产美女视频一区| 久久黄色级2电影| 午夜天堂影视香蕉久久| 亚洲精品视频在线看| 中文字幕精品一区二区三区精品| 99视频超级精品| 国产一区二区在线观看免费| 丝袜美腿亚洲色图| 亚洲综合激情另类小说区| 一区免费观看视频| 中文字幕av资源一区| 久久久国产精品不卡| 精品国产乱码久久久久久免费 | 69堂精品视频| 在线精品视频一区二区三四| 99精品欧美一区| 国产成人免费视频网站| 国产一区免费电影| 麻豆精品一区二区av白丝在线| 国产精品色噜噜| 国产日韩精品一区| 国产欧美一区二区在线| 久久无码av三级| 精品日韩欧美一区二区| 欧美变态tickling挠脚心| 日韩精品最新网址| 欧美一区二区视频在线观看| 欧美日韩在线不卡| 欧美日韩mp4| 欧美精品国产精品| 制服丝袜中文字幕一区| 欧美亚洲禁片免费| 欧美日韩国产精品成人| 在线成人午夜影院| 欧美精品视频www在线观看| 欧美精品xxxxbbbb| 91麻豆精品91久久久久同性| 91麻豆精品久久久久蜜臀| 91精品国产综合久久香蕉麻豆| 波多野结衣在线aⅴ中文字幕不卡| 日韩二区在线观看| 日韩av一区二区三区| 久久国产欧美日韩精品| 久久精品国产亚洲5555| 国产一区啦啦啦在线观看| 国产高清在线精品| 成人精品小蝌蚪| 99精品久久免费看蜜臀剧情介绍| 久久99久久精品| 国产乱子轮精品视频| 成人免费av网站| 色哟哟一区二区三区| 欧美日韩精品一区二区三区| 这里是久久伊人| 337p粉嫩大胆噜噜噜噜噜91av| 欧美区视频在线观看| 日韩美女一区二区三区| 久久久精品一品道一区| 亚洲欧洲精品一区二区三区| 一区二区三区免费在线观看| 亚洲一级电影视频| 日韩不卡一区二区三区| 国产美女一区二区三区| 99精品视频在线观看| 欧美日韩电影在线| 337p日本欧洲亚洲大胆精品| 国产精品久久久久久久蜜臀| 一区二区三区成人| 免费成人av在线| 成人精品国产一区二区4080| 色综合色狠狠天天综合色| 在线播放/欧美激情| 精品国产91久久久久久久妲己 | 亚洲激情第一区| 五月天久久比比资源色| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品66部| 在线观看日韩国产| 日韩精品一区二区三区四区| 国产精品美女久久久久久2018| 久久久国产精品午夜一区ai换脸| 欧美成人性战久久| 成人欧美一区二区三区小说| 亚洲成人激情自拍| 国产一区二区在线看| 91黄视频在线观看| 精品国产免费久久| 亚洲免费看黄网站| 久久福利视频一区二区| 99re视频这里只有精品| 欧美一区二区精美| 国产精品国产三级国产普通话三级| 国产欧美日韩中文久久| 亚洲激情中文1区| 久久激五月天综合精品| 99国产欧美久久久精品| 91精品免费在线| 中文字幕日韩一区二区| 奇米色一区二区三区四区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 精品无人码麻豆乱码1区2区| 成人成人成人在线视频| 欧美高清激情brazzers| 国产精品视频麻豆| 美美哒免费高清在线观看视频一区二区| 琪琪久久久久日韩精品| 成人动漫av在线| 六月丁香综合在线视频| 色综合中文综合网| 国产精品888| 欧美肥胖老妇做爰| 最新热久久免费视频| 久草中文综合在线| 在线一区二区观看| 国产精品你懂的在线欣赏| 久久精品国产色蜜蜜麻豆| 欧美视频在线一区二区三区| 国产精品网曝门| 激情av综合网| 3d成人h动漫网站入口| 亚洲激情欧美激情| 成人一区二区三区中文字幕| 制服.丝袜.亚洲.另类.中文| 亚洲精品视频免费看| 成人性生交大片免费看中文网站| 91成人在线免费观看| 中文字幕精品三区| 国产综合色视频|