Stock.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小: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 StatDealInfo( CSPDWordArray & adwPrice, CSPDWordArray & adwVolume, double * pdMaxVolume ); // 统计价量关系,返回值中的价格需乘以0.001
  549. BOOL GetDiffPercentMin5( double * pValue );
  550. BOOL GetLBDKMinMaxInfo( double dVolAverage, double *pdMin, double *pdMax ); // 取得量比多空指标最大值最小值
  551. BOOL GetIndexWave( double *pdWave, int nIndex );
  552. int ToKData( CKData & kdata );
  553. // Implementation
  554. protected:
  555. MINUTE* m_pData;   // the actual array of data
  556. int m_nSize;     // # of elements (upperBound - 1)
  557. int m_nMaxSize;  // max allocated
  558. int m_nGrowBy;   // grow amount
  559. public:
  560. ~CMinute();
  561. };
  562. /***
  563. 行情额外信息数据数组类
  564. */
  565. class STKLIB_API COutline
  566. {
  567. public:
  568. // Construction
  569. COutline();
  570. COutline( const COutline &src );
  571. // Attributes
  572. int GetSize() const;
  573. int GetUpperBound() const;
  574. void SetSize(int nNewSize, int nGrowBy = -1);
  575. // Operations
  576. // Clean up
  577. void FreeExtra();
  578. void RemoveAll();
  579. // Accessing elements
  580. OUTLINE GetAt(int nIndex) const;
  581. void SetAt(int nIndex, OUTLINE newElement);
  582. OUTLINE& ElementAt(int nIndex);
  583. // Direct Access to the element data (may return NULL)
  584. const OUTLINE* GetData() const;
  585. OUTLINE* GetData();
  586. // Potentially growing the array
  587. void SetAtGrow(int nIndex, OUTLINE newElement);
  588. int Add(OUTLINE newElement);
  589. // overloaded operator helpers
  590. OUTLINE operator[](int nIndex) const;
  591. OUTLINE& operator[](int nIndex);
  592. // Operations that move elements around
  593. void InsertAt(int nIndex, OUTLINE newElement, int nCount = 1);
  594. void RemoveAt(int nIndex, int nCount = 1);
  595. void InsertAt(int nStartIndex, COutline* pNewArray);
  596. int InsertOutlineSort( OUTLINE newElement );
  597. void Sort( );
  598. COutline & operator = ( const COutline &src );
  599. void Copy( const COutline &src );
  600. // Implementation
  601. protected:
  602. OUTLINE* m_pData;   // the actual array of data
  603. int m_nSize;     // # of elements (upperBound - 1)
  604. int m_nMaxSize;  // max allocated
  605. int m_nGrowBy;   // grow amount
  606. public:
  607. ~COutline();
  608. };
  609. class CStDatabase;
  610. /***
  611. 单个股票信息类 CStock::dataInfo
  612. */
  613. class STKLIB_API CStockInfo
  614. {
  615. public:
  616. CStockInfo( );
  617. CStockInfo( const CStockInfo &src );
  618. // Operation
  619. void Clear( );
  620. CStockInfo & operator = ( const CStockInfo & si );
  621. BOOL IsEqualTo( DWORD dwMarket, const char * szCode );
  622. DWORD GetMarket( );
  623. void SetMarket( DWORD dwMarket );
  624. const char * GetStockCode( );
  625. BOOL SetStockCode( DWORD dwMarket, const char * szCode );
  626. LONG GetType( );
  627. void SetType( LONG t );
  628. void ResolveTypeAndMarket( );
  629. const char * GetStockName( );
  630. void SetStockName( const char * szName );
  631. const char * GetStockNameEnu( );
  632. void SetStockNameEnu( const char * szNameEnu );
  633. const char * GetStockNameChs( );
  634. void SetStockNameChs( const char * szName );
  635. const char * GetStockShortName( );
  636. void SetStockShortName( const char *szShortName );
  637. const char * GetStockDomain( );
  638. void SetStockDomain( const char * szDomain );
  639. const char * GetStockProvince( );
  640. void SetStockProvince( const char * szProvince );
  641. BOOL StatTechIndex( DWORD dwDate ); // 设定当前技术资料日期,Format is YYYYMMDD
  642. BOOL StatBaseIndex( DWORD dwDate ); // 设定当前基本资料日期,Format is YYYYMMDD
  643. // Attributes
  644. BOOL IsValidStock( ); // 股票信息是否正确
  645. BOOL IsShangHai( ); // 上证股票
  646. BOOL IsShenZhen( ); // 深证股票
  647. BOOL IsIndex( ); // 是否指数
  648. BOOL IsBond( ); // 是否债券
  649. BOOL IsBondIndex( ); // 是否国债指数
  650. BOOL IsFund( ); // 是否基金
  651. BOOL IsRight( ); // 是否权证
  652. int DigitBit( ); // 得到该股价格有几位小数位,基金和上海B股是三位
  653. // Variant
  654. BOOL GetAverage( double *pValue ); // 当日成交均价
  655. BOOL GetDiff( double *pValue, DWORD dateCur, int nDays ); // 涨跌
  656. BOOL GetDiffPercent( double *pValue, DWORD dateCur, int nDays ); // 涨跌幅度
  657. BOOL GetScope( double *pValue, DWORD dateCur, int nDays ); // 涨跌范围
  658. BOOL GetDiffPercentMin5( double *pValue );
  659. BOOL GetPE( double * pValue ); // 市盈率
  660. BOOL GetPNetAsset( double *pValue ); // 市净率
  661. BOOL GetPMainIncome( double * pValue ); // 市销率
  662. BOOL GetRatioPCash( double * pValue ); // 价格现金流比
  663. BOOL GetShareCurrency( double * pValue ); // 流通股数
  664. BOOL GetRatioCurrency( double * pValue ); // 流通比率
  665. BOOL GetRatioChangeHand( double * pValue, double dVolume );
  666. BOOL GetRatioChangeHand( CKData &kdata, double * pValue, DWORD dateCur, int nDays );
  667. BOOL GetRatioChangeHand( double * pValue, DWORD dateCur, int nDays ); // n日换手率
  668. BOOL GetRatioVolume( double * pValue, DWORD dateCur, int nDays ); // n日量比
  669. BOOL GetRS( double * pValue, DWORD dateCur, int nDays ); // n日相对强度
  670. BOOL GetSellBuyRatio( double *pdRatio, double *pdDiff ); // 委比和委差
  671. BOOL GetMarketValue( double * pValue ); // 市值
  672. BOOL GetMarketValueA( double * pValue ); // A股市值
  673. BOOL GetMarketValueB( double * pValue ); // B股市值
  674. BOOL GetXiapu( double * pValue ); // 夏普风险指数
  675. protected:
  676. // data from codetable
  677. DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
  678. char m_szCode[STKLIB_MAX_CODE2]; // 证券代码,以''结尾
  679. LONG m_type; // see CStock::StockType
  680. char m_szName[STKLIB_MAX_NAME]; // 名称
  681. char m_szNameEnu[STKLIB_MAX_NAMEENU]; // 英文名称
  682. char m_szShortname[STKLIB_MAX_SHORTNAME]; // 拼音简称
  683. char m_szDomain[STKLIB_MAX_DOMAIN]; // 板块
  684. char m_szProvince[STKLIB_MAX_PROVINCE]; // 省份
  685. public:
  686. DWORD m_datetech; //日期 Format is XXMMDDHHMM for 5min, Format is YYYYMMDD for day
  687. float m_fLast; // 昨收(元)
  688. float m_fOpen; // 开盘(元)
  689. float m_fHigh; // 最高价(元)
  690. float m_fLow; // 最低价(元)
  691. float m_fClose; // 收盘(元)
  692. float m_fVolume; // 成交量(股)
  693. float m_fAmount; // 成交额(元)
  694. DWORD m_dwAdvance; // 仅指数有效
  695. DWORD m_dwDecline; // 仅指数有效
  696. float m_fBuyPrice[5];
  697. float m_fBuyVolume[5];
  698. float m_fSellPrice[5];
  699. float m_fSellVolume[5];
  700. public:
  701. CKData m_kdata; // 保存最近AfxGetProfile().GetCacheDays()天K线数据
  702. CBaseData m_basedata; // 保存基本资料数据
  703. CMinute m_minute; // 最近5分钟的MINUTE分时数据
  704. REPORT m_reportLatest; // 保存最近的REPORT报价数据
  705. public:
  706. // From Base Data
  707. DWORD m_datebase; //日期 Format is YYYYMMDD for base data
  708. LONG m_reporttype;
  709. float m_fErate_dollar; // 当期美元汇率
  710. float m_fErate_hkdollar; // 当期港币汇率
  711. // ★偿债能力
  712. float m_fRatio_liquidity; // 流动比率
  713. float m_fRatio_quick; // 速动比率
  714. float m_fVelocity_receivables; // 应收帐款周率
  715. // ★经营能力
  716. float m_fVelocity_merchandise; // 存货周转率
  717. float m_fMain_income; // 主营业务收入
  718. float m_fCash_ps; // 每股净现金流量
  719. // ★盈利能力
  720. float m_fProfit_margin; // 主营业务利润率 %
  721. float m_fNetasset_yield; // 净资产收益率 %
  722. // ★资本结构
  723. DWORD m_datebegin; // 上市日期 Format is YYYYMMDD
  724. float m_fShare_count_total; // 总股本
  725. float m_fShare_count_a; // 流通A股
  726. float m_fShare_count_b; // 流通B股
  727. float m_fShare_count_h; // 流通H股
  728. float m_fShare_count_national; // 国有股
  729. float m_fShare_count_corp; // 法人股
  730. float m_fProfit_psud; // 每股未分配利润
  731. float m_fAsset; // 总资产
  732. float m_fRatio_holderright; // 股东权益比率 %
  733. float m_fRatio_longdebt; // 长期负债率 % 
  734. float m_fRatio_debt; // 资产负债率 %
  735. // ★投资收益能力
  736. float m_fNetasset_ps; // 每股净资产
  737. float m_fNetasset_ps_regulate; // 调整每股净资产
  738. float m_fEps; // 每股收益
  739. float m_fEps_deduct; // 扣除后每股收益
  740. float m_fNet_profit; // 净利润
  741. float m_fMain_profit; // 主营业务利润
  742. float m_fTotal_profit; // 利润总额
  743. // ★增长率
  744. float m_fProfit_inc; // 主营利润增长率%
  745. float m_fIncome_inc; // 主营收入增长率%
  746. float m_fAsset_inc; // 总资产增长率%
  747. // ★技术数据统计值
  748. float m_fYield_average; // 平均收益率%
  749. float m_fYield_stddev; // 收益标准差%
  750. float m_fBeite; // β值
  751. };
  752. /***
  753. 单个股票的数据,包括股票信息,K线数据,基本资料,除权除息数据等。
  754. */
  755. class CStock
  756. {
  757. public:
  758. // Constructors
  759. CStock( );
  760. CStock( CStDatabase * pDatabase );
  761. CStock( CStDatabase * pDatabase, DWORD dwMarket, const char * code );
  762. virtual ~CStock();
  763. // Flag values
  764. enum StockMarket {
  765. marketUnknown = 'UKNW', // 未知
  766. marketSHSE = 'ESHS', // 上海证券交易所
  767. marketSZSE = 'ESZS', // 深圳证券交易所
  768. marketCYSE = 'ESYC', // 中国大陆创业板市场
  769. marketCHNA = 'ANHC', // 中国大陆上海或深圳或创业板证券交易所
  770. marketHKEX = 'XEKH', // 香港联合交易所
  771. marketTBSE = 'ESBT', // 台北证券交易所
  772. marketTKSE = 'EST', // 东京证券交易所
  773. marketLSE = 'ESL', // 伦敦证券交易所
  774. marketFLKFSE = 'FKLF', // 法兰克福证券交易所
  775. marketNYSE = 'ESYN', // 纽约证券交易所
  776. marketNASDAQ = 'QDSN', // 纳斯达克证券交易所
  777. };
  778. enum DataType {
  779. dataUnknown = 0x00, // 未知数据
  780. dataInfo = 0x01, // 股票信息
  781. dataK = 0x02, // K线数据
  782. dataDR = 0x03, // 权息资料
  783. dataBasetable = 0x04, // 财务数据
  784. dataBasetext = 0x05, // F10资料
  785. dataNews = 0x06, // 新闻资讯
  786. dataReport = 0x07, // 行情刷新数据
  787. dataMinute = 0x08, // 行情分时数据
  788. dataOutline = 0x09, // 行情额外数据
  789. dataCode = 0x0A, // 股票代码数组
  790. dataMultisort = 0x0B, // 综合排名
  791. dataDetail = 0x0C, // 成交明细
  792. };
  793. enum StockType {
  794. typeNone = 0x00,
  795. typeshIndex = 0x10, // 上海指数
  796. typeshA = 0x11, // 上海A股
  797. typeshB = 0x12, // 上海B股
  798. typeshBond = 0x13, // 上海债券
  799. typeshRight = 0x14, // 上海权证
  800. typeshBonus = 0x15, // 上海红利
  801. typeshAdmeasure = 0x16, // 上海配股
  802. typeshInfo = 0x1F, // 上海证交所信息
  803. typeszIndex = 0x20, // 深圳指数 0x20 
  804. typeszA = 0x21, // 深圳A股 0x21 
  805. typeszB = 0x22, // 深圳B股 0x22 
  806. typeszBond = 0x23, // 深圳债券 0x23 
  807. typeszRight = 0x24, // 深圳权证 0x24 
  808. typeszBonus = 0x25, // 深圳红利 0x25 
  809. typeszAdmeasure = 0x26, // 深圳配股 0x26 
  810. typeszInfo = 0x2F, // 深圳证交所信息 0x2f 
  811. typeGeneralInfo = 0x05, // 综合财经信息 0x05 
  812. };
  813. enum StockTypeMark {
  814. markShanghai = 0x10, // 上海
  815. markShenzhen = 0x20, // 深圳
  816. markGeneralInfo = 0x05, // 综合财经信息
  817. };
  818. enum ReportType {
  819. reportUnknown = 0x00, // 未知
  820. reportQuarter = 0x01, // 第一季度季报
  821. reportMid = 0x02, // 中报
  822. reportQuarter3 = 0x03, // 第三季度季报
  823. reportAnnals = 0x04, // 年报
  824. };
  825. enum MultisortType {
  826. classRise = 0x01, // 涨幅
  827. classFall = 0x02, // 跌幅
  828. claddRiseMin5 = 0x04, // 5分钟涨幅
  829. classFallMin5 = 0x08, // 5分钟跌幅
  830. classBSRatioAsc = 0x10, // 委比前六
  831. classBSRatioDesc= 0x20, // 委比后六
  832. classDiff = 0x40, // 震幅
  833. classVolRatio = 0x80, // 量比
  834. classAmount = 0x100, // 总金额
  835. };
  836. static double GetReportFactor( int nReportType );
  837. // Attributes
  838. void SetDatabase( CStDatabase * pDatabase );
  839. CStDatabase * GetDatabase( );
  840. void SetStockCode( DWORD dwMarket, const char * szCode );
  841. const char * GetStockCode( );
  842. BOOL SetStockInfo( CStockInfo * pInfo );
  843. CStockInfo & GetStockInfo( );
  844. CKData & GetKData( int ktype );
  845. CKData & GetKDataMonth( );
  846. CKData & GetKDataWeek( );
  847. CKData & GetKDataDay( );
  848. CKData & GetKDataMin60( );
  849. CKData & GetKDataMin30( );
  850. CKData & GetKDataMin15( );
  851. CKData & GetKDataMin5( );
  852. CDRData & GetDRData( );
  853. CReport & GetReport( );
  854. CMinute & GetMinute( );
  855. COutline & GetOutline( );
  856. char * GetBaseTextPtr( );
  857. int GetBaseTextLength( );
  858. BOOL AllocBaseTextMem( int nNewLength );
  859. // Operations
  860. void Clear( );
  861. int PrepareData( int nDataType = dataInfo, int nKType = CKData::ktypeDay, BOOL bReload = FALSE );
  862. int PrepareBaseInfo( BOOL bReload = FALSE );
  863. int ExtractKData( int nKType, BOOL bForced );
  864. int MergeBaseText( CStock &stock );
  865. int MergeKData( CStock &stock, int nKType );
  866. int MergeDRData( CStock &stock );
  867. int StoreDRData( );
  868. protected:
  869. void SetKDataTypes( );
  870. protected:
  871. CStDatabase * m_pDatabase;
  872. CStockInfo m_stockinfo;
  873. CKData m_kdMonth;
  874. CKData m_kdWeek;
  875. CKData m_kdDay;
  876. CKData m_kdMin60;
  877. CKData m_kdMin30;
  878. CKData m_kdMin15;
  879. CKData m_kdMin5;
  880. CDRData m_drData;
  881. CReport m_report;
  882. CMinute m_minute;
  883. COutline m_outline;
  884. int m_nBaseTextLen;
  885. char * m_pBaseText;
  886. };
  887. #ifdef _SP_ENABLE_INLINES
  888. #define _STOCK_INLINE inline
  889. #include "Stock.inl"
  890. #undef _STOCK_INLINE
  891. #endif
  892. #endif //__STKLIB_STOCK_H__