⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stock.cpp

📁 股软 通达信行情接收接口, 包括美元汇率
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*
	Cross Platform Core Code.

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

	Using:
		class	CStock;
*/

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

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

#ifdef	_DEBUG
#define	new	DEBUG_NEW
#endif

#ifndef	_SP_ENABLE_INLINES
#define	_STOCK_INLINE
#include "Stock.inl"
#undef	_STOCK_INLINE
#endif //_SP_ENABLE_INLINES


//////////////////////////////////////////////////////////////////////
//	class	CStockInfo

CStockInfo::CStockInfo( )
{
	Clear( );
}

CStockInfo::CStockInfo( const CStockInfo &src )
{
	Clear( );
	*this	=	src;
}

void CStockInfo::Clear( )
{
	m_dwMarket	=	CStock::marketUnknown;
	memset( m_szCode, 0, sizeof(m_szCode) );

	m_type	=	CStock::typeNone;
	memset( m_szName, 0, sizeof(m_szName) );
	memset( m_szNameEnu, 0, sizeof(m_szNameEnu) );
	memset( m_szShortname, 0, sizeof(m_szShortname) );

	memset( m_szDomain, 0, sizeof(m_szDomain) );
	memset( m_szProvince, 0, sizeof(m_szProvince) );

	m_kdata.RemoveAll();
	m_kdata.SetKType(CKData::ktypeDay);
	m_basedata.RemoveAll();
	m_minute.RemoveAll();
	memset( &m_reportLatest, 0, sizeof(m_reportLatest) );

	m_datetech		=	0;

	m_fLast			=	0;
	m_fOpen			=	0;
	m_fHigh			=	0;
	m_fLow			=	0;
	m_fClose		=	0;
	m_fVolume		=	0;
	m_fAmount		=	0;
	m_dwAdvance		=	0;
	m_dwDecline		=	0;


	memset( m_fBuyPrice, 0, sizeof(m_fBuyPrice) );
	memset( m_fBuyVolume, 0, sizeof(m_fBuyVolume) );
	memset( m_fSellPrice, 0, sizeof(m_fSellPrice) );
	memset( m_fSellVolume, 0, sizeof(m_fSellVolume) );

	// base data
	m_datebase				=	0;
	m_reporttype			=	0;
	m_fErate_dollar			=	(float)8.27;
	m_fErate_hkdollar		=	(float)1.06;
	
	m_fRatio_liquidity		=	0;
	m_fRatio_quick			=	0;
	m_fVelocity_receivables	=	0;
	
	m_fVelocity_merchandise	=	0;
	m_fMain_income			=	0;
	m_fCash_ps				=	0;
	
	m_fProfit_margin		=	0;
	m_fNetasset_yield		=	0;
	
	m_datebegin				=	0;
	m_fShare_count_total	=	0;
	m_fShare_count_a		=	0;
	m_fShare_count_b		=	0;
	m_fShare_count_h		=	0;
	m_fShare_count_national	=	0;
	m_fShare_count_corp		=	0;
	m_fProfit_psud			=	0;
	m_fAsset				=	0;
	m_fRatio_holderright	=	0;
	m_fRatio_longdebt		=	0;
	m_fRatio_debt			=	0;
	
	m_fNetasset_ps			=	0;
	m_fNetasset_ps_regulate	=	0;
	m_fEps					=	0;
	m_fEps_deduct			=	0;
	m_fNet_profit			=	0;
	m_fMain_profit			=	0;
	m_fTotal_profit			=	0;

	m_fProfit_inc			=	0;
	m_fIncome_inc			=	0;
	m_fAsset_inc			=	0;
	m_fYield_average		=	(float) STKLIB_DATA_INVALID;
	m_fYield_stddev			=	(float) STKLIB_DATA_INVALID;
	m_fBeite				=	(float) STKLIB_DATA_INVALID;
}

