📄 stock.cpp
字号:
/*
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 + -