Database.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:13k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CStdatabase;
  7. */
  8. #if !defined( __STKLIB_DATABASE_H__ )
  9. #define __STKLIB_DATABASE_H__
  10. #include "StdAfx.h"
  11. #include "Stock.h"
  12. #define MAX_DATATYPENAME 128
  13. class CDBType
  14. {
  15. public:
  16. CDBType( );
  17. int type;
  18. char name[MAX_DATATYPENAME];
  19. };
  20. #pragma pack(1)
  21. ////////////////////////////////////////////////////////////////////
  22. // 通用数据包的数据结构(*.STK)
  23. typedef struct tyday_fheader {
  24. char magic;
  25. char code[6];
  26. char magic2;
  27. char name[8];
  28. DWORD date; //日期
  29. DWORD datebegin; //起始日期
  30. DWORD dateend; //终止日期
  31. DWORD gendate; //生成日期
  32. DWORD gentime; //生成时间
  33. DWORD from; //来源
  34. DWORD sharecount; //股票数
  35. DWORD recordcount;//记录数
  36. }TYDAY_FHEADER;
  37. typedef struct tyday_record {
  38. char magic;
  39. char code[6];
  40. char magic2;
  41. char name[8];
  42. DWORD date; //日期
  43. DWORD open; //开盘(元/1000)
  44. DWORD high; //最高价(元/1000)
  45. DWORD low; //最低价(元/1000)
  46. DWORD close; //收盘(元/1000)
  47. DWORD amount; //成交额(千元)
  48. DWORD volume; //成交量(手)
  49. DWORD serial; //记录序号
  50. }TYDAY_RECORD;
  51. ////////////////////////////////////////////////////////////////////
  52. // 分析家数据包的数据结构(*.DAD)
  53. #define FXJDAY_FHEADER_MAGIC 0x8C19FC33
  54. typedef struct fxjday_fheader {
  55. DWORD m_dwMagic; // 33 FC 19 8C,老版本的Magic
  56. DWORD m_dwUnknown; // 未知
  57. DWORD m_dwStockCount; // 为本文件的股票数
  58. DWORD m_dwReserved; // = 0
  59. }FXJDAY_FHEADER;
  60. typedef union fxjday_record {
  61. struct
  62. {
  63. DWORD m_dwMagic; // = -1
  64. WORD m_wMarket; // 市场 SH, SZ
  65. char m_szCode[6];
  66. DWORD m_dwReserved[5];
  67. };
  68. struct
  69. {
  70. time_t m_time; //日期
  71. float open; //开盘(元/1000)
  72. float high; //最高价(元/1000)
  73. float low; //最低价(元/1000)
  74. float close; //收盘(元/1000)
  75. float volume; //成交量(手)
  76. float amount; //成交额(元)
  77. float reserved; //
  78. };
  79. }FXJDAY_RECORD;
  80. #pragma pack()
  81. BOOL convert_TYDAY_RECORD_to_KDATA( TYDAY_RECORD * precord, KDATA * pkd );
  82. BOOL convert_TYDAY_RECORD_MIN_to_KDATA( TYDAY_RECORD * precord, KDATA * pkd );
  83. BOOL convert_KDATA_to_TYDAY_RECORD( DWORD dwSerial, const char * name, KDATA * pkd, TYDAY_RECORD * precord );
  84. BOOL convert_KDATA_to_TYDAY_RECORD_MIN( DWORD dwSerial, const char * name, KDATA * pkd, TYDAY_RECORD * precord );
  85. BOOL convert_FXJDAY_RECORD_to_KDATA( DWORD dwMarket, LPCTSTR lpszCode, int nKType, FXJDAY_RECORD *precord, KDATA *pkd );
  86. typedef BOOL (CALLBACK* PROGRESS_CALLBACK)(DWORD dwCode, DWORD dwProgress, LPCTSTR lpszMsg, VOID * cookie);
  87. #define PROG_PROGRESS 1
  88. #define STKLIB_MAX_PROGRESS 10000
  89. #define STKLIB_MAXF_PROGRESS 10000.
  90. class CStockContainer;
  91. /***
  92. 读取K线数据的通用接口,各种格式的读取K线数据类必须从此类继承
  93. */
  94. class IStStore
  95. {
  96. public:
  97. enum DBTypes { // 数据格式类型,目前只支持typeSelfDB(自有格式)和typeQianlong(钱龙格式)
  98. dbtypeUnknown = 0x01,
  99. dbtypeSelfDB = 0x02,
  100. dbtypeQianlong = 0x03,
  101. dbtypeShenglong = 0x04,
  102. };
  103. static BOOL IsValidDataType( int nType );
  104. static int GetSupportedDataType ( CDBType * pdbtype, int maxsize );
  105. static IStStore * CreateStore( const char * rootpath, int nDBType = dbtypeUnknown ); // 给出根目录和类型,新建一个对象
  106. virtual int IsOK( ) { return m_bIsOK; }
  107. virtual const char * GetRootPath( ); // 得到当前对象的根目录
  108. virtual int GetDBType( ) = 0; // 得到当前对象的数据类型
  109. virtual const char * GetDBTypeName( ) = 0; // 得到当前对象的数据类型名称
  110. virtual int GetMaxStockNumber( ) = 0; // 得到股票数量
  111. virtual int LoadCodetable( CStockContainer & container ) = 0; // 读取所有股票的信息
  112. virtual int StoreCodetable( CStockContainer & container ) = 0; // 保存代码表
  113. virtual int LoadKDataCache( CStockContainer & container, PROGRESS_CALLBACK fnCallback, void *cookie, int nProgStart, int nProgEnd ) = 0; // 读取所有股票的最近日线数据缓冲
  114. virtual int LoadBasetable( CStockContainer & container ) = 0; // 读取某一股票的财务资料表,包括每股收益,每股净资产等,见CBaseData
  115. virtual int StoreBasetable( CStockContainer & container ) = 0; // 保存某一股票的财务资料表
  116. virtual int LoadBaseText( CStock *pstock ) = 0; // 读取某一股票的基本资料文本
  117. virtual int LoadKData( CStock *pstock, int nKType ) = 0; // 读取某一股票的某个周期的K线数据
  118. virtual int LoadDRData( CStock *pstock ) = 0; // 读取某一股票的除权除息资料
  119. virtual int StoreDRData( CStock *pstock ) = 0; // 保存某一股票的除权除息资料
  120. virtual int LoadReport( CStock *pstock ) = 0; // 读取某一股票的行情刷新数据
  121. virtual int LoadMinute( CStock *pstock ) = 0; // 读取某一股票的行情分时数据
  122. virtual int LoadOutline( CStock *pstock ) = 0; // 读取某一股票的行情额外数据
  123. virtual int StoreReport( REPORT * pReport, int nCount, BOOL bBigTrade ) = 0; // 保存行情刷新数据
  124. virtual int StoreMinute( MINUTE * pMinute, int nCount ) = 0; // 保存行情分时数据
  125. virtual int StoreOutline( OUTLINE * pOutline, int nCount ) = 0; // 保存行情分时数据
  126. virtual int InstallCodetbl( const char * filename, const char *orgname ) = 0; // 安装下载的代码表
  127. virtual int InstallCodetblBlock( const char * filename, const char *orgname ) = 0; // 安装下载的板块表
  128. virtual int InstallCodetblFxjBlock( const char * filename, const char *orgname ) = 0; // 安装下载的分析家板块表
  129. virtual int InstallKData( CKData & kdata, BOOL bOverwrite = FALSE ) = 0; // 安装K线数据
  130. virtual int InstallKDataTy( const char * stkfile, int nKType, PROGRESS_CALLBACK fnCallback, void *cookie ) = 0; // 安装下载的K线通用格式数据包
  131. virtual int InstallKDataFxj( const char * dadfile, int nKType, PROGRESS_CALLBACK fnCallback, void *cookie ) = 0; // 安装下载的K线分析家格式通用数据包
  132. virtual int InstallDRData( CDRData & drdata ) = 0; // 安装除权除息数据
  133. virtual int InstallDRDataClk( const char * filename, const char *orgname ) = 0; // 安装下载的除权除息数据,一只股票一个文件
  134. virtual int InstallDRDataFxj( const char * fxjfilename ) = 0; // 安装分析家除权除息数据
  135. virtual int InstallBasetable( const char * filename, const char *orgname ) = 0; // 安装财务数据
  136. virtual int InstallBasetableTdx( const char * filename ) = 0; // 安装通达信财务数据
  137. virtual int InstallBasetableFxj( const char * filename ) = 0; // 安装分析家财务数据
  138. virtual int InstallBaseText( const char * filename, const char *orgname ) = 0; // 安装下载的基本资料数据,一只股票一个文件
  139. virtual int InstallBaseText( const char * buffer, int nLen, const char *orgname ) = 0; // 安装基本资料数据
  140. virtual int InstallNewsText( const char * filename, const char *orgname ) = 0; // 安装新闻数据文件
  141. virtual int InstallNewsText( const char * buffer, int nLen, const char *orgname ) = 0; // 安装新闻数据
  142. virtual BOOL GetFileName( CSPString &sFileName, int nDataType,
  143. CStockInfo * pInfo = NULL, int nKType = CKData::ktypeDay ) = 0; // 得到某种数据的文件名称
  144. protected:
  145. BOOL m_bIsOK;
  146. char m_szRootPath[1024];
  147. };
  148. #define ERR_DB_MAX 1000
  149. /***
  150. 本地数据类,提供对磁盘数据的操作接口,包括股票信息,各种周期K线数据,基本
  151. 资料,权息资料的读取和安装。
  152. 使用方法如下:
  153. CStDatabase::CreateSelfDB( "./" );
  154. CStDatabase db;
  155. db.SetRootPath( "./", IStStore::dbtypeSelfDB );
  156. CStockContainer container;
  157. nLen = db.LoadCodetable( container );
  158. db.LoadBasetable( container );
  159. db.LoadKDataCache( container, NULL, NULL, 0, 0 );
  160. CStock stock;
  161. stock.SetDatabase( &db );
  162. stock.PrepareData( CStock::dataK, CKData::ktypeDay );
  163. stock.PrepareData( CStock::dataDR );
  164. stock.PrepareData( CStock::dataK, m_nCurKType );
  165. CStockInfo & info = stock.GetStockInfo();
  166. CKData & kday = stock.GetKDataDay();
  167. CKData & kdata = stock.GetKData(m_nCurKType);
  168. kday.SetDRData( stock.GetDRData() );
  169. kday.ChangeCurFormat( CKData::formatXDRdown, AfxGetProfile().GetAutoResumeDRBegin(), AfxGetProfile().GetAutoResumeDRLimit() );
  170. 注意:使用CStDatabase的子类CNetDatabase也可以实现上述功能,并且提供的功能
  171. 更多,使用方法相同。
  172. */
  173. class CStDatabase : public Object
  174. {
  175. public:
  176. // Constructors
  177. CStDatabase();
  178. virtual ~CStDatabase();
  179. // Flag values
  180. // Attributes
  181. // Operations
  182. static BOOL CreateSelfDB( const char * rootpath ); // 创建所需目录
  183. static BOOL IsValidDataType( int nType ); // 类型是否合法
  184. static int GetSupportedDataType ( CDBType * pdbtype, int maxsize ); // 得到支持的数据类型
  185. BOOL SetRootPath( const char * rootpath, int nDBType = IStStore::dbtypeUnknown ); // 设定数据目录
  186. BOOL IsOK( ); // 数据目录是否符合
  187. const char * GetRootPath( ); // 得到数据目录
  188. int GetDBType( ); // 得到数据类型
  189. const char * GetDBTypeName( ); // 得到数据类型名称
  190. virtual DWORD GetSelfTempPath( char *szTempPath, int size ); // 得到临时目录
  191. virtual BOOL GetLastErrorMessage(LPTSTR lpszError, UINT nMaxError); // 得到最近错误
  192. virtual int GetMaxStockNumber( ); // 得到股票数量
  193. virtual int LoadCodetable( CStockContainer &container ); // 读取所有股票的信息
  194. virtual int StoreCodetable( CStockContainer & container ); // 保存代码表
  195. virtual int LoadKDataCache( CStockContainer &container, PROGRESS_CALLBACK fnCallback, void *cookie, int nProgStart, int nProgEnd ); // 读取所有股票的最近日线数据缓冲
  196. virtual int LoadBasetable( CStockContainer & container ); // 读取某一股票的财务资料表,包括每股收益,每股净资产等,见CBaseData
  197. virtual int StoreBasetable( CStockContainer & container ); // 保存某一股票的财务资料表
  198. virtual int LoadBaseText( CStock *pstock ); // 读取某一股票的基本资料文本
  199. virtual int LoadKData( CStock *pstock, int nKType ); // 读取某一股票的某个周期的K线数据
  200. virtual int LoadDRData( CStock *pstock ); // 读取某一股票的除权除息资料
  201. virtual int StoreDRData( CStock *pstock ); // 保存某一股票的除权除息资料
  202. virtual int LoadReport( CStock *pstock ); // 读取某一股票的行情刷新数据
  203. virtual int LoadMinute( CStock *pstock ); // 读取某一股票的行情分时数据
  204. virtual int LoadOutline( CStock *pstock ); // 读取某一股票的行情额外数据
  205. virtual int StoreReport( REPORT * pReport, int nCount, BOOL bBigTrade ); // 保存行情刷新数据
  206. virtual int StoreMinute( MINUTE * pMinute, int nCount ); // 保存行情分时数据
  207. virtual int StoreOutline( OUTLINE * pOutline, int nCount ); // 保存行情分时数据
  208. virtual int InstallCodetbl( const char * filename, const char *orgname ); // 安装下载的代码表
  209. virtual int InstallCodetblBlock( const char * filename, const char *orgname ); // 安装下载的板块表
  210. virtual int InstallCodetblFxjBlock( const char * filename, const char *orgname ); // 安装下载的分析家板块表
  211. virtual int InstallKData( CKData & kdata, BOOL bOverwrite = FALSE ); // 安装K线数据
  212. virtual int InstallKDataTy( const char * stkfile, int nKType, PROGRESS_CALLBACK fnCallback, void *cookie ); // 安装下载的K线通用格式数据
  213. virtual int InstallKDataFxj( const char * dadfile, int nKType, PROGRESS_CALLBACK fnCallback, void *cookie ); // 安装下载的K线分析家格式数据
  214. virtual int InstallDRData( CDRData & drdata ); // 安装除权除息数据
  215. virtual int InstallDRDataClk( const char * filename, const char *orgname ); // 安装下载的除权除息数据,一只股票一个文件
  216. virtual int InstallDRDataFxj( const char * fxjfilename ); // 安装分析家除权除息数据
  217. virtual int InstallBasetable( const char * filename, const char *orgname ); // 安装财务数据
  218. virtual int InstallBasetableTdx( const char * filename ); // 安装通达信财务数据
  219. virtual int InstallBasetableFxj( const char * filename ); // 安装分析家财务数据
  220. virtual int InstallBaseText( const char * filename, const char *orgname ); // 安装下载的基本资料数据,一只股票一个文件
  221. virtual int InstallBaseText( const char * buffer, int nLen, const char *orgname ); // 安装基本资料数据
  222. virtual int InstallNewsText( const char * filename, const char *orgname ); // 安装新闻数据文件
  223. virtual int InstallNewsText( const char * buffer, int nLen, const char *orgname ); // 安装新闻数据
  224. // assistant operation
  225. BOOL AddAssistantRootPath( const char * rootpath, int nDBType = IStStore::dbtypeUnknown ); // 指定另外一个附加数据源的目录,自动读取
  226. void RemoveAssistant( const char * rootpath ); // 移除另外一个附加数据源目录
  227. void RemoveAllAssistant(  ); // 移除所有附加数据源目录
  228. static CSPTime GetTimeInitial( ); // 得到初始数据日期
  229. BOOL GetTimeLocalRange( CSPTime *ptmLatest, CSPTime * ptmPioneer, CSPTime * ptmInitial ); // 得到本地数据日期区间
  230. BOOL GetNeedDownloadRange( CStockInfo &info, CSPTime tmBegin, CSPTime tmEnd, CSPTime &tmDLBegin, CSPTime &tmDLEnd ); // 得到需要下载的数据日期区间
  231. // 将钱龙格式K线数据 加入 通用数据包
  232. static int AppendToTyData( const char *code, const char *name, int nKType, LPCTSTR lpszKFile, LPCTSTR lpszTyDataFile, time_t tmBegin, time_t tmEnd );
  233. protected:
  234. IStStore * m_pStore;
  235. CSPPtrArray m_aptrAssistant;
  236. };
  237. #endif //__STKLIB_DATABASE_H__