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

📄 database.h

📁 股软 通达信行情接收接口, 包括美元汇率
💻 H
字号:
/*
	Cross Platform Core Code.

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

	Using:
		class	CStdatabase;
*/

#if	!defined( __STKLIB_DATABASE_H__ )
#define	__STKLIB_DATABASE_H__

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

#define	MAX_DATATYPENAME	128

class CDBType
{
public:
	CDBType( );

	int type;
	char name[MAX_DATATYPENAME];
};

#pragma	pack(1)

////////////////////////////////////////////////////////////////////
//	通用数据包的数据结构(*.STK)
typedef	struct tyday_fheader	{
	char	magic;
	char	code[6];
	char	magic2;
	char	name[8];
	DWORD	date;		//日期
	DWORD	datebegin;	//起始日期
	DWORD	dateend;	//终止日期
	DWORD	gendate;	//生成日期
	DWORD	gentime;	//生成时间
	DWORD	from;		//来源
	DWORD	sharecount;	//股票数
	DWORD	recordcount;//记录数
}TYDAY_FHEADER;

typedef	struct tyday_record	{
	char	magic;
	char	code[6];
	char	magic2;
	char	name[8];
	DWORD	date;		//日期
	DWORD	open;		//开盘(元/1000)
	DWORD	high;		//最高价(元/1000)
	DWORD	low;		//最低价(元/1000)
	DWORD	close;		//收盘(元/1000)
	DWORD	amount;		//成交额(千元)
	DWORD	volume;		//成交量(手)
	DWORD	serial;		//记录序号
}TYDAY_RECORD;

////////////////////////////////////////////////////////////////////
//	分析家数据包的数据结构(*.DAD)
#define	FXJDAY_FHEADER_MAGIC	0x8C19FC33
typedef	struct fxjday_fheader	{
	DWORD	m_dwMagic;			// 33 FC 19 8C,老版本的Magic
	DWORD	m_dwUnknown;		// 未知
	DWORD	m_dwStockCount;		// 为本文件的股票数
	DWORD	m_dwReserved;		// = 0
}FXJDAY_FHEADER;

typedef	union fxjday_record	{
	struct
	{
		DWORD	m_dwMagic;		// = -1
		WORD	m_wMarket;		// 市场 SH, SZ
		char	m_szCode[6];
		DWORD	m_dwReserved[5];
	};
	struct
	{
		time_t	m_time;		//日期
		float	open;		//开盘(元/1000)
		float	high;		//最高价(元/1000)
		float	low;		//最低价(元/1000)
		float	close;		//收盘(元/1000)
		float	volume;		//成交量(手)
		float	amount;		//成交额(元)
		float	reserved;	//
	};
}FXJDAY_RECORD;

#pragma	pack()

BOOL convert_TYDAY_RECORD_to_KDATA( TYDAY_RECORD * precord, KDATA * pkd );
BOOL convert_TYDAY_RECORD_MIN_to_KDATA( TYDAY_RECORD * precord, KDATA * pkd );
BOOL convert_KDATA_to_TYDAY_RECORD( DWORD dwSerial, const char * name, KDATA * pkd, TYDAY_RECORD * precord );
BOOL convert_KDATA_to_TYDAY_RECORD_MIN( DWORD dwSerial, const char * name, KDATA * pkd, TYDAY_RECORD * precord );

BOOL convert_FXJDAY_RECORD_to_KDATA( DWORD dwMarket, LPCTSTR lpszCode, int nKType, FXJDAY_RECORD *precord, KDATA *pkd );

typedef BOOL (CALLBACK* PROGRESS_CALLBACK)(DWORD dwCode, DWORD dwProgress, LPCTSTR lpszMsg, VOID * cookie);

#define	PROG_PROGRESS			1
#define	STKLIB_MAX_PROGRESS		10000
#define	STKLIB_MAXF_PROGRESS		10000.

class	CStockContainer;

/***
	读取K线数据的通用接口,各种格式的读取K线数据类必须从此类继承
*/
class IStStore
{
public:
	enum DBTypes {	// 数据格式类型,目前只支持typeSelfDB(自有格式)和typeQianlong(钱龙格式)
		dbtypeUnknown		=	0x01,
		dbtypeSelfDB		=	0x02,
		dbtypeQianlong		=	0x03,
		dbtypeShenglong		=	0x04,
	};