CStockInfo &CStockInfo::operator = ( const CStockInfo & si )
{
	m_dwMarket			=	si.m_dwMarket;
	memcpy( m_szCode, si.m_szCode, sizeof(m_szCode) );

	m_type	=	si.m_type;

	memcpy( m_szName, si.m_szName, sizeof(m_szName) );
	memcpy( m_szNameEnu, si.m_szNameEnu, sizeof(m_szNameEnu) );
	memcpy( m_szShortname, si.m_szShortname, sizeof(m_szShortname) );

	memcpy( m_szDomain, si.m_szDomain, sizeof(m_szDomain) );
	memcpy( m_szProvince, si.m_szProvince, sizeof(m_szProvince) );

	m_kdata			=	si.m_kdata;
	m_basedata		=	si.m_basedata;
	m_minute		=	si.m_minute;
	m_reportLatest	=	si.m_reportLatest;

	m_datetech		=	si.m_datetech;

	m_fLast			=	si.m_fLast;
	m_fOpen			=	si.m_fOpen;
	m_fHigh			=	si.m_fHigh;
	m_fLow			=	si.m_fLow;
	m_fClose		=	si.m_fClose;
	m_fVolume		=	si.m_fVolume;
	m_fAmount		=	si.m_fAmount;
	m_dwAdvance		=	si.m_dwAdvance;
	m_dwDecline		=	si.m_dwDecline;


	memcpy( m_fBuyPrice, si.m_fBuyPrice, sizeof(m_fBuyPrice) );
	memcpy( m_fBuyVolume, si.m_fBuyVolume, sizeof(m_fBuyVolume) );
	memcpy( m_fSellPrice, si.m_fSellPrice, sizeof(m_fSellPrice) );
	memcpy( m_fSellVolume, si.m_fSellVolume, sizeof(m_fSellVolume) );

	// base data
	m_datebase				=	si.m_datebase;
	m_reporttype			=	si.m_reporttype;
	m_fErate_dollar			=	si.m_fErate_dollar;
	m_fErate_hkdollar		=	si.m_fErate_hkdollar;

	m_fRatio_liquidity		=	si.m_fRatio_liquidity;
	m_fRatio_quick			=	si.m_fRatio_quick;
	m_fVelocity_receivables	=	si.m_fVelocity_receivables;
	
	m_fVelocity_merchandise	=	si.m_fVelocity_merchandise;
	m_fMain_income			=	si.m_fMain_income;
	m_fCash_ps				=	si.m_fCash_ps;
	
	m_fProfit_margin		=	si.m_fProfit_margin;
	m_fNetasset_yield		=	si.m_fNetasset_yield;
	
	m_datebegin				=	si.m_datebegin;
	m_fShare_count_total	=	si.m_fShare_count_total;
	m_fShare_count_a		=	si.m_fShare_count_a;
	m_fShare_count_b		=	si.m_fShare_count_b;
	m_fShare_count_h		=	si.m_fShare_count_h;
	m_fShare_count_national	=	si.m_fShare_count_national;
	m_fShare_count_corp		=	si.m_fShare_count_corp;
	m_fProfit_psud			=	si.m_fProfit_psud;
	m_fAsset				=	si.m_fAsset;
	m_fRatio_holderright	=	si.m_fRatio_holderright;
	m_fRatio_longdebt		=	si.m_fRatio_longdebt;
	m_fRatio_debt			=	si.m_fRatio_debt;
	
	m_fNetasset_ps			=	si.m_fNetasset_ps;
	m_fNetasset_ps_regulate	=	si.m_fNetasset_ps_regulate;
	m_fEps					=	si.m_fEps;
	m_fEps_deduct			=	si.m_fEps_deduct;
	m_fNet_profit			=	si.m_fNet_profit;
	m_fMain_profit			=	si.m_fMain_profit;
	m_fTotal_profit			=	si.m_fTotal_profit;

	m_fProfit_inc			=	si.m_fProfit_inc;
	m_fIncome_inc			=	si.m_fIncome_inc;
	m_fAsset_inc			=	si.m_fAsset_inc;
	m_fYield_average		=	si.m_fYield_average;
	m_fYield_stddev			=	si.m_fYield_stddev;
	m_fBeite				=	si.m_fBeite;

	return *this;
}

