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

金融证券系统

开发平台:

Visual C++

  1. // StockGraph.h : interface of the CStockGraph class
  2. //
  3. /////////////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_STOCKGRAPH_H__0A8D66A9_30E0_4AAA_8E17_06B721FC0E97__INCLUDED_)
  5. #define AFX_STOCKGRAPH_H__0A8D66A9_30E0_4AAA_8E17_06B721FC0E97__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. // 一些画图常用代码的宏定义
  10. #define CHECK_NODATATODRAW if( -1 == m_nIndexStart || -1 == m_nIndexEnd || m_nIndexStart > m_nIndexEnd ) return;
  11. #define DECLARE_COLOR_DEFINATION
  12. COLORREF clrBK = AfxGetProfile().GetColor(CColorClass::clrGraphBK);
  13. COLORREF clrBorder = AfxGetProfile().GetColor(CColorClass::clrBorder);
  14. COLORREF clrRise = AfxGetProfile().GetColor(CColorClass::clrRise);
  15. COLORREF clrFall = AfxGetProfile().GetColor(CColorClass::clrFall);
  16. COLORREF clrFallEntity= AfxGetProfile().GetColor(CColorClass::clrFallEntity);
  17. COLORREF clrPlane = AfxGetProfile().GetColor(CColorClass::clrPlane);
  18. COLORREF clrNewKLine = AfxGetProfile().GetColor(CColorClass::clrNewKLine);
  19. COLORREF clrCW = AfxGetProfile().GetColor(CColorClass::clrCW);
  20. COLORREF clrDJ = AfxGetProfile().GetColor(CColorClass::clrDJ);
  21. COLORREF clrTitle = AfxGetProfile().GetColor(CColorClass::clrTitle);
  22. COLORREF clrText = AfxGetProfile().GetColor(CColorClass::clrText);
  23. typedef CArray <CRect, CRect &> CRectArray;
  24. // Some Usefull Functions
  25. void DrawLine( CDC * pDC, int nWidth, COLORREF clr, int xStart, int yStart, int xEnd, int yEnd );
  26. void DrawDashLine( CDC * pDC, int nWidth, COLORREF clr, int xStart, int yStart, int xEnd, int yEnd );
  27. void DrawDashAxis( CDC * pDC, int nWidth, COLORREF clr, int nCount, int xStart, int yStart, int xEnd, int yEnd );
  28. void DrawAxisNumber(CDC * pDC, COLORREF clr, int nCount,
  29. int xStart, int yStart, int xEnd, int yEnd,
  30. double fMin, double fMax, BOOL bDrawMin, BOOL bDrawMax, int nDotCount );
  31. BOOL DrawAxis( CDC * pDC, CRect rect, int nMarginTop, int nAxisLines,
  32. double dMin, double dMax, BOOL bDrawMin, BOOL bDrawMax, int nDotCount );
  33. BOOL DrawTechTitle(CDC * pDC, int x, int y, LPCTSTR lpszText,
  34.    UINT nTextAlign, int nFontSize, COLORREF clrBK, COLORREF clrText );
  35. BOOL FixRect( CRect & rect, LPRECT lpRectMax );
  36. BOOL DrawTextWithRect(CDC *pDC, int left, int top, int right, int bottom, LPCTSTR lpszText,
  37.   COLORREF clrRect, COLORREF clrText, COLORREF clrBK, LPRECT lpRectMax );
  38. BOOL DrawTextWithRect(CDC *pDC, int left, int top, int right, int bottom, UINT nIDString,
  39.   COLORREF clrRect, COLORREF clrText, COLORREF clrBK, LPRECT lpRectMax );
  40. /***
  41. 画图类,负责画出技术指标视图中的所有部分
  42. */
  43. class CStockGraph
  44. {
  45. public:
  46. CStockGraph( );
  47. virtual ~CStockGraph( );
  48. void SetParent( CWnd * pParent );
  49. void ResetMargins( int nMarginTop = 19, int nMarginBottom = 18,
  50. int nHeightSubtitle = 15, int nWidthSubtitle = 70,
  51. int nWidthParameter = 100, int nDefaultThickness = 6 );
  52. enum klineMode {
  53. klineCandle = 0x01, // 蜡烛K线
  54. klineAmerica = 0x02, // 美国线
  55. klineTower = 0x03, // 宝塔线
  56. };
  57. enum sg_drawtech {
  58. drawtechtype_line = 0x01, // 技术曲线使用实线
  59. drawtechtype_dot = 0x02, // 技术曲线使用虚线
  60. };
  61. enum ReportWhat {
  62. reportParam = 0x01, // 参数
  63. reportCost = 0x02, // 成本
  64. reportFlame = 0x03, // 火焰山
  65. reportActivity = 0x04, // 活跃度
  66. };
  67. // 刷新实时行情数据
  68. LRESULT OnStkReceiverData( WPARAM wParam, LPARAM lParam );
  69. int GetKType( );
  70. void SetKType( int ktype = CKData::ktypeDay );
  71. int GetKFormat( );
  72. void SetKFormat( int kformat = CKData::formatOriginal );
  73. int GetMaindataType( );
  74. void SetMaindataType( int maindatatype = CKData::mdtypeClose );
  75. int GetKLineMode( );
  76. void SetKLineMode( int klineMode = CStockGraph::klineCandle );
  77. CRect & GetKDataRect( );
  78. void ResetIndexCurrent( int nIndexCurrent = -1 );
  79. void ResetIndex( int nIndexStart = -1, int nIndexEnd = -1, int nIndexCurrent = -1 );
  80. void ResetClient( CRect rectAll );
  81. void ClearTechniqueCache( );
  82. void ClearCurStock( );
  83. BOOL SetCurStock( const char * szCode );
  84. BOOL SetCurStock( CStockInfo & info );
  85. void SetReportWhat( int nReportWhat );
  86. BOOL PrepareStockData( BOOL bReload = FALSE );
  87. void Redraw( CDC * pDC, CRect rectAll );
  88. void DrawReportRegion( CDC * pDC );
  89. int GetNextThickness( int nCurrentThickness, BOOL bAsc );
  90. void ExpandUp( BOOL bShiftPressed = FALSE );
  91. void ExpandDown( BOOL bShiftPressed = FALSE );
  92. void MoveLeft( BOOL bShiftPressed = FALSE );
  93. void MoveRight( BOOL bShiftPressed = FALSE );
  94. void PageLeft( BOOL bShiftPressed = FALSE );
  95. void PageRight( BOOL bShiftPressed = FALSE );
  96. void MoveHome( BOOL bShiftPressed = FALSE );
  97. void MoveEnd( BOOL bShiftPressed = FALSE );
  98. void OnInsert( );
  99. void OnLButtonDown( UINT nFlags, CPoint point, BOOL bShiftPressed, BOOL bCtrlPressed );
  100. void OnLButtonUp( UINT nFlags, CPoint point, BOOL bShiftPressed, BOOL bCtrlPressed );
  101. void OnMouseMove( UINT nFlags, CPoint point );
  102. void OnLButtonDblClk( UINT nFlags, CPoint point, BOOL bShiftPressed, BOOL bCtrlPressed );
  103. void OnRButtonDown( UINT nFlags, CPoint point, BOOL bShiftPressed, BOOL bCtrlPressed );
  104. void OnReturn( BOOL bShiftPressed, BOOL bCtrlPressed );
  105. UINT GetSelectedTech( );
  106. void HideSelectedTech();
  107. void AdjustSelectedTech();
  108. protected:
  109. // Move Operation
  110. void MoveTo( int nIndex, BOOL bShiftPressed, BOOL bCtrlPressed );
  111. void OnIndexCurrentChanged( );
  112. void Move( int nMove, BOOL bShiftPressed, BOOL bCtrlPressed );
  113. int GetIndexClick( CPoint point );
  114. void SelectTechID( CPoint point );
  115. BOOL AddIndexCurrent( int nIndex );
  116. void InvalidateCenter( );
  117. BOOL GetOneKLineRect( int nIndex, LPRECT lpRect, long *pxEntityLeft, long *pxEntityRight, long *pxMedium );
  118. void DrawStock( CDC * pDC );
  119. BOOL PrepareDrawKLine( );
  120. void DrawNoDataInfo( CDC * pDC );
  121. void DrawDateAxis( CDC * pDC );
  122. void DrawKLine( CDC * pDC );
  123. BOOL GetKLineMinMaxInfo( int nStart, int nEnd, double * pdMin, double * pdMax );
  124. void DrawOneKLine(CDC * pDC, int nIndexPos, int nIndexKS, CKData * pKData, double dMin, double dMax, BOOL bGreyed );
  125. void DrawBorderMovingLine( CDC * pDC, CPoint point, BOOL bAddOrRemove );
  126. void DrawSelectionLine( CDC * pDC, BOOL bAddOrRemove );
  127. void DrawSelectionRect( CDC * pDC, CPoint ptBegin, CPoint ptEnd, BOOL bAddOrRemove );
  128. void DrawKData( );
  129. public:
  130. void DrawKData( CDC * pDC, CRect rect );
  131. protected:
  132. void DrawTechLine( CDC * pDC );
  133. void DrawKLineAttribute(CDC * pDC, UINT nTech, CRect rect, BOOL bDrawTitle, double dMin, double dMax );
  134. void DrawTechLine( CDC * pDC, UINT nTech, CRect rect, BOOL bDrawTitle );
  135. void DrawReportParam( CDC * pDC );
  136. void DrawReportCost( CDC * pDC );
  137. void DrawReportFlame( CDC * pDC );
  138. void DrawReportActivity( CDC * pDC );
  139. void DrawReportCW( CDC * pDC, BOOL bRecent, int nEnd, int nDays, double dChangeHand, COLORREF clr, CRect rectDescript );
  140. // KLine Technical Attributes
  141. void DrawTechMA( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax );
  142. void DrawTechBBI( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax );
  143. void DrawTechBOLL( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax );
  144. void DrawTechPV( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax );
  145. void DrawTechSAR( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax );
  146. void DrawTechDJ( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax );
  147. void DrawTechCW( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax );
  148. // Technical Lines
  149. void DrawTechMACD( CDC * pDC, CRect rect, BOOL bDrawTitle, int nTech = STT_MACD, CMACD * pmacd = NULL );
  150. void DrawTechMIKE( CDC * pDC, CRect rect, BOOL bDrawTitle );
  151. void DrawTechPSY( CDC * pDC, CRect rect, BOOL bDrawTitle );
  152. void DrawTechVOLUME( CDC * pDC, CRect rect, BOOL bDrawTitle );
  153. void DrawTechNVI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  154. void DrawTechPVI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  155. void DrawTechVR( CDC * pDC, CRect rect, BOOL bDrawTitle );
  156. void DrawTechVROC( CDC * pDC, CRect rect, BOOL bDrawTitle );
  157. void DrawTechOBV( CDC * pDC, CRect rect, BOOL bDrawTitle );
  158. void DrawTechMOBV( CDC * pDC, CRect rect, BOOL bDrawTitle );
  159. void DrawTechMFI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  160. void DrawTechVMACD( CDC * pDC, CRect rect, BOOL bDrawTitle );
  161. void DrawTechWVAD( CDC * pDC, CRect rect, BOOL bDrawTitle );
  162. void DrawTechEMV( CDC * pDC, CRect rect, BOOL bDrawTitle );
  163. void DrawTechVRSI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  164. void DrawTechNVRSI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  165. void DrawTechAD( CDC * pDC, CRect rect, BOOL bDrawTitle );
  166. void DrawTechCI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  167. void DrawTechKDJ( CDC * pDC, CRect rect, BOOL bDrawTitle );
  168. void DrawTechR( CDC * pDC, CRect rect, BOOL bDrawTitle );
  169. void DrawTechRSI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  170. void DrawTechBIAS( CDC * pDC, CRect rect, BOOL bDrawTitle );
  171. void DrawTechMTM( CDC * pDC, CRect rect, BOOL bDrawTitle );
  172. void DrawTechDMI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  173. void DrawTechROC( CDC * pDC, CRect rect, BOOL bDrawTitle );
  174. void DrawTechCCI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  175. void DrawTechCV( CDC * pDC, CRect rect, BOOL bDrawTitle );
  176. void DrawTechARBR( CDC * pDC, CRect rect, BOOL bDrawTitle );
  177. void DrawTechCR( CDC * pDC, CRect rect, BOOL bDrawTitle );
  178. void DrawTechOSC( CDC * pDC, CRect rect, BOOL bDrawTitle );
  179. void DrawTechUOS( CDC * pDC, CRect rect, BOOL bDrawTitle );
  180. void DrawTechMAOSC( CDC * pDC, CRect rect, BOOL bDrawTitle );
  181. void DrawTech3_6BIAS( CDC * pDC, CRect rect, BOOL bDrawTitle );
  182. void DrawTechDPO( CDC * pDC, CRect rect, BOOL bDrawTitle );
  183. void DrawTechKST( CDC * pDC, CRect rect, BOOL bDrawTitle );
  184. void DrawTechREI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  185. void DrawTechDMKI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  186. void DrawTechPCNT( CDC * pDC, CRect rect, BOOL bDrawTitle );
  187. void DrawTechHLC( CDC * pDC, CRect rect, BOOL bDrawTitle );
  188. void DrawTechCDP( CDC * pDC, CRect rect, BOOL bDrawTitle );
  189. void DrawTechASI( CDC * pDC, CRect rect, BOOL bDrawTitle );
  190. void DrawTechATR( CDC * pDC, CRect rect, BOOL bDrawTitle );
  191. void DrawTechCYO( CDC * pDC, CRect rect, BOOL bDrawTitle );
  192. void DrawTechDCYO( CDC * pDC, CRect rect, BOOL bDrawTitle );
  193. void DrawTechHSL( CDC * pDC, CRect rect, BOOL bDrawTitle );
  194. void DrawTechDPER( CDC * pDC, CRect rect, BOOL bDrawTitle );
  195. void DrawTechUser( UINT nTech, CDC * pDC, CRect rect, BOOL bDrawTitle );
  196. // Some Usefull Functions
  197. void DrawTechUtil( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax,
  198.    int nTech, CTechnique * pTech, CKData * pKData, CSPDWordArray & adwDays );
  199. void DrawTechUtil1( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax,
  200.    int nTech, CTechnique * pTech, CKData * pKData, COLORREF clrLine, int nDrawTechType );
  201. void DrawTechUtil2( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax,
  202.    int nTech, CTechnique * pTech, CKData * pKData,
  203.    COLORREF clrLine1, COLORREF clrLine2,
  204.    CString strTitle1, CString strTitle2 );
  205. void DrawTechUtil3( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax,
  206.    int nTech, CTechnique * pTech, CKData * pKData,
  207.    COLORREF clrLine1, COLORREF clrLine2, COLORREF clrLine3,
  208.    CString strTitle1, CString strTitle2, CString strTitle3 );
  209. void DrawTechUtil4( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax,
  210.    int nTech, CTechnique * pTech, CKData * pKData,
  211.    COLORREF clrLine1, COLORREF clrLine2, COLORREF clrLine3, COLORREF clrLine4,
  212.    CString strTitle1, CString strTitle2, CString strTitle3, CString strTitle4 );
  213. void DrawTechUtil5( CDC * pDC, CRect rect, BOOL bDrawTitle, double dMin, double dMax,
  214.    int nTech, CTechnique * pTech, CKData * pKData,
  215.    COLORREF clrLine1, COLORREF clrLine2, COLORREF clrLine3, COLORREF clrLine4, COLORREF clrLine5,
  216.    CString strTitle1, CString strTitle2, CString strTitle3, CString strTitle4, CString strTitle5 );
  217. protected:
  218. // 图边缘及标题大小
  219. int m_nMarginTop; // 上边边缘大小
  220. int m_nMarginBottom; // 底边边缘大小
  221. int m_nHeightSubtitle; // 子标题高度
  222. int m_nWidthSubtitle; // 子标题宽度
  223. int m_nWidthParameter; // 右边信息栏宽度
  224. int m_nDefaultThickness; // K线柱体缺省宽度
  225. protected:
  226. CWnd * m_pParent; // 父窗口,技术指标视图
  227. CWnd m_wndKData; // 选中日K线数据显示的窗口
  228. CRect m_rectAll; // 整个Rect
  229. CStock m_CurStock; // 当前股票
  230. CStock m_CurStockDown; // 当前股票向下复权后的数据
  231. DWORD m_dwLatestDate; // 最近日期
  232. int m_nCurKLineMode; // K线形状,see CStockGraph::klineMode
  233. int m_nCurKType; // 当前K线类型,日线、周线、月线、5分钟线等
  234. int m_nCurKFormat; // 当前K线模式,不复权、上复权、下复权
  235. int m_nCurMaindataType; // 当前主数据类型,收盘价、开盘价或平均价
  236. int m_nIndexCurrent; // 当前选中日的序号
  237. CUIntArray m_anIndexCurrent; // 当前多个选中日的序号
  238. int m_nIndexStart; // 当前显示的最左一个日期的序号
  239. int m_nIndexEnd; // 当前显示的最右一个日期的序号
  240. int m_nThickness; // K线宽度
  241. int m_nReportWhat; // 右侧显示什么?see CStockGraph::ReportWhat
  242. CRect m_rectKData/*Left Top*/, m_rectKLine/* KLine */, m_rectKLineCenter,/*Real KLine, y is from m_dMinPrice to m_dMaxPrice*/
  243. m_rectReport/*Right*/;
  244. CRectArray m_arcTech; // 每个指标的Rect
  245. CRect m_rectCenter/*m_rectKLine+m_arcTech*/;
  246. // Mouse Move Selection Rect use
  247. CPoint m_ptSelectBegin;
  248. CPoint m_ptSelectEnd;
  249. CTechParameters m_techparam; // 指标参数
  250. CPtrArray m_aptrTechUser;
  251. double m_dMaxPrice; // 当前K线的价格最高值
  252. double m_dMinPrice; // 当前K线的价格最低值
  253. // 拖动边框使用变量
  254. BOOL m_bCursorBorder; // 鼠标是否在Rect边界,为移动大小指针AFX_IDC_VSPLITBAR
  255. CPoint m_ptLastMovingLine; // 记录鼠标移动线位置
  256. int m_nPosSelectBorder; // 记录当前移动的是哪一个Border
  257. // 隐藏该指标、修改该指标参数使用变量
  258. UINT m_nSelectedTechID;
  259. };
  260. /////////////////////////////////////////////////////////////////////////////
  261. //{{AFX_INSERT_LOCATION}}
  262. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  263. #endif // !defined(AFX_STOCKGRAPH_H__0A8D66A9_30E0_4AAA_8E17_06B721FC0E97__INCLUDED_)