	static	BOOL IsValidDataType( int nType );
	static	int	GetSupportedDataType ( CDBType * pdbtype, int maxsize );
	static	IStStore * CreateStore( const char * rootpath, int nDBType = dbtypeUnknown );	// 给出根目录和类型,新建一个对象

	virtual	int IsOK( ) { return m_bIsOK; }
	virtual	const char * GetRootPath( );	// 得到当前对象的根目录

	virtual	int	GetDBType( )	=	0;		// 得到当前对象的数据类型
	virtual	const char * GetDBTypeName( )	=	0;	// 得到当前对象的数据类型名称
	virtual	int	GetMaxStockNumber( )	=	0;	// 得到股票数量
	virtual	int	LoadCodetable( CStockContainer & container )	=	0;	// 读取所有股票的信息
	virtual	int	StoreCodetable( CStockContainer & container )	=	0;	// 保存代码表
	virtual	int	LoadKDataCache( CStockContainer & container, PROGRESS_CALLBACK fnCallback, void *cookie, int nProgStart, int nProgEnd )	=	0;	// 读取所有股票的最近日线数据缓冲
	virtual	int	LoadBasetable( CStockContainer & container )	=	0;	// 读取某一股票的财务资料表,包括每股收益,每股净资产等,见CBaseData
	virtual	int	StoreBasetable( CStockContainer & container )	=	0;	// 保存某一股票的财务资料表
	virtual	int	LoadBaseText( CStock *pstock )	=	0;					// 读取某一股票的基本资料文本
	virtual	int	LoadKData( CStock *pstock, int nKType )	=	0;			// 读取某一股票的某个周期的K线数据
	virtual	int	LoadDRData( CStock *pstock )	=	0;					// 读取某一股票的除权除息资料
	virtual	int StoreDRData( CStock *pstock )	=	0;					// 保存某一股票的除权除息资料
	virtual int	LoadReport( CStock *pstock )	=	0;					// 读取某一股票的行情刷新数据
	virtual int	LoadMinute( CStock *pstock )	=	0;					// 读取某一股票的行情分时数据
	virtual int	LoadOutline( CStock *pstock )	=	0;					// 读取某一股票的行情额外数据
	virtual int	StoreReport( REPORT * pReport, int nCount, BOOL bBigTrade )	=	0;		// 保存行情刷新数据
	virtual int	StoreMinute( MINUTE * pMinute, int nCount )	=	0;		// 保存行情分时数据
	virtual int	StoreOutline( OUTLINE * pOutline, int nCount )	=	0;	// 保存行情分时数据


	virtual	int	InstallCodetbl( const char * filename, const char *orgname )	=	0;	// 安装下载的代码表
	virtual	int	InstallCodetblBlock( const char * filename, const char *orgname )	=	0;	// 安装下载的板块表
	virtual	int	InstallCodetblFxjBlock( const char * filename, const char *orgname )	=	0;	// 安装下载的分析家板块表
	virtual	int	InstallKData( CKData & kdata, BOOL bOverwrite = FALSE )	=	0;			// 安装K线数据
	virtual	int InstallKDataTy( const char * stkfile, int nKType, PROGRESS_CALLBACK fnCallback, void *cookie )	=	0;	// 安装下载的K线通用格式数据包
	virtual	int InstallKDataFxj( const char * dadfile, int nKType, PROGRESS_CALLBACK fnCallback, void *cookie )	=	0;	// 安装下载的K线分析家格式通用数据包
	virtual	int InstallDRData( CDRData & drdata )	=	0;								// 安装除权除息数据
	virtual	int	InstallDRDataClk( const char * filename, const char *orgname )	=	0;	// 安装下载的除权除息数据,一只股票一个文件
	virtual	int	InstallDRDataFxj( const char * fxjfilename )	=	0;					// 安装分析家除权除息数据
	virtual	int	InstallBasetable( const char * filename, const char *orgname )	=	0;	// 安装财务数据
	virtual	int	InstallBasetableTdx( const char * filename )	=	0;					// 安装通达信财务数据
	virtual	int	InstallBasetableFxj( const char * filename )	=	0;					// 安装分析家财务数据
	virtual	int InstallBaseText( const char * filename, const char *orgname )	=	0;	// 安装下载的基本资料数据,一只股票一个文件
	virtual	int InstallBaseText( const char * buffer, int nLen, const char *orgname )	=	0;	// 安装基本资料数据
	virtual	int InstallNewsText( const char * filename, const char *orgname )	=	0;	// 安装新闻数据文件
	virtual	int InstallNewsText( const char * buffer, int nLen, const char *orgname )	=	0;	// 安装新闻数据

	virtual	BOOL GetFileName( CSPString &sFileName, int nDataType,
				CStockInfo * pInfo = NULL, int nKType = CKData::ktypeDay )	=	0;		// 得到某种数据的文件名称
protected:
	BOOL	m_bIsOK;
	char	m_szRootPath[1024];
};

#define	ERR_DB_MAX	1000

/***
	本地数据类,提供对磁盘数据的操作接口,包括股票信息,各种周期K线数据,基本
	资料,权息资料的读取和安装。
	
	使用方法如下:
	CStDatabase::CreateSelfDB( "./" );

	CStDatabase	db;
	db.SetRootPath( "./", IStStore::dbtypeSelfDB );

	CStockContainer container;
	nLen	=	db.LoadCodetable( container );
	db.LoadBasetable( container );
	db.LoadKDataCache( container, NULL, NULL, 0, 0 );

	CStock	stock;
	stock.SetDatabase( &db );
	stock.PrepareData( CStock::dataK, CKData::ktypeDay );
	stock.PrepareData( CStock::dataDR );
	stock.PrepareData( CStock::dataK, m_nCurKType );
	CStockInfo	& info	=	stock.GetStockInfo();
	CKData	& kday	=	stock.GetKDataDay();
	CKData	& kdata	=	stock.GetKData(m_nCurKType);
	kday.SetDRData( stock.GetDRData() );
	kday.ChangeCurFormat( CKData::formatXDRdown, AfxGetProfile().GetAutoResumeDRBegin(), AfxGetProfile().GetAutoResumeDRLimit() );

	注意:使用CStDatabase的子类CNetDatabase也可以实现上述功能,并且提供的功能
	更多,使用方法相同。
*/
class CStDatabase : public Object
{
public:
	// Constructors
	CStDatabase();
	virtual ~CStDatabase();

	// Flag values

	// Attributes

	// Operations
	static	BOOL CreateSelfDB( const char * rootpath );		// 创建所需目录
	static	BOOL IsValidDataType( int nType );				// 类型是否合法
	static	int	GetSupportedDataType ( CDBType * pdbtype, int maxsize );	// 得到支持的数据类型
	BOOL	SetRootPath( const char * rootpath, int nDBType = IStStore::dbtypeUnknown );	// 设定数据目录

	BOOL	IsOK( );	// 数据目录是否符合
	const char * GetRootPath( );	// 得到数据目录
	int	GetDBType( );				// 得到数据类型
	const char * GetDBTypeName( );	// 得到数据类型名称

	virtual	DWORD	GetSelfTempPath( char *szTempPath, int size );	// 得到临时目录

	virtual	BOOL GetLastErrorMessage(LPTSTR lpszError, UINT nMaxError);	// 得到最近错误
	virtual	int	GetMaxStockNumber( );		// 得到股票数量
	virtual	int	LoadCodetable( CStockContainer &container );	// 读取所有股票的信息
	virtual	int	StoreCodetable( CStockContainer & container );	// 保存代码表
	virtual	int	LoadKDataCache( CStockContainer &container, PROGRESS_CALLBACK fnCallback, void *cookie, int nProgStart, int nProgEnd );	// 读取所有股票的最近日线数据缓冲
	virtual	int	LoadBasetable( CStockContainer & container );	// 读取某一股票的财务资料表,包括每股收益,每股净资产等,见CBaseData
	virtual	int	StoreBasetable( CStockContainer & container );	// 保存某一股票的财务资料表
	virtual	int	LoadBaseText( CStock *pstock );					// 读取某一股票的基本资料文本
	virtual	int	LoadKData( CStock *pstock, int nKType );		// 读取某一股票的某个周期的K线数据
	virtual int	LoadDRData( CStock *pstock );					// 读取某一股票的除权除息资料
	virtual	int StoreDRData( CStock *pstock );					// 保存某一股票的除权除息资料
	virtual int	LoadReport( CStock *pstock );					// 读取某一股票的行情刷新数据
	virtual int	LoadMinute( CStock *pstock );					// 读取某一股票的行情分时数据
	virtual int	LoadOutline( CStock *pstock );					// 读取某一股票的行情额外数据
	virtual int	StoreReport( REPORT * pReport, int nCount, BOOL bBigTrade );	// 保存行情刷新数据
	virtual int	StoreMinute( MINUTE * pMinute, int nCount );	// 保存行情分时数据
	virtual int	StoreOutline( OUTLINE * pOutline, int nCount );	// 保存行情分时数据

	virtual	int	InstallCodetbl( const char * filename, const char *orgname );		// 安装下载的代码表
	virtual	int	InstallCodetblBlock( const char * filename, const char *orgname );	// 安装下载的板块表
	virtual	int	InstallCodetblFxjBlock( const char * filename, const char *orgname );	// 安装下载的分析家板块表
	virtual	int	InstallKData( CKData & kdata, BOOL bOverwrite = FALSE );			// 安装K线数据
	virtual	int InstallKDataTy( const char * stkfile, int nKType, PROGRESS_CALLBACK fnCallback, void *cookie );	// 安装下载的K线通用格式数据
	virtual	int InstallKDataFxj( const char * dadfile, int nKType, PROGRESS_CALLBACK fnCallback, void *cookie );	// 安装下载的K线分析家格式数据
	virtual	int InstallDRData( CDRData & drdata );									// 安装除权除息数据
	virtual	int	InstallDRDataClk( const char * filename, const char *orgname );		// 安装下载的除权除息数据,一只股票一个文件
	virtual	int	InstallDRDataFxj( const char * fxjfilename );						// 安装分析家除权除息数据
	virtual	int	InstallBasetable( const char * filename, const char *orgname );		// 安装财务数据
	virtual	int	InstallBasetableTdx( const char * filename );						// 安装通达信财务数据
	virtual	int	InstallBasetableFxj( const char * filename );						// 安装分析家财务数据
	virtual	int InstallBaseText( const char * filename, const char *orgname );		// 安装下载的基本资料数据,一只股票一个文件
	virtual	int InstallBaseText( const char * buffer, int nLen, const char *orgname );		// 安装基本资料数据
	virtual	int InstallNewsText( const char * filename, const char *orgname );		// 安装新闻数据文件
	virtual	int InstallNewsText( const char * buffer, int nLen, const char *orgname );		// 安装新闻数据


	// assistant operation
	BOOL	AddAssistantRootPath( const char * rootpath, int nDBType = IStStore::dbtypeUnknown );	// 指定另外一个附加数据源的目录,自动读取
	void	RemoveAssistant( const char * rootpath );	// 移除另外一个附加数据源目录
	void	RemoveAllAssistant(  );						// 移除所有附加数据源目录

	static CSPTime	GetTimeInitial( );		// 得到初始数据日期
	BOOL	GetTimeLocalRange( CSPTime *ptmLatest, CSPTime * ptmPioneer, CSPTime * ptmInitial );	// 得到本地数据日期区间
	BOOL	GetNeedDownloadRange( CStockInfo &info, CSPTime tmBegin, CSPTime tmEnd, CSPTime &tmDLBegin, CSPTime &tmDLEnd );	// 得到需要下载的数据日期区间

	// 将钱龙格式K线数据 加入 通用数据包
	static	int		AppendToTyData( const char *code, const char *name, int nKType, LPCTSTR lpszKFile, LPCTSTR lpszTyDataFile, time_t tmBegin, time_t tmEnd );

protected:
	IStStore	* m_pStore;
	CSPPtrArray	m_aptrAssistant;
};

#endif	//__STKLIB_DATABASE_H__

⌨️ 快捷键说明

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