BOOL CStockInfo::IsEqualTo( DWORD dwMarket, const char * szCode )
{
	if( m_dwMarket == dwMarket
		|| CStock::marketUnknown == dwMarket || CStock::marketUnknown == m_dwMarket
		|| 0 == dwMarket || 0 == m_dwMarket )
	{
		if( szCode && 0 == strcmp(szCode,m_szCode) )
			return TRUE;
	}
	if( CStock::marketCHNA == m_dwMarket
		&& ( CStock::marketCHNA == dwMarket || CStock::marketSHSE == dwMarket || CStock::marketSZSE == dwMarket || CStock::marketCYSE == dwMarket ) )
	{
		if( szCode && 0 == strcmp(szCode,m_szCode) )
			return TRUE;
	}
	if( CStock::marketCHNA == dwMarket
		&& ( CStock::marketCHNA == m_dwMarket || CStock::marketSHSE == m_dwMarket || CStock::marketSZSE == m_dwMarket || CStock::marketCYSE == m_dwMarket ) )
	{
		if( szCode && 0 == strcmp(szCode,m_szCode) )
			return TRUE;
	}

	return FALSE;
}

DWORD CStockInfo::GetMarket( )
{
	return m_dwMarket;
}

void CStockInfo::SetMarket( DWORD dwMarket )
{
	m_dwMarket	=	dwMarket;
	if( CStock::marketSHSE == dwMarket )
		m_type	|=	CStock::markShanghai;
	if( CStock::marketSZSE == dwMarket )
		m_type	|=	CStock::markShenzhen;
}

void CStockInfo::ResolveTypeAndMarket( )
{
	CStockInfo	info;
	if( AfxGetStockContainer().GetStockInfo( m_szCode, &info )
		&& CStock::typeNone != info.GetType()
		&& CStock::marketUnknown != info.GetMarket() )
	{
		if( CStock::typeNone == m_type )
			m_type = info.GetType();
		if( CStock::marketUnknown == m_dwMarket )
			m_dwMarket = info.GetMarket();
		return;
	}

	long	type = CStock::typeNone;
	DWORD	dwMarket = CStock::marketUnknown;
	if( strlen(m_szCode) > 0 )
	{
		if( strcmp(m_szCode,"000001") >= 0 && strcmp(m_szCode,"000999") <= 0 )		// 深圳A股
		{	type = CStock::typeszA;			dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"002001") >= 0 && strcmp(m_szCode,"002999") <= 0 )	// 深圳中小企业
		{	type = CStock::typeszMsmall;			dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"200001") >= 0 && strcmp(m_szCode,"200999") <= 0 )	// 深圳B股
		{	type = CStock::typeszB;			dwMarket = CStock::marketSZSE;	}
		else if( strncmp(m_szCode,"600",3) == 0 )	// 上海A股
		{	type = CStock::typeshA;			dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"500",3) == 0 )	// 上海基金
		{	type = CStock::typeshA;			dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"900",3) == 0 )	// 上海B股
		{	type = CStock::typeshB;			dwMarket = CStock::marketSHSE;	}

		else if( strcmp(m_szCode,"001001") >= 0 && strcmp(m_szCode,"001199") <= 0 )	// 深圳企业债券
		{	type = CStock::typeszBond;		dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"001200") >= 0 && strcmp(m_szCode,"001899") <= 0 )	// 深圳国债回购
		{	type = CStock::typeszBond;		dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"001900") >= 0 && strcmp(m_szCode,"001999") <= 0 )	// 深圳国债现货
		{	type = CStock::typeszBond;		dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"030001") >= 0 && strcmp(m_szCode,"038999") <= 0 )	// 深圳A股权证
		{	type = CStock::typeszRight;		dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"003001") >= 0 && strcmp(m_szCode,"003999") <= 0 )	// 深圳转配认购
		{	type = CStock::typeszAdmeasure;	dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"009001") >= 0 && strcmp(m_szCode,"009999") <= 0 )	// 深圳新股配售
		{	type = CStock::typeszAdmeasure;	dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"005001") >= 0 && strcmp(m_szCode,"005999") <= 0 )	// 深圳可转换债券
		{	type = CStock::typeszBond;		dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"006001") >= 0 && strcmp(m_szCode,"006999") <= 0 )	// 深圳国债期货
		{	type = CStock::typeszBond;		dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"004601") >= 0 && strcmp(m_szCode,"004699") <= 0 )	// 深圳证券投资基金
		{	type = CStock::typeszA;			dwMarket = CStock::marketSZSE;	}
		else if( strcmp(m_szCode,"008001") >= 0 && strcmp(m_szCode,"008999") <= 0 )	// 深圳配股认购
		{	type = CStock::typeszAdmeasure;	dwMarket = CStock::marketSZSE;	}

		else if( strncmp(m_szCode,"001",3) == 0 )	// 上海国债现货
		{	type = CStock::typeshBond;		dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"110",3) == 0 || strncmp(m_szCode,"120",3) == 0 )	// 上海企业债券
		{	type = CStock::typeshBond;		dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"310",3) == 0 )	// 上海国债期货
		{	type = CStock::typeshBond;		dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"580",3) == 0 )	// 上海A股权证
		{	type = CStock::typeshRight;		dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"710",3) == 0 )	// 上海转配股
		{	type = CStock::typeshAdmeasure;	dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"711",3) == 0 )	// 上海转配股再转配股
		{	type = CStock::typeshAdmeasure;	dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"730",3) == 0 )	// 上海新股申购
		{	type = CStock::typeshAdmeasure;	dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"737",3) == 0 )	// 上海新股配售
		{	type = CStock::typeshAdmeasure;	dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"201",3) == 0 )	// 上海国债回购	
		{	type = CStock::typeshBond;		dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"129",3) == 0 || strncmp(m_szCode,"100",3) == 0 )	// 上海可转换债券
		{	type = CStock::typeshBond;		dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"700",3) == 0 )	// 上海配股
		{	type = CStock::typeshAdmeasure;	dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"701",3) == 0 )	// 上海转配股再配股
		{	type = CStock::typeshAdmeasure;	dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"720",3) == 0 )	// 上海红利
		{	type = CStock::typeshBonus;		dwMarket = CStock::marketSHSE;	}
		else if( strncmp(m_szCode,"735",3) == 0 )	// 上海新基金申购
		{	type = CStock::typeshAdmeasure;	dwMarket = CStock::marketSHSE;	}
	}

	if( CStock::typeNone == m_type )
		m_type		= type;
	if( CStock::marketUnknown == m_dwMarket )
		m_dwMarket	= dwMarket;
}

const char * CStockInfo::GetStockCode( )
{
	return m_szCode;
}

BOOL CStockInfo::SetStockCode( DWORD dwMarket, const char * szCode )
{
	if( NULL == szCode || strlen(szCode) <= 0 )
	{
		Clear();
		return FALSE;
	}

	if( IsEqualTo( dwMarket, szCode ) )
	{
		if( dwMarket != CStock::marketUnknown )
			m_dwMarket	=	dwMarket;
		return IsValidStock();
	}

	Clear( );

	m_dwMarket	=	dwMarket;
	memset(m_szCode, 0, sizeof(m_szCode) );
	strncpy( m_szCode, szCode, min(sizeof(m_szCode)-1,strlen(szCode)) );
	ResolveTypeAndMarket();
	return IsValidStock();
}

LONG CStockInfo::GetType( )
{
	return m_type;
}

void CStockInfo::SetType( LONG t )
{
	m_type	=	t;

	if( CStock::marketUnknown == m_dwMarket )
	{
		if( IsShenZhen() )
			m_dwMarket	=	CStock::marketSZSE;
		if( IsShangHai() )
			m_dwMarket	=	CStock::marketSHSE;
	}
}

const char * CStockInfo::GetStockName( )
{
#ifdef	CLKLAN_ENGLISH_US
	if( strlen(m_szNameEnu) > 0 )
		return m_szNameEnu;
	if( strlen(m_szName) > 0 )
	{
		if( AfxIsEnglish(m_szName,sizeof(m_szName)) )
			return m_szName;
		else
		{
			CSPString sTemp = AfxFaintlyChsToEnu( m_szName );
			sTemp = AfxMakeSpellCode( sTemp );
			strncpy( m_szNameEnu, sTemp, min(sizeof(m_szNameEnu)-1,sTemp.GetLength()) );
			return m_szNameEnu;
		}
	}
	if( strlen(m_szShortname) > 0 && AfxIsEnglish(m_szShortname,sizeof(m_szShortname))
		&& sizeof(m_szNameEnu) > strlen(m_szCode)+strlen(m_szShortname)+1 )
	{
		sprintf( m_szNameEnu, "%s-%s", m_szCode, m_szShortname );
		return m_szNameEnu;
	}
	return m_szCode;
#else
	return m_szName;
#endif
}

void CStockInfo::SetStockName( const char * szName )
{
	memset(m_szName, 0, sizeof(m_szName) );
	if( NULL == szName )
		return;
	strncpy( m_szName, szName, min(sizeof(m_szName)-1,strlen(szName)) );
}

const char * CStockInfo::GetStockNameEnu( )
{
	return m_szNameEnu;
}

void CStockInfo::SetStockNameEnu( const char *szNameEnu )
{
	memset(m_szNameEnu, 0, sizeof(m_szNameEnu) );
	if( NULL == szNameEnu )
		return;
	strncpy( m_szNameEnu, szNameEnu, min(sizeof(m_szNameEnu)-1,strlen(szNameEnu)) );
}

const char * CStockInfo::GetStockNameChs( )
{
	return m_szName;
}

void CStockInfo::SetStockNameChs( const char *szName )
{
	memset(m_szName, 0, sizeof(m_szName) );
	if( NULL == szName )
		return;
	strncpy( m_szName, szName, min(sizeof(m_szName)-1,strlen(szName)) );
}

const char * CStockInfo::GetStockShortName( )
{
	if( strlen(m_szShortname) <= 0 )
	{
		CSPString sName = m_szName;
		CSPString sTemp = AfxMakeSpellCode( sName, 0x0 );
		strncpy( m_szShortname, sTemp, min(sizeof(m_szShortname)-1,sTemp.GetLength()) );
	}
	return m_szShortname;
}

void CStockInfo::SetStockShortName( const char *szShortName )
{
	memset(m_szShortname, 0, sizeof(m_szShortname) );
	if( NULL == szShortName )
		return;
	strncpy( m_szShortname, szShortName, min(sizeof(m_szShortname)-1,strlen(szShortName)) );
}

const char * CStockInfo::GetStockDomain( )
{
#ifdef	CLKLAN_ENGLISH_US
	if( !AfxIsEnglish(m_szDomain,sizeof(m_szDomain)) )
	{
		CSPString sTemp = AfxFaintlyChsToEnu( m_szDomain );
		memset( m_szDomain, 0, sizeof(m_szDomain) );
		if( AfxIsEnglish(sTemp,sTemp.GetLength()) )
			strncpy( m_szDomain, sTemp, min(sizeof(m_szDomain)-1,sTemp.GetLength()) );
	}
	return m_szDomain;
#else
	return m_szDomain;
#endif
}

void CStockInfo::SetStockDomain( const char * szDomain )
{
	memset(m_szDomain, 0, sizeof(m_szDomain) );
	if( NULL == szDomain )
		return;
	strncpy( m_szDomain, szDomain, min(sizeof(m_szDomain)-1,strlen(szDomain)) );
}

const char * CStockInfo::GetStockProvince( )
{
#ifdef	CLKLAN_ENGLISH_US
	if( !AfxIsEnglish(m_szProvince,sizeof(m_szProvince)) )
	{
		CSPString sTemp = AfxFaintlyChsToEnu( m_szProvince );
		sTemp = AfxMakeSpellCode( sTemp );
		memset( m_szProvince, 0, sizeof(m_szProvince) );
		strncpy( m_szProvince, sTemp, min(sizeof(m_szProvince)-1,sTemp.GetLength()) );
	}
	return m_szProvince;
#else
	return m_szProvince;
#endif
}

void CStockInfo::SetStockProvince( const char * szProvince )
{
	memset(m_szProvince, 0, sizeof(m_szProvince) );
	if( NULL == szProvince )
		return;
	strncpy( m_szProvince, szProvince, min(sizeof(m_szProvince)-1,strlen(szProvince)) );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -