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

📄 express.cpp

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

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

	Using:
		class	CExpress;
		class	CIndex;
		class	CIndexContainer;
*/

#include "stdafx.h"
#include "Express.h"
#include <math.h>

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

SLH_DATA	slh_data_array[SLH_MAX+1]	=	{
	{ SLH_NONE,						"",	100,	"" },
	{ SLH_CODE,						"",	100,	"" },
	{ SLH_NAME,						"",	110,	"" },
	//	技术数据
	{ SLH_DATE,						"",	110,	"" },
	{ SLH_LASTCLOSE,				"",	100,	"lastclose" },
	{ SLH_OPEN,						"",	100,	"open" },
	{ SLH_CLOSE,					"",	100,	"close" },
	{ SLH_HIGH,						"",	100,	"high" },
	{ SLH_LOW,						"",	100,	"low" },
	{ SLH_AVERAGE,					"",	100,	"average" },
	{ SLH_DIFF,						"",	100,	"diff" },
	{ SLH_DIFFPERCENT,				"",	100,	"diffpercent" },
	{ SLH_SCOPE,					"",	100,	"scope" },
	{ SLH_VOLUME,					"",	140,	"volume" },
	{ SLH_AMOUNT,					"",	140,	"amount" },
	{ SLH_VOLUP,					"",	100,	"volup" },
	{ SLH_VOLDOWN,					"",	100,	"voldown" },
	{ SLH_DIFFPERCENT_MIN5,			"",	100,	"diffpercent_min5" },
	{ SLH_SELLBUYRATIO,				"",	100,	"sellbuyratio" },
	{ SLH_SELLBUYDIFF,				"",	100,	"sellbuydiff" },
	{ SLH_BUYPRICE3,				"",	100,	"buyprice3" },
	{ SLH_BUYPRICE2,				"",	100,	"buyprice2" },
	{ SLH_BUYPRICE1,				"",	100,	"buyprice1" },
	{ SLH_SELLPRICE1,				"",	100,	"sellprice1" },
	{ SLH_SELLPRICE2,				"",	100,	"sellprice2" },
	{ SLH_SELLPRICE3,				"",	100,	"sellprice3" },
	{ SLH_BUYVOLUME3,				"",	100,	"buyvolume3" },
	{ SLH_BUYVOLUME2,				"",	100,	"buyvolume2" },
	{ SLH_BUYVOLUME1,				"",	100,	"buyvolume1" },
	{ SLH_SELLVOLUME1,				"",	100,	"sellvolume1" },
	{ SLH_SELLVOLUME2,				"",	100,	"sellvolume2" },
	{ SLH_SELLVOLUME3,				"",	100,	"sellvolume3" },
	
	//	主要基本指标
	{ SLH_REPORTTYPE,				"",	100,	"" },
	{ SLH_PE,						"",	100,	"pe" },
	{ SLH_PNETASSET,				"",	100,	"pnetasset" },
	{ SLH_PMAININCOME,				"",	100,	"pmainincome" },
	{ SLH_RATIO_PCASH,				"",	100,	"ratio_pcash" },
	{ SLH_RATIO_CURRENCY,			"",	100,	"ratio_currency" },
	{ SLH_RATIO_CHANGEHAND,			"",	100,	"ratio_changehand" },
	{ SLH_RATIO_VOLUME,				"",	100,	"ratio_volume" },
	{ SLH_RS,						"",	100,	"rs" },
	{ SLH_MARKETVALUE,				"",	170,	"marketvalue" },
	{ SLH_MARKETVALUEA,				"",	170,	"marketvaluea" },
	{ SLH_MARKETVALUEB,				"",	170,	"marketvalueb" },
	// ★偿债能力
	{ SLH_RATIO_LIQUIDITY,			"",	140,	"ratio_liquidity" },
	{ SLH_RATIO_QUICK,				"",	140,	"ratio_quick" },
	{ SLH_VELOCITY_RECEIVABLES,		"",	170,	"velocity_receivables" },
	// ★经营能力
	{ SLH_VELOCITY_MERCHANDISE,		"",	150,	"velocity_merchandise" },
	{ SLH_MAIN_INCOME,				"",	160,	"main_income" },
	{ SLH_CASH_PS,					"",	170,	"cash_ps" },
	// ★盈利能力
	{ SLH_PROFIT_MARGIN,			"",	170,	"profit_margin" },
	{ SLH_NETASSET_YIELD,			"",	190,	"netasset_yield" },
	// ★资本结构
	{ SLH_DATE_BEGIN,				"",	160,	"" },
	{ SLH_SHARE_COUNT_TOTAL,		"",	160,	"share_count_total" },
	{ SLH_SHARE_COUNT_A,			"",	140,	"share_count_a" },
	{ SLH_SHARE_COUNT_B,			"",	140,	"share_count_b" },
	{ SLH_SHARE_COUNT_H,			"",	140,	"share_count_h" },
	{ SLH_SHARE_COUNT_NATIONAL,		"",	140,	"share_count_national" },
	{ SLH_SHARE_COUNT_CORP,			"",	140,	"share_count_corp" },
	{ SLH_PROFIT_PSUD,				"",	170,	"profit_psud" },
	{ SLH_ASSET,					"",	140,	"asset" },
	{ SLH_RATIO_HOLDERRIGHT,		"",	170,	"ratio_holderright" },
	{ SLH_RATIO_LONGDEBT,			"",	170,	"ratio_longdebt" },
	{ SLH_RATIO_DEBT,				"",	170,	"ration_debt" },
	// ★投资收益能力
	{ SLH_NETASSET_PS,				"",	150,	"netasset_ps" },
	{ SLH_NETASSET_PS_REGULATE,		"",	200,	"netasset_ps_regulate" },
	{ SLH_EPS,						"",	140,	"eps" },
	{ SLH_EPS_DEDUCT,				"",	170,	"eps_deduct" },
	{ SLH_NET_PROFIT,				"",	140,	"net_profit" },
	{ SLH_MAIN_PROFIT,				"",	140,	"main_profit" },
	{ SLH_TOTAL_PROFIT,				"",	140,	"total_profit" },
	{ SLH_PROFIT_INC,				"",	170,	"profit_inc" },
	{ SLH_INCOME_INC,				"",	170,	"income_inc" },
	{ SLH_ASSET_INC,				"",	190,	"asset_inc" },
	{ SLH_ANNGAINS_AVERAGE,			"",	170,	"anngains_average" },
	{ SLH_ANNGAINS_STDDEV,			"",	170,	"anngains_stddev" },
	{ SLH_BETA,						"",	100,	"beta" },
	{ SLH_SHARP,					"",	100,	"sharp" },
	{ SLH_TRADE,					"",	100,	"" },
	{ SLH_PROVINCE,					"",	100,	"" },
};

CSPString AfxGetVariantName( UINT nVariantID, BOOL bWithParameter )
{
	if( nVariantID >= SLH_USERDEFINE_BEGIN )
	{
		CIndexContainer	& aindex	=	AfxGetProfile().GetSListColumnsUser();
		CIndex	index	=	aindex.GetIndex( nVariantID );
		return index.m_strName;
	}
	if( nVariantID < SLH_MIN || nVariantID > SLH_MAX )
		return "";
	
	CSPString	strResult;
	if( strResult.IsEmpty() )
		strResult	=	slh_data_array[nVariantID].string;
	if( strResult.IsEmpty() )
	{
		SP_ASSERT( nVariantID == slh_data_array[nVariantID].slh_id );
		strResult	=	AfxGetSLHTitle( nVariantID );

		int	size	=	sizeof(slh_data_array[nVariantID].string);
		strncpy( slh_data_array[nVariantID].string, strResult, size-1 );
		slh_data_array[nVariantID].string[size-1]	=	0;
	}

	if( bWithParameter )
	{
		if( SLH_DIFF == nVariantID || SLH_DIFFPERCENT == nVariantID || SLH_SCOPE == nVariantID
			|| SLH_RATIO_CHANGEHAND == nVariantID || SLH_RATIO_VOLUME == nVariantID
			|| SLH_RS == nVariantID || SLH_ANNGAINS_AVERAGE == nVariantID )
		{
			CSPString	strSuf, strTemp;
			strSuf	=	slh_hdrday;

			if( SLH_DIFF == nVariantID )
				strTemp.Format( "%s-%d%s", (LPCTSTR)strResult, AfxGetProfile().GetDiffDays(), (LPCTSTR)strSuf );
			else if( SLH_DIFFPERCENT == nVariantID )
				strTemp.Format( "%s-%d%s", (LPCTSTR)strResult, AfxGetProfile().GetDiffPercentDays(), (LPCTSTR)strSuf );
			else if( SLH_SCOPE == nVariantID )
				strTemp.Format( "%s-%d%s", (LPCTSTR)strResult, AfxGetProfile().GetScopeDays(), (LPCTSTR)strSuf );
			else if( SLH_RATIO_CHANGEHAND == nVariantID )
				strTemp.Format( "%s-%d%s", (LPCTSTR)strResult, AfxGetProfile().GetRatioChangeHandDays(), (LPCTSTR)strSuf );
			else if( SLH_RATIO_VOLUME == nVariantID )
				strTemp.Format( "%s-%d%s", (LPCTSTR)strResult, AfxGetProfile().GetRatioVolumeDays(), (LPCTSTR)strSuf );
			else if( SLH_RS == nVariantID )
				strTemp.Format( "%s-%d%s", (LPCTSTR)strResult, AfxGetProfile().GetRSDays(), (LPCTSTR)strSuf );	
			else if( SLH_ANNGAINS_AVERAGE == nVariantID )
				strTemp.Format( "%s-%d%s", (LPCTSTR)strResult, AfxGetProfile().GetYieldAverageDays(), (LPCTSTR)strSuf );
			else
				SP_ASSERT( FALSE );
			strResult	=	strTemp;
		}
	}
	
	return strResult;
}

