Stock.h
上传用户:usa_ovo
上传日期:2013-09-16
资源大小:113k
文件大小:30k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CKData
  7. class CDRData
  8. class CBaseData
  9. class CReport
  10. class CMinute
  11. class COutline
  12. class CStockInfo
  13. class CStock
  14. */
  15. #if !defined( __STKLIB_STOCK_H__ )
  16. #define __STKLIB_STOCK_H__
  17. #define STKLIB_DATA_INVALID 0x7FFFFFFF
  18. #define STKLIB_DAYS_INONEYEAR 240
  19. #define STKLIB_DAYS_CACHE 60
  20. #define STKLIB_DAYS_CALCULATE 30
  21. #define STKLIB_AUTORESUMEDR_DATEBEGIN 20040519
  22. #define STKLIB_AUTORESUMEDR_LIMIT 11
  23. #define STKLIB_CODE_MAIN "1A0001"
  24. #define STKLIB_CODE_MAINSZN "399001"
  25. #define STKLIB_CODE_SZZS "1A0001" // 上证指数
  26. #define STKLIB_CODE_SZYBL "1A0009" // 上证180指数
  27. #define STKLIB_CODE_SZAG "1A0002" // 上证A股
  28. #define STKLIB_CODE_SZBG "1A0003" // 上证B股
  29. #define STKLIB_CODE_SZNCZ "399001" // 深证成指
  30. #define STKLIB_CODE_SZNZZ "399106" // 深证综指
  31. #define STKLIB_CODE_SZNCFAZ "399002" // 深证成份A指
  32. #define STKLIB_CODE_SZNCFBZ "399003" // 深证成份B指
  33. #define STKLIB_CODE_SZNFIRST "000001" // 深证第一支股票
  34. #define STKLIB_CODE_SHAFIRST "600000" // 上证第一支股票
  35. #define STKLIB_CODE_ZLDD "000000" // 主力大单
  36. // some fixed length
  37. #define STKLIB_MAX_CODE 8
  38. #define STKLIB_MAX_CODE2 16 // 兼容较长股票代码
  39. #define STKLIB_MAX_NAME 16
  40. #define STKLIB_MAX_NAMEENU 80
  41. #define STKLIB_MAX_SHORTNAME 16
  42. #define STKLIB_MAX_DOMAIN 32
  43. #define STKLIB_MAX_PROVINCE 32
  44. // some enum values
  45. #pragma pack(1)
  46. // 本头文件中定义的数值单位:
  47. //  价格及与金额有关的单位,如成交金额、主营收入、每股收益、总市值等:元
  48. //  成交量单位:手(=100股)
  49. /////////////////////////////////////////////////////////////////////////////////////////////
  50. // 股票静态数据结构
  51. // K线数据结构 CStock::dataK
  52. typedef struct kdata_t {
  53. DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
  54. char m_szCode[STKLIB_MAX_CODE]; // 证券代码,以''结尾
  55. DWORD m_date; //日期 Format is XXMMDDHHMM for 5min, Format is YYYYMMDD for day
  56. time_t m_time; //时间 与m_date一致.如果是是某日,则小时分秒均为0
  57. float m_fOpen; // 开盘价(元)
  58. float m_fHigh; // 最高价(元)
  59. float m_fLow; // 最低价(元)
  60. float m_fClose; // 收盘价(元)
  61. float m_fVolume; // 成交量(股)
  62. float m_fAmount; // 成交金额(元)
  63. DWORD m_dwAdvance; // 仅指数有效
  64. DWORD m_dwDecline; // 仅指数有效
  65. DWORD m_dwReserved;
  66. } KDATA, *PKDATA;
  67. // 除权数据结构 CStock::dataDR
  68. typedef struct drdata_t
  69. {
  70. DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
  71. char m_szCode[STKLIB_MAX_CODE]; // 证券代码,以''结尾
  72. DWORD m_date; //日期 Format is XXMMDDHHMM for 5min, Format is YYYYMMDD for day
  73. time_t m_time; //时间 与m_date一致.如果是是某日,则小时分秒均为0
  74. float m_fGive; // 每股送
  75. float m_fPei; // 每股配
  76. float m_fPeiPrice; // 配股价,仅当 m_fPei!=0.0f 时有效
  77. float m_fProfit; // 每股红利
  78. DWORD m_dwReserved;
  79. } DRDATA, * PDRDATA;
  80. // 财务信息数据结构 CStock::dataBasetbl
  81. typedef struct basedata_t {
  82. DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
  83. char m_szCode[STKLIB_MAX_CODE2]; // 证券代码,以''结尾
  84. char m_szDomain[STKLIB_MAX_DOMAIN]; // 板块
  85. char m_szProvince[STKLIB_MAX_PROVINCE]; // 省份
  86. time_t m_time; // 日期,time_t
  87. DWORD m_date;   // 日期 Format is YYYYMMDD for base data
  88. LONG m_reporttype; // 报告类型:年报、中报、季报
  89. float m_fErate_dollar; // 当期美元汇率
  90. float m_fErate_hkdollar; // 当期港币汇率
  91. // ★偿债能力
  92. float m_fRatio_liquidity; // 流动比率
  93. float m_fRatio_quick; // 速动比率
  94. float m_fVelocity_receivables; // 应收帐款周率
  95. // ★经营能力
  96. float m_fVelocity_merchandise; // 存货周转率
  97. float m_fMain_income; // 主营业务收入
  98. float m_fCash_ps; // 每股净现金流量
  99. // ★盈利能力
  100. float m_fProfit_margin; // 主营业务利润率 %
  101. float m_fNetasset_yield; // 净资产收益率 %
  102. // ★资本结构
  103. DWORD m_datebegin; // 上市日期 Format is YYYYMMDD
  104. float m_fShare_count_total; // 总股本
  105. float m_fShare_count_a; // 流通A股
  106. float m_fShare_count_b; // 流通B股
  107. float m_fShare_count_h; // 流通H股
  108. float m_fShare_count_national; // 国有股
  109. float m_fShare_count_corp; // 法人股
  110. float m_fProfit_psud; // 每股未分配利润
  111. float m_fAsset; // 总资产
  112. float m_fRatio_holderright; // 股东权益比率
  113. float m_fRatio_longdebt; // 长期负债率
  114. float m_fRatio_debt; // 资产负债率
  115. // ★投资收益能力
  116. float m_fNetasset_ps; // 每股净资产
  117. float m_fNetasset_ps_regulate; // 调整每股净资产
  118. float m_fEps; // 每股收益
  119. float m_fEps_deduct; // 扣除后每股收益
  120. float m_fNet_profit; // 净利润
  121. float m_fMain_profit; // 主营业务利润
  122. float m_fTotal_profit; // 利润总额
  123. // ★增长率
  124. float m_fProfit_inc; // 主营利润增长率%
  125. float m_fIncome_inc; // 主营收入增长率%
  126. float m_fAsset_inc; // 总资产增长率%
  127. // ★技术数据统计值
  128. float m_fYield_average; // 平均收益率%
  129. float m_fYield_stddev; // 收益标准差%
  130. float m_fBeite; // β值
  131. DWORD m_dwReserved[4];
  132. }BASEDATA, *PBASEDATA;
  133. // 股票静态数据结构结束
  134. /////////////////////////////////////////////////////////////////////////////////////////////
  135. /////////////////////////////////////////////////////////////////////////////////////////////
  136. // 实时行情使用数据结构
  137. // 行情刷新数据结构 CStock::dataReport
  138. typedef struct report_t {
  139. DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
  140. char m_szCode[STKLIB_MAX_CODE]; // 证券代码,以''结尾
  141. char m_szName[STKLIB_MAX_NAME]; // 证券名称,以''结尾
  142. time_t m_time; // 交易时间
  143. DWORD m_dwFlag; // 停牌标志
  144. float m_fLast; // 昨收(元)
  145. float m_fOpen; // 今开(元)
  146. float m_fHigh; // 最高(元)
  147. float m_fLow; // 最低(元)
  148. float m_fNew; // 最新(元)
  149. float m_fVolume; // 成交量(股)
  150. float m_fAmount; // 成交额(元)
  151. float m_fBuyPrice[5]; // 申买价1,2,3,4(元)
  152. float m_fBuyVolume[5]; // 申买量1,2,3,4(股)
  153. float m_fSellPrice[5]; // 申卖价1,2,3,4(元)
  154. float m_fSellVolume[5]; // 申卖量1,2,3,4(股)
  155. } REPORT, *PREPORT;
  156. // 行情分时数据结构 CStock::dataMinute
  157. typedef struct minute_t {
  158. DWORD m_dwType; // 1 min, 5 min, 15 min, 30 min line
  159. DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
  160. char m_szCode[STKLIB_MAX_CODE]; // 证券代码,以''结尾
  161. time_t m_time; // 交易时间
  162. float m_fHigh; // 最高价(元)
  163. float m_fLow; // 最低价(元)
  164. float m_fNew; // 最新价(元)
  165. float m_fVolume; // 成交量(股)
  166. float m_fAmount; // 成交额(元)
  167. } MINUTE, *PMINUTE;
  168. // 行情额外数据结构 CStock::dataOutline
  169. typedef struct outline_t {
  170. time_t m_time;
  171. DWORD m_dwShHq;
  172. DWORD m_dwSzHq;
  173. DWORD m_dwShPriceUp;
  174. DWORD m_dwShPriceDown;
  175. DWORD m_dwSzPriceUp;
  176. DWORD m_dwSzPriceDown;
  177. DWORD m_dwShWbUp;
  178. DWORD m_dwShWbDown;
  179. DWORD m_dwSzWbUp;
  180. DWORD m_dwSzWbDown;
  181. DWORD m_dwShStockCount;
  182. DWORD m_dwSzStockCount;
  183. } OUTLINE, *POUTLINE;
  184. // 综合排名数据结构 CStock::dataMultisort
  185. //综合排名
  186. typedef struct multisort_item_t {
  187. BYTE m_type; // stock's type
  188. char m_code[6]; // stock code
  189. long m_data1;
  190. long m_data2;
  191. } MULTISORT_ITEM;
  192. typedef struct multisort_t {
  193. DWORD m_class; // 1-涨幅 2-跌幅 4-5分钟涨幅 8-5分钟跌幅 16-委比前六 32-委比后六
  194. // 64-震幅 128-量比 256-总金额
  195. DWORD m_tag; // 0xf0 00 06 00
  196. MULTISORT_ITEM m_stocks[6];
  197. } MULTISORT, *PMULTISORT;
  198. // 股票代码 CStock::dataCode
  199. typedef struct stockcode {
  200. DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
  201. char m_szCode[STKLIB_MAX_CODE2]; // 证券代码,以''结尾
  202. } STOCKCODE, *PSTOCKCODE;
  203. // 行情通用数据包
  204. #define STKLIB_COMMPACKET_TAG 'KPMC'
  205. typedef struct commpacket_t {
  206. DWORD m_dwTag; // = STKLIB_COMMPACKET_TAG
  207. DWORD m_dwDataType; // see CStock::DataType
  208. DWORD m_dwCount;
  209. union
  210. {
  211. REPORT * m_pReport; // 行情刷新数据
  212. MINUTE * m_pMinute; // 分时成交数据
  213. MULTISORT * m_pMultisort; // 综合排名数据
  214. OUTLINE * m_pOutline; // 附加数据
  215. KDATA * m_pKdata; // 补充历史日线数据
  216. DRDATA * m_pDrdata; // 补充权息资料
  217. STOCKCODE * m_pStockcode; // 股票代码
  218. void * m_pData;
  219. };
  220. } COMMPACKET, *PCOMMPACKET;
  221. // 实时行情使用数据结构结束
  222. /////////////////////////////////////////////////////////////////////////////////////////////
  223. #pragma pack()
  224. #ifndef STKLIB_API
  225. #define STKLIB_API __declspec(dllimport)
  226. #endif
  227. /***
  228. 除权除息数组类
  229. */
  230. class STKLIB_API CDRData
  231. {
  232. public:
  233. // Construction
  234. CDRData();
  235. CDRData( const CDRData &src );
  236. // Attributes
  237. int GetSize() const;
  238. int GetUpperBound() const;
  239. void SetSize(int nNewSize, int nGrowBy = -1);
  240. // Operations
  241. // Clean up
  242. void FreeExtra();
  243. void RemoveAll();
  244. // Accessing elements
  245. DRDATA GetAt(int nIndex) const;
  246. void SetAt(int nIndex, DRDATA newElement);
  247. DRDATA& ElementAt(int nIndex);
  248. // Direct Access to the element data (may return NULL)
  249. const DRDATA* GetData() const;
  250. DRDATA* GetData();
  251. // Potentially growing the array
  252. void SetAtGrow(int nIndex, DRDATA newElement);
  253. int Add(DRDATA newElement);
  254. // overloaded operator helpers
  255. DRDATA operator[](int nIndex) const;
  256. DRDATA& operator[](int nIndex);
  257. // Operations that move elements around
  258. void InsertAt(int nIndex, DRDATA newElement, int nCount = 1);
  259. void RemoveAt(int nIndex, int nCount = 1);
  260. void InsertAt(int nStartIndex, CDRData* pNewArray);
  261. int InsertDRDataSort( DRDATA newElement );
  262. void Sort( );
  263. CDRData & operator = ( const CDRData &src );
  264. void Copy( const CDRData &src );
  265. BOOL IsSameAs( CDRData * psrc );
  266. // Implementation
  267. protected:
  268. DRDATA* m_pData;   // the actual array of data
  269. int m_nSize;     // # of elements (upperBound - 1)
  270. int m_nMaxSize;  // max allocated
  271. int m_nGrowBy;   // grow amount
  272. public:
  273. ~CDRData();
  274. };
  275. /***
  276. K线数据数组类
  277. */
  278. class STKLIB_API CKData
  279. {
  280. public:
  281. // Constructors
  282. CKData();
  283. CKData( int ktype, int maindatatype = mdtypeClose );
  284. CKData( const CKData & src );
  285. CKData & operator = ( const CKData &src );
  286. static BOOL IsDayOrMin( int nKType );
  287. // Flag values
  288. enum KTypes {
  289. ktypeNone = 0x00,
  290. ktypeMin = 0x01,
  291. ktypeMin5 = 0x01,
  292. ktypeMin15 = 0x02,
  293. ktypeMin30 = 0x03,
  294. ktypeMin60 = 0x04,
  295. ktypeDay = 0x05,
  296. ktypeWeek = 0x06,
  297. ktypeMonth = 0x07,
  298. ktypeMax = 0x07,
  299. };
  300. enum Formats {
  301. formatNone = 0x00,
  302. formatMin = 0x01,
  303. formatOriginal = 0x01,
  304. formatXDRup = 0x02,
  305. formatXDRdown = 0x03,
  306. formatMax = 0x03,
  307. };
  308. enum MaindataTypes {
  309. mdtypeNone = 0x00,
  310. mdtypeMin = 0x01,
  311. mdtypeClose = 0x01,
  312. mdtypeOpen = 0x02,
  313. mdtypeAverage = 0x03,
  314. mdtypeMax = 0x03,
  315. };
  316. // Attributes
  317. int GetSize() const;
  318. int GetUpperBound() const;
  319. void SetSize(int nNewSize, int nGrowBy = -1);
  320. // Operations
  321. // Clean up
  322. void FreeExtra();
  323. void RemoveAll();
  324. // Accessing elements
  325. KDATA GetAt(int nIndex) const;
  326. void SetAt(int nIndex, KDATA newElement);
  327. KDATA& ElementAt(int nIndex);
  328. // Direct Access to the element data (may return NULL)
  329. const KDATA* GetData() const;
  330. KDATA* GetData();
  331. float MaindataAt(int nIndex) const; // 得到CKData的nIndex日的主数据,根据主数据类型不同,返回值可能是开盘价、收盘价或者平均价
  332. BOOL DateAt(int nIndex,
  333. int &nYear, int &nMonth, int &nDay, int &nHour, int &nMinute ) const;
  334. BOOL LatestDate(
  335. int &nYear, int &nMonth, int &nDay, int &nHour, int &nMinute ) const;
  336. DWORD GetDate(int nIndex );
  337. DWORD GetDateDay( int nIndex );
  338. int GetIndexByDate( DWORD date );
  339. int GetAboutIndexByDate( DWORD date );
  340. // Potentially growing the array
  341. void SetAtGrow(int nIndex, KDATA newElement);
  342. int Add(KDATA newElement);
  343. // overloaded operator helpers
  344. KDATA operator[](int nIndex) const;
  345. KDATA& operator[](int nIndex);
  346. // Operations that move elements around
  347. void InsertAt(int nIndex, KDATA newElement, int nCount = 1);
  348. void RemoveAt(int nIndex, int nCount = 1);
  349. void InsertAt(int nStartIndex, CKData* pNewArray);
  350. int InsertKDataSort( KDATA newElement );
  351. // Operation of Analysis
  352. BOOL IsNewValue( int nIndex, BOOL bTopOrBottom, int nDays );
  353. BOOL GetMinMaxInfo( int nStart, int nEnd, float * pfMin, float *pfMax );
  354. // Implementation
  355. public:
  356. virtual ~CKData();
  357. #ifdef _DEBUG
  358. void AssertValid() const;
  359. void Dump() const;
  360. #endif
  361. public:
  362. // Extra operations
  363. void SetKType( int ktype );
  364. void AutoSetKType( );
  365. int GetKType( );
  366. int GetCurFormat( );
  367. void SetDRData( CDRData &drdata );
  368. CDRData &GetDRData( );
  369. void ChangeCurFormat( int format, DWORD dateAutoDRBegin, double dAutoDRLimit );
  370. void SetMaindataType( int type );
  371. int GetMaindataType( );
  372. void Clear( );
  373. int CompareLatestDate( CKData &kd );
  374. static int Min5ToMin15( CKData &kdm5, CKData &kdm15 );
  375. static int Min5ToMin30( CKData &kdm5, CKData &kdm30 );
  376. static int Min5ToMin60( CKData &kdm5, CKData &kdm60 );
  377. static int DayToMonth( CKData &kdday, CKData &kdmonth );
  378. static int DayToWeek( CKData &kdday, CKData &kdweek );
  379. DWORD ToDayDate( DWORD date );
  380. int MergeKData( CKData * pother );
  381. int FullFillKData( CKData & kdataMain, BOOL bFillToEnd );
  382. BOOL IsAdjacentDays( int nIndex, int nDays );
  383. BOOL GetDiff( double * pValue, DWORD dateCur, int nDays );
  384. BOOL GetDiffPercent( double * pValue, DWORD dateCur, int nDays );
  385. BOOL GetScope( double * pValue, DWORD dateCur, int nDays );
  386. BOOL GetVolumeSum( double * pValue, DWORD dateCur, int nDays );
  387. BOOL GetRatioVolume( double * pValue, DWORD dateCur, int nDays );
  388. BOOL GetRS( double * pValue, DWORD dateCur, int nDays );
  389. BOOL GetMA( double * pValue, int nIndex, int nDays );
  390. protected:
  391. static int ConvertKData( CKData &kdSrc, CKData &kdDest, int multiple );
  392. void CopyData( const CKData &src );
  393. void LoadDataOriginal( );
  394. void StoreDataOriginal( );
  395. void ConvertXDR( BOOL bUP, DWORD dateAutoDRBegin, double dAutoDRLimit );
  396. static float GetRatio( float fLastClose, DRDATA & dr );
  397. protected:
  398. int m_nKType;
  399. int m_nCurFormat;
  400. int m_nCurMaindataType;
  401. CDRData m_drdata;
  402. struct kdata_t * m_pDataOriginal;
  403. int m_nSizeOriginal;     // # of elements (upperBound - 1)
  404. int m_nMaxSizeOriginal;  // max allocated
  405. struct kdata_t * m_pData;
  406. int m_nSize;     // # of elements (upperBound - 1)
  407. int m_nMaxSize;  // max allocated
  408. int m_nGrowBy;   // grow amount
  409. };
  410. /***
  411. 财务资料数组类,可以记录多年的基本资料
  412. */
  413. class STKLIB_API CBaseData
  414. {
  415. public:
  416. // Construction
  417. CBaseData();
  418. CBaseData( const CBaseData &src );
  419. // Attributes
  420. int GetSize() const;
  421. int GetUpperBound() const;
  422. void SetSize(int nNewSize, int nGrowBy = -1);
  423. // Operations
  424. // Clean up
  425. void FreeExtra();
  426. void RemoveAll();
  427. // Accessing elements
  428. BASEDATA GetAt(int nIndex) const;
  429. void SetAt(int nIndex, BASEDATA newElement);
  430. BASEDATA& ElementAt(int nIndex);
  431. // Direct Access to the element data (may return NULL)
  432. const BASEDATA* GetData() const;
  433. BASEDATA* GetData();
  434. // Potentially growing the array
  435. void SetAtGrow(int nIndex, BASEDATA newElement);
  436. int Add(BASEDATA newElement);
  437. // overloaded operator helpers
  438. BASEDATA operator[](int nIndex) const;
  439. BASEDATA& operator[](int nIndex);
  440. // Operations that move elements around
  441. void InsertAt(int nIndex, BASEDATA newElement, int nCount = 1);
  442. void RemoveAt(int nIndex, int nCount = 1);
  443. void InsertAt(int nStartIndex, CBaseData* pNewArray);
  444. int InsertBaseDataSort( BASEDATA newElement );
  445. void Sort( );
  446. CBaseData & operator = ( const CBaseData &src );
  447. void Copy( const CBaseData &src );
  448. // Implementation
  449. protected:
  450. BASEDATA* m_pData;   // the actual array of data
  451. int m_nSize;     // # of elements (upperBound - 1)
  452. int m_nMaxSize;  // max allocated
  453. int m_nGrowBy;   // grow amount
  454. public:
  455. ~CBaseData();
  456. };
  457. /***
  458. 行情信息数据数组类
  459. */
  460. class STKLIB_API CReport
  461. {
  462. public:
  463. // Construction
  464. CReport();
  465. CReport( const CReport &src );
  466. // Attributes
  467. int GetSize() const;
  468. int GetUpperBound() const;
  469. void SetSize(int nNewSize, int nGrowBy = -1);
  470. // Operations
  471. // Clean up
  472. void FreeExtra();
  473. void RemoveAll();
  474. // Accessing elements
  475. REPORT GetAt(int nIndex) const;
  476. void SetAt(int nIndex, REPORT newElement);
  477. REPORT& ElementAt(int nIndex);
  478. // Direct Access to the element data (may return NULL)
  479. const REPORT* GetData() const;
  480. REPORT* GetData();
  481. // Potentially growing the array
  482. void SetAtGrow(int nIndex, REPORT newElement);
  483. int Add(REPORT newElement);
  484. // overloaded operator helpers
  485. REPORT operator[](int nIndex) const;
  486. REPORT& operator[](int nIndex);
  487. // Operations that move elements around
  488. void InsertAt(int nIndex, REPORT newElement, int nCount = 1);
  489. void RemoveAt(int nIndex, int nCount = 1);
  490. void InsertAt(int nStartIndex, CReport* pNewArray);
  491. int InsertReportSort( REPORT newElement );
  492. void Sort( );
  493. void RemoveDirty( );
  494. CReport & operator = ( const CReport &src );
  495. void Copy( const CReport &src );
  496. BOOL GetMMLD( int nIndex, double *pdVolBuy, double *pdVolSell, double * pdVolDiff ); // 取得买卖力道指标值
  497. BOOL GetMMLDMinMaxInfo( double *pdMin, double *pdMax ); // 取得买卖力道指标最大值最小值
  498. BOOL StatBuySellEx( float * fSellPrice, float * fSellVolume, float * fBuyPrice, float * fBuyVolume, int nSize );
  499. // Implementation
  500. protected:
  501. REPORT* m_pData;   // the actual array of data
  502. int m_nSize;     // # of elements (upperBound - 1)
  503. int m_nMaxSize;  // max allocated
  504. int m_nGrowBy;   // grow amount
  505. public:
  506. ~CReport();
  507. };
  508. /***
  509. 行情分时数据数组类
  510. */
  511. class STKLIB_API CMinute
  512. {
  513. public:
  514. // Construction
  515. CMinute();
  516. CMinute( const CMinute &src );
  517. // Attributes
  518. int GetSize() const;
  519. int GetUpperBound() const;
  520. void SetSize(int nNewSize, int nGrowBy = -1);
  521. // Operations
  522. // Clean up
  523. void FreeExtra();
  524. void RemoveAll();
  525. // Accessing elements
  526. MINUTE GetAt(int nIndex) const;
  527. void SetAt(int nIndex, MINUTE newElement);
  528. MINUTE& ElementAt(int nIndex);
  529. // Direct Access to the element data (may return NULL)
  530. const MINUTE* GetData() const;
  531. MINUTE* GetData();
  532. // Potentially growing the array
  533. void SetAtGrow(int nIndex, MINUTE newElement);
  534. int Add(MINUTE newElement);
  535. // overloaded operator helpers
  536. MINUTE operator[](int nIndex) const;
  537. MINUTE& operator[](int nIndex);
  538. // Operations that move elements around
  539. void InsertAt(int nIndex, MINUTE newElement, int nCount = 1);
  540. void RemoveAt(int nIndex, int nCount = 1);
  541. void InsertAt(int nStartIndex, CMinute* pNewArray);
  542. int InsertMinuteSort( MINUTE newElement );
  543. void Sort( );
  544. void RemoveDirty( );
  545. CMinute & operator = ( const CMinute &src );
  546. void Copy( const CMinute &src );
  547. BOOL StatVolumeInfo( double *pdVolNow, double *pdVolOuter, double *pdVolInner ); // 统计内盘外盘
  548. BOOL GetDiffPercentMin5( double * pValue );
  549. BOOL GetLBDKMinMaxInfo( double dVolAverage, double *pdMin, double *pdMax ); // 取得量比多空指标最大值最小值
  550. BOOL GetIndexWave( double *pdWave, int nIndex );
  551. int ToKData( CKData & kdata );
  552. // Implementation
  553. protected:
  554. MINUTE* m_pData;   // the actual array of data
  555. int m_nSize;     // # of elements (upperBound - 1)
  556. int m_nMaxSize;  // max allocated
  557. int m_nGrowBy;   // grow amount
  558. public:
  559. ~CMinute();
  560. };
  561. /***
  562. 行情额外信息数据数组类
  563. */
  564. class STKLIB_API COutline
  565. {
  566. public:
  567. // Construction
  568. COutline();
  569. COutline( const COutline &src );
  570. // Attributes
  571. int GetSize() const;
  572. int GetUpperBound() const;
  573. void SetSize(int nNewSize, int nGrowBy = -1);
  574. // Operations
  575. // Clean up
  576. void FreeExtra();
  577. void RemoveAll();
  578. // Accessing elements
  579. OUTLINE GetAt(int nIndex) const;
  580. void SetAt(int nIndex, OUTLINE newElement);
  581. OUTLINE& ElementAt(int nIndex);
  582. // Direct Access to the element data (may return NULL)
  583. const OUTLINE* GetData() const;
  584. OUTLINE* GetData();
  585. // Potentially growing the array
  586. void SetAtGrow(int nIndex, OUTLINE newElement);
  587. int Add(OUTLINE newElement);
  588. // overloaded operator helpers
  589. OUTLINE operator[](int nIndex) const;
  590. OUTLINE& operator[](int nIndex);
  591. // Operations that move elements around
  592. void InsertAt(int nIndex, OUTLINE newElement, int nCount = 1);
  593. void RemoveAt(int nIndex, int nCount = 1);
  594. void InsertAt(int nStartIndex, COutline* pNewArray);
  595. int InsertOutlineSort( OUTLINE newElement );
  596. void Sort( );
  597. COutline & operator = ( const COutline &src );
  598. void Copy( const COutline &src );
  599. // Implementation
  600. protected:
  601. OUTLINE* m_pData;   // the actual array of data
  602. int m_nSize;     // # of elements (upperBound - 1)
  603. int m_nMaxSize;  // max allocated
  604. int m_nGrowBy;   // grow amount
  605. public:
  606. ~COutline();
  607. };
  608. class CStDatabase;
  609. /***
  610. 单个股票信息类 CStock::dataInfo
  611. */
  612. class STKLIB_API CStockInfo
  613. {
  614. public:
  615. CStockInfo( );
  616. CStockInfo( const CStockInfo &src );
  617. // Operation
  618. void Clear( );
  619. CStockInfo & operator = ( const CStockInfo & si );
  620. BOOL IsEqualTo( DWORD dwMarket, const char * szCode );
  621. DWORD GetMarket( );
  622. void SetMarket( DWORD dwMarket );
  623. const char * GetStockCode( );
  624. BOOL SetStockCode( DWORD dwMarket, const char * szCode );
  625. LONG GetType( );
  626. void SetType( LONG t );
  627. void ResolveTypeAndMarket( );
  628. const char * GetStockName( );
  629. void SetStockName( const char * szName );
  630. const char * GetStockNameEnu( );
  631. void SetStockNameEnu( const char * szNameEnu );
  632. const char * GetStockNameChs( );
  633. void SetStockNameChs( const char * szName );
  634. const char * GetStockShortName( );
  635. void SetStockShortName( const char *szShortName );
  636. const char * GetStockDomain( );
  637. void SetStockDomain( const char * szDomain );
  638. const char * GetStockProvince( );
  639. void SetStockProvince( const char * szProvince );
  640. BOOL StatTechIndex( DWORD dwDate ); // 设定当前技术资料日期,Format is YYYYMMDD
  641. BOOL StatBaseIndex( DWORD dwDate ); // 设定当前基本资料日期,Format is YYYYMMDD
  642. // Attributes
  643. BOOL IsValidStock( ); // 股票信息是否正确
  644. BOOL IsShangHai( ); // 上证股票
  645. BOOL IsShenZhen( ); // 深证股票
  646. BOOL IsIndex( ); // 是否指数
  647. BOOL IsBond( ); // 是否债券
  648. BOOL IsBondIndex( ); // 是否国债指数
  649. BOOL IsFund( ); // 是否基金
  650. int DigitBit( ); // 得到该股价格有几位小数位,基金和上海B股是三位
  651. // Variant
  652. BOOL GetAverage( double *pValue ); // 当日成交均价
  653. BOOL GetDiff( double *pValue, DWORD dateCur, int nDays ); // 涨跌
  654. BOOL GetDiffPercent( double *pValue, DWORD dateCur, int nDays ); // 涨跌幅度
  655. BOOL GetScope( double *pValue, DWORD dateCur, int nDays ); // 涨跌范围
  656. BOOL GetDiffPercentMin5( double *pValue );
  657. BOOL GetPE( double * pValue ); // 市盈率
  658. BOOL GetPNetAsset( double *pValue ); // 市净率
  659. BOOL GetPMainIncome( double * pValue ); // 市销率
  660. BOOL GetRatioPCash( double * pValue ); // 价格现金流比
  661. BOOL GetShareCurrency( double * pValue ); // 流通股数
  662. BOOL GetRatioCurrency( double * pValue ); // 流通比率
  663. BOOL GetRatioChangeHand( double * pValue, double dVolume );
  664. BOOL GetRatioChangeHand( CKData &kdata, double * pValue, DWORD dateCur, int nDays );
  665. BOOL GetRatioChangeHand( double * pValue, DWORD dateCur, int nDays ); // n日换手率
  666. BOOL GetRatioVolume( double * pValue, DWORD dateCur, int nDays ); // n日量比
  667. BOOL GetRS( double * pValue, DWORD dateCur, int nDays ); // n日相对强度
  668. BOOL GetSellBuyRatio( double *pdRatio, double *pdDiff ); // 委比和委差
  669. BOOL GetMarketValue( double * pValue ); // 市值
  670. BOOL GetMarketValueA( double * pValue ); // A股市值
  671. BOOL GetMarketValueB( double * pValue ); // B股市值
  672. BOOL GetXiapu( double * pValue ); // 夏普风险指数
  673. protected:
  674. // data from codetable
  675. DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
  676. char m_szCode[STKLIB_MAX_CODE2]; // 证券代码,以''结尾
  677. LONG m_type; // see CStock::StockType
  678. char m_szName[STKLIB_MAX_NAME]; // 名称
  679. char m_szNameEnu[STKLIB_MAX_NAMEENU]; // 英文名称
  680. char m_szShortname[STKLIB_MAX_SHORTNAME]; // 拼音简称
  681. char m_szDomain[STKLIB_MAX_DOMAIN]; // 板块
  682. char m_szProvince[STKLIB_MAX_PROVINCE]; // 省份
  683. public:
  684. DWORD m_datetech; //日期 Format is XXMMDDHHMM for 5min, Format is YYYYMMDD for day
  685. float m_fLast; // 昨收(元)
  686. float m_fOpen; // 开盘(元)
  687. float m_fHigh; // 最高价(元)
  688. float m_fLow; // 最低价(元)
  689. float m_fClose; // 收盘(元)
  690. float m_fVolume; // 成交量(股)
  691. float m_fAmount; // 成交额(元)
  692. DWORD m_dwAdvance; // 仅指数有效
  693. DWORD m_dwDecline; // 仅指数有效
  694. float m_fBuyPrice[5];
  695. float m_fBuyVolume[5];
  696. float m_fSellPrice[5];
  697. float m_fSellVolume[5];
  698. public:
  699. CKData m_kdata; // 保存最近AfxGetProfile().GetCacheDays()天K线数据
  700. CBaseData m_basedata; // 保存基本资料数据
  701. CMinute m_minute; // 最近5分钟的MINUTE分时数据
  702. REPORT m_reportLatest; // 保存最近的REPORT报价数据
  703. public:
  704. // From Base Data
  705. DWORD m_datebase; //日期 Format is YYYYMMDD for base data
  706. LONG m_reporttype;
  707. float m_fErate_dollar; // 当期美元汇率
  708. float m_fErate_hkdollar; // 当期港币汇率
  709. // ★偿债能力
  710. float m_fRatio_liquidity; // 流动比率
  711. float m_fRatio_quick; // 速动比率
  712. float m_fVelocity_receivables; // 应收帐款周率
  713. // ★经营能力
  714. float m_fVelocity_merchandise; // 存货周转率
  715. float m_fMain_income; // 主营业务收入
  716. float m_fCash_ps; // 每股净现金流量
  717. // ★盈利能力
  718. float m_fProfit_margin; // 主营业务利润率 %
  719. float m_fNetasset_yield; // 净资产收益率 %
  720. // ★资本结构
  721. DWORD m_datebegin; // 上市日期 Format is YYYYMMDD
  722. float m_fShare_count_total; // 总股本
  723. float m_fShare_count_a; // 流通A股
  724. float m_fShare_count_b; // 流通B股
  725. float m_fShare_count_h; // 流通H股
  726. float m_fShare_count_national; // 国有股
  727. float m_fShare_count_corp; // 法人股
  728. float m_fProfit_psud; // 每股未分配利润
  729. float m_fAsset; // 总资产
  730. float m_fRatio_holderright; // 股东权益比率 %
  731. float m_fRatio_longdebt; // 长期负债率 % 
  732. float m_fRatio_debt; // 资产负债率 %
  733. // ★投资收益能力
  734. float m_fNetasset_ps; // 每股净资产
  735. float m_fNetasset_ps_regulate; // 调整每股净资产
  736. float m_fEps; // 每股收益
  737. float m_fEps_deduct; // 扣除后每股收益
  738. float m_fNet_profit; // 净利润
  739. float m_fMain_profit; // 主营业务利润
  740. float m_fTotal_profit; // 利润总额
  741. // ★增长率
  742. float m_fProfit_inc; // 主营利润增长率%
  743. float m_fIncome_inc; // 主营收入增长率%
  744. float m_fAsset_inc; // 总资产增长率%
  745. // ★技术数据统计值
  746. float m_fYield_average; // 平均收益率%
  747. float m_fYield_stddev; // 收益标准差%
  748. float m_fBeite; // β值
  749. };
  750. /***
  751. 单个股票的数据,包括股票信息,K线数据,基本资料,除权除息数据等。
  752. */
  753. class CStock
  754. {
  755. public:
  756. // Constructors
  757. CStock( );
  758. CStock( CStDatabase * pDatabase );
  759. CStock( CStDatabase * pDatabase, DWORD dwMarket, const char * code );
  760. virtual ~CStock();
  761. // Flag values
  762. enum StockMarket {
  763. marketUnknown = 'UKNW', // 未知
  764. marketSHSE = 'ESHS', // 上海证券交易所
  765. marketSZSE = 'ESZS', // 深圳证券交易所
  766. marketCYSE = 'ESYC', // 中国大陆创业板市场
  767. marketCHNA = 'ANHC', // 中国大陆上海或深圳或创业板证券交易所
  768. marketHKEX = 'XEKH', // 香港联合交易所
  769. marketTBSE = 'ESBT', // 台北证券交易所
  770. marketTKSE = 'EST', // 东京证券交易所
  771. marketLSE = 'ESL', // 伦敦证券交易所
  772. marketFLKFSE = 'FKLF', // 法兰克福证券交易所
  773. marketNYSE = 'ESYN', // 纽约证券交易所
  774. marketNASDAQ = 'QDSN', // 纳斯达克证券交易所
  775. };
  776. enum DataType {
  777. dataUnknown = 0x00, // 未知数据
  778. dataInfo = 0x01, // 股票信息
  779. dataK = 0x02, // K线数据
  780. dataDR = 0x03, // 权息资料
  781. dataBasetable = 0x04, // 财务数据
  782. dataBasetext = 0x05, // F10资料
  783. dataNews = 0x06, // 新闻资讯
  784. dataReport = 0x07, // 行情刷新数据
  785. dataMinute = 0x08, // 行情分时数据
  786. dataOutline = 0x09, // 行情额外数据
  787. dataCode = 0x0A, // 股票代码数组
  788. dataMultisort = 0x0B, // 综合排名
  789. dataDetail = 0x0C, // 成交明细
  790. };
  791. enum StockType {
  792. typeNone = 0x00,
  793. typeshIndex = 0x10, // 上海指数
  794. typeshA = 0x11, // 上海A股
  795. typeshB = 0x12, // 上海B股
  796. typeshBond = 0x13, // 上海债券
  797. typeshRight = 0x14, // 上海权证
  798. typeshBonus = 0x15, // 上海红利
  799. typeshAdmeasure = 0x16, // 上海配股
  800. typeshInfo = 0x1F, // 上海证交所信息
  801. typeszIndex = 0x20, // 深圳指数 0x20 
  802. typeszA = 0x21, // 深圳A股 0x21 
  803. typeszB = 0x22, // 深圳B股 0x22 
  804. typeszBond = 0x23, // 深圳债券 0x23 
  805. typeszRight = 0x24, // 深圳权证 0x24 
  806. typeszBonus = 0x25, // 深圳红利 0x25 
  807. typeszAdmeasure = 0x26, // 深圳配股 0x26 
  808. typeszInfo = 0x2F, // 深圳证交所信息 0x2f 
  809. typeGeneralInfo = 0x05, // 综合财经信息 0x05 
  810. };
  811. enum StockTypeMark {
  812. markShanghai = 0x10, // 上海
  813. markShenzhen = 0x20, // 深圳
  814. markGeneralInfo = 0x05, // 综合财经信息
  815. };
  816. enum ReportType {
  817. reportUnknown = 0x00, // 未知
  818. reportQuarter = 0x01, // 第一季度季报
  819. reportMid = 0x02, // 中报
  820. reportQuarter3 = 0x03, // 第三季度季报
  821. reportAnnals = 0x04, // 年报
  822. };
  823. enum MultisortType {
  824. classRise = 0x01, // 涨幅
  825. classFall = 0x02, // 跌幅
  826. claddRiseMin5 = 0x04, // 5分钟涨幅
  827. classFallMin5 = 0x08, // 5分钟跌幅
  828. classBSRatioAsc = 0x10, // 委比前六
  829. classBSRatioDesc= 0x20, // 委比后六
  830. classDiff = 0x40, // 震幅
  831. classVolRatio = 0x80, // 量比
  832. classAmount = 0x100, // 总金额
  833. };
  834. static double GetReportFactor( int nReportType );
  835. // Attributes
  836. void SetDatabase( CStDatabase * pDatabase );
  837. CStDatabase * GetDatabase( );
  838. void SetStockCode( DWORD dwMarket, const char * szCode );
  839. const char * GetStockCode( );
  840. BOOL SetStockInfo( CStockInfo * pInfo );
  841. CStockInfo & GetStockInfo( );
  842. CKData & GetKData( int ktype );
  843. CKData & GetKDataMonth( );
  844. CKData & GetKDataWeek( );
  845. CKData & GetKDataDay( );
  846. CKData & GetKDataMin60( );
  847. CKData & GetKDataMin30( );
  848. CKData & GetKDataMin15( );
  849. CKData & GetKDataMin5( );
  850. CDRData & GetDRData( );
  851. CReport & GetReport( );
  852. CMinute & GetMinute( );
  853. COutline & GetOutline( );
  854. char * GetBaseTextPtr( );
  855. int GetBaseTextLength( );
  856. BOOL AllocBaseTextMem( int nNewLength );
  857. // Operations
  858. void Clear( );
  859. int PrepareData( int nDataType = dataInfo, int nKType = CKData::ktypeDay, BOOL bReload = FALSE );
  860. int PrepareBaseInfo( BOOL bReload = FALSE );
  861. int ExtractKData( int nKType, BOOL bForced );
  862. int MergeBaseText( CStock &stock );
  863. int MergeKData( CStock &stock, int nKType );
  864. int MergeDRData( CStock &stock );
  865. int StoreDRData( );
  866. protected:
  867. void SetKDataTypes( );
  868. protected:
  869. CStDatabase * m_pDatabase;
  870. CStockInfo m_stockinfo;
  871. CKData m_kdMonth;
  872. CKData m_kdWeek;
  873. CKData m_kdDay;
  874. CKData m_kdMin60;
  875. CKData m_kdMin30;
  876. CKData m_kdMin15;
  877. CKData m_kdMin5;
  878. CDRData m_drData;
  879. CReport m_report;
  880. CMinute m_minute;
  881. COutline m_outline;
  882. int m_nBaseTextLen;
  883. char * m_pBaseText;
  884. };
  885. #ifdef _SP_ENABLE_INLINES
  886. #define _STOCK_INLINE inline
  887. #include "Stock.inl"
  888. #undef _STOCK_INLINE
  889. #endif
  890. #endif //__STKLIB_STOCK_H__