BOOL AfxGetVariantNameArray( CSPStringArray & astr, BOOL bWithParameter )
{
	astr.SetSize( 0, SLH_MAX+SLH_MIN+1 );
	for( int nVariantID = min(0,SLH_MIN); nVariantID <= SLH_MAX; nVariantID ++ )
	{
		if( strlen(slh_data_array[nVariantID].varname) > 0 )
		{
			CSPString	strTemp	=	AfxGetVariantName( nVariantID, bWithParameter );
			astr.Add( strTemp );
		}
		else
		{
			astr.Add( "" );
		}
	}
	return TRUE;
}

UINT AfxGetVariantID( CSPString strName, BOOL bWithParameter )
{
	for( int nVariantID = SLH_MIN; nVariantID <= SLH_MAX; nVariantID ++ )
	{
		CSPString	strTemp	=	AfxGetVariantName( nVariantID, bWithParameter );
		if( 0 == strTemp.CompareNoCase( strName ) )
			return nVariantID;
	}

	CIndexContainer	& aindex	=	AfxGetProfile().GetSListColumnsUser();
	CIndex	index	=	aindex.GetIndex( strName );
	if( !index.IsInvalidID() )
		return index.m_nID;

	return SLH_INVALID;
}

CSPString AfxGetVariantVarName( int nVariantID )
{
	if( nVariantID >= SLH_MIN && nVariantID <= SLH_MAX )
		return slh_data_array[nVariantID].varname;
	else
		return "";
}

CSPString AfxGetVariantVarName( CSPString strName, BOOL bWithParameter )
{
	UINT nVariantID = AfxGetVariantID( strName, bWithParameter );
	return AfxGetVariantVarName( nVariantID );
}

/* 计算股票列表视图中某一列的值,其数值单位与股票列表视图中相同 */
BOOL AfxGetVariantValue(UINT nVariantID, CStockInfo &info, double * pValue,
						CStockContainer *pContainer )
{
	if( NULL == pValue )
	{
		SP_ASSERT( FALSE );
		return FALSE;
	}

	double	factor	=	1; // CStock::GetReportFactor( info.m_reporttype );

	if( nVariantID >= SLH_MIN && nVariantID <= SLH_MAX )
	{
		switch( nVariantID )
		{
		case	SLH_LASTCLOSE:					//	昨收
			*pValue	=	info.m_fLast;
			return ( info.m_fLast > 1e-4 );
		case	SLH_OPEN:						//	今开
			*pValue	=	info.m_fOpen;
			return ( info.m_fOpen > 1e-4 );
		case	SLH_CLOSE:						//	收盘价
			*pValue	=	info.m_fClose;
			return ( info.m_fClose > 1e-4 );
		case	SLH_HIGH:						//	最高价
			*pValue	=	info.m_fHigh;
			return ( info.m_fHigh > 1e-4 );
		case	SLH_LOW:						//	最低价
			*pValue	=	info.m_fLow;
			return ( info.m_fLow > 1e-4 );
		case	SLH_AVERAGE:					//	均价
			return info.GetAverage( pValue );
		case	SLH_DIFF:						//	涨跌
			return info.GetDiff( pValue, info.m_datetech, AfxGetProfile().GetDiffDays() );
		case	SLH_DIFFPERCENT:				//	涨幅
			return info.GetDiffPercent( pValue, info.m_datetech, AfxGetProfile().GetDiffPercentDays() );
		case	SLH_SCOPE:						//	震幅
			return info.GetScope( pValue, info.m_datetech, AfxGetProfile().GetScopeDays() );
		case	SLH_VOLUME:						//	成交量
			*pValue	=	info.m_fVolume*0.01;
			return ( info.m_fVolume > 1e-4 );
		case	SLH_AMOUNT:						//	成交额
			*pValue	=	info.m_fAmount*0.001;
			return ( info.m_fAmount > 1e-4 );
		case	SLH_VOLUP:						//	外盘
			if( info.m_minute.StatVolumeInfo( NULL, pValue, NULL ) )
			{
				*pValue	=	(*pValue) * 0.01;
				return TRUE;
			}
			break;
		case	SLH_VOLDOWN:					//	内盘
			if( info.m_minute.StatVolumeInfo( NULL, NULL, pValue ) )
			{
				*pValue	=	(*pValue) * 0.01;
				return TRUE;
			}
			break;
		case	SLH_DIFFPERCENT_MIN5:			//	五分钟涨幅%
			return info.GetDiffPercentMin5( pValue );
		case	SLH_SELLBUYRATIO:				//	委比%
			return info.GetSellBuyRatio( pValue, NULL );
		case	SLH_SELLBUYDIFF:				//	委量差
			if( info.GetSellBuyRatio( NULL, pValue ) )
			{
				*pValue	=	(*pValue) * 0.01;
				return TRUE;
			}
			break;
		case	SLH_BUYPRICE3:					//	买价三
			*pValue	=	info.m_fBuyPrice[2];
			return ( info.m_fBuyPrice[2] > 1e-4 );
		case	SLH_BUYPRICE2:					//	买价二
			*pValue	=	info.m_fBuyPrice[1];
			return ( info.m_fBuyPrice[1] > 1e-4 );
		case	SLH_BUYPRICE1:					//	买价一
			*pValue	=	info.m_fBuyPrice[0];
			return ( info.m_fBuyPrice[0] > 1e-4 );
		case	SLH_SELLPRICE1:					//	卖价一
			*pValue	=	info.m_fSellPrice[0];
			return ( info.m_fSellPrice[0] > 1e-4 );
		case	SLH_SELLPRICE2:					//	卖价二
			*pValue	=	info.m_fSellPrice[1];
			return ( info.m_fSellPrice[1] > 1e-4 );
		case	SLH_SELLPRICE3:					//	卖价三
			*pValue	=	info.m_fSellPrice[2];
			return ( info.m_fSellPrice[2] > 1e-4 );
		case	SLH_BUYVOLUME3:					//	买量三
			*pValue	=	info.m_fBuyVolume[2] * 0.01;
			return ( info.m_fBuyVolume[2] > 1e-4 );
		case	SLH_BUYVOLUME2:					//	买量二
			*pValue	=	info.m_fBuyVolume[1] * 0.01;
			return ( info.m_fBuyVolume[1] > 1e-4 );
		case	SLH_BUYVOLUME1:					//	买量一
			*pValue	=	info.m_fBuyVolume[0] * 0.01;
			return ( info.m_fBuyVolume[0] > 1e-4 );
		case	SLH_SELLVOLUME1:				//	卖量一
			*pValue	=	info.m_fSellVolume[0] * 0.01;
			return ( info.m_fSellVolume[0] > 1e-4 );
		case	SLH_SELLVOLUME2:				//	卖量二
			*pValue	=	info.m_fSellVolume[1] * 0.01;
			return ( info.m_fSellVolume[1] > 1e-4 );
		case	SLH_SELLVOLUME3:				//	卖量三
			*pValue	=	info.m_fSellVolume[2] * 0.01;
			return ( info.m_fSellVolume[2] > 1e-4 );

			//	主要基本指标
		case	SLH_PE:							//	市盈率
			return info.GetPE( pValue );
		case	SLH_PNETASSET:					//	市净率
			return info.GetPNetAsset( pValue );
		case	SLH_PMAININCOME:				//	市销率
			return info.GetPMainIncome( pValue );
		case	SLH_RATIO_PCASH:				//	价格净现金比
			return info.GetRatioPCash( pValue );
		case	SLH_RATIO_CURRENCY:				//	流通率
			return info.GetRatioCurrency( pValue );
		case	SLH_RATIO_CHANGEHAND:			//	换手率
			return info.GetRatioChangeHand( pValue, info.m_datetech, AfxGetProfile().GetRatioChangeHandDays() );
		case	SLH_RATIO_VOLUME:				//	量比
			return info.GetRatioVolume( pValue, info.m_datetech, AfxGetProfile().GetRatioVolumeDays() );
		case	SLH_RS:							//	相对强度
			return info.GetRS( pValue, info.m_datetech, AfxGetProfile().GetRSDays() );
		case	SLH_MARKETVALUE:				//	总市值
			if( info.GetMarketValue( pValue ) )
			{
				*pValue	=	(*pValue) * 0.0001;
				return TRUE;
			}
			break;
		case	SLH_MARKETVALUEA:				//	A股市值
			if( info.GetMarketValueA( pValue ) )
			{
				*pValue	=	(*pValue) * 0.0001;
				return TRUE;
			}
			break;
		case	SLH_MARKETVALUEB:				//	B股市值
			if( info.GetMarketValueB( pValue ) )
			{
				*pValue	=	(*pValue) * 0.0001;
				return TRUE;
			}
			break;
			
			// ★偿债能力
		case	SLH_RATIO_LIQUIDITY:			//	流动比率
			*pValue	=	info.m_fRatio_liquidity;
			return ( fabs(info.m_fRatio_liquidity) > 1e-4 );
		case	SLH_RATIO_QUICK:				//	速动比率
			*pValue	=	info.m_fRatio_quick;
			return ( fabs(info.m_fRatio_quick) > 1e-4 );
		case	SLH_VELOCITY_RECEIVABLES:		//	应收帐款周率
			*pValue	=	info.m_fVelocity_receivables;
			return ( fabs(info.m_fVelocity_receivables) > 1e-4 );

			// ★经营能力
		case	SLH_VELOCITY_MERCHANDISE:		// 存货周转率
			*pValue	=	info.m_fVelocity_merchandise;
			return ( fabs(info.m_fVelocity_merchandise) > 1e-4 );
		case	SLH_MAIN_INCOME:				// 主营业务收入
			*pValue	=	factor * info.m_fMain_income * 0.0001;
			return ( fabs(info.m_fMain_income) > 1e-4 );
		case	SLH_CASH_PS:					// 每股净现金流量
			*pValue	=	factor * info.m_fCash_ps;
			return ( fabs(info.m_fCash_ps) > 1e-4 );

			// ★盈利能力
		case	SLH_PROFIT_MARGIN:				// 主营业务利润率
			*pValue	=	info.m_fProfit_margin;
			return ( fabs(info.m_fProfit_margin) > 1e-4 );
		case	SLH_NETASSET_YIELD:				// 净资产收益率
			*pValue	=	factor * info.m_fNetasset_yield;
			return ( fabs(info.m_fNetasset_yield) > 1e-4 );
			
			// ★资本结构
		case	SLH_SHARE_COUNT_TOTAL:			//	总股本
			*pValue	=	info.m_fShare_count_total * 0.0001;
			return ( info.m_fShare_count_total > 1e-4 );
		case	SLH_SHARE_COUNT_A:				//	流通A股
			*pValue	=	info.m_fShare_count_a * 0.0001;
			return TRUE;
		case	SLH_SHARE_COUNT_B:				//	流通B股
			*pValue	=	info.m_fShare_count_b * 0.0001;
			return TRUE;
		case	SLH_SHARE_COUNT_H:				//	流通H股
			*pValue	=	info.m_fShare_count_h * 0.0001;
			return TRUE;
		case	SLH_SHARE_COUNT_NATIONAL:		//	国有股
			*pValue	=	info.m_fShare_count_national * 0.0001;
			return TRUE;
		case	SLH_SHARE_COUNT_CORP:			//	法人股
			*pValue	=	info.m_fShare_count_corp * 0.0001;
			return TRUE;
		case	SLH_PROFIT_PSUD:				// 每股未分配利润
			*pValue	=	info.m_fProfit_psud;
			return TRUE;
		case	SLH_ASSET:						// 总资产
			*pValue	=	info.m_fAsset * 0.0001;
			return ( fabs(info.m_fAsset) > 1e-4 );
		case	SLH_RATIO_HOLDERRIGHT:			// 股东权益比率
			*pValue	=	info.m_fRatio_holderright;
			return ( fabs(info.m_fRatio_holderright) > 1e-4 );
		case	SLH_RATIO_LONGDEBT:				// 长期负债率
			*pValue	=	info.m_fRatio_longdebt;
			return TRUE;
		case	SLH_RATIO_DEBT:					// 资产负债率
			*pValue	=	info.m_fRatio_debt;
			return ( fabs(info.m_fRatio_debt) > 1e-4 );

			// ★投资收益能力
		case	SLH_NETASSET_PS:				// 每股净资产
			*pValue	=	info.m_fNetasset_ps;
			return ( fabs(info.m_fNetasset_ps) > 1e-4 );
		case	SLH_NETASSET_PS_REGULATE:		// 调整每股净资产
			*pValue	=	info.m_fNetasset_ps_regulate;

⌨️ 快捷键说明

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