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

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CTechnique
  7. */
  8. #if !defined( __STKLIB_TECHNIQUE_H__ )
  9. #define __STKLIB_TECHNIQUE_H__
  10. /* The Folowing Is Stock Technique Analysis Identify Number */
  11. /* 技术指标唯一编号 */
  12. #define STT_MIN 1
  13. // K线属性类
  14. #define STT_KLINE_MIN 1
  15. #define STT_MA 1 // 移动平均线MA
  16. #define STT_BBI 2 // 多空指标BBI
  17. #define STT_BOLL 3 // 布林带BOLL
  18. #define STT_PV 4 // 汇证均价线P/V
  19. #define STT_SAR 5 // 停损点转向指标SAR
  20. #define STT_DJ 6 // 叠加图DJ
  21. #define STT_CW 7 // 筹码分布图CW
  22. #define STT_KLINE_MAX 7
  23. // 趋势类
  24. #define STT_TREND_MIN 8
  25. #define STT_MACD 8 // 指数平滑异同移动平均线MACD
  26. #define STT_MIKE 9 // 麦克指标MIKE
  27. #define STT_PSY 10 // 心理线PSY
  28. #define STT_TREND_MAX 10
  29. // 能量类
  30. #define STT_ENERGY_MIN 11
  31. #define STT_VOLUME 11 // 成交量
  32. #define STT_NVI 12 // 负成交量指标NVI
  33. #define STT_PVI 13 // 正成交量指标PVI
  34. #define STT_VR 14 // 容量比率VR
  35. #define STT_VROC 15 // 成交量变动率指标VROC
  36. #define STT_OBV 16 // 能量线OBV
  37. #define STT_MOBV 17 // 主力进出MOBV
  38. #define STT_MFI 18 // 资金流动指数MFI
  39. #define STT_VMACD 19 // 量指数平滑异同移动平均线VMACD
  40. #define STT_WVAD 20 // 威廉变异离散量WVAD
  41. #define STT_EMV 21 // 简易波动指标EMV
  42. #define STT_VRSI 22 // 量相对强弱指标VRSI
  43. #define STT_NVRSI 23 // 新量相对强弱指标VRSI
  44. #define STT_AD 24 // 聚/散指标A/D
  45. #define STT_CI 25 // 累积指数CI
  46. #define STT_ENERGY_MAX 25
  47. // 摆动类
  48. #define STT_SWING_MIN 26
  49. #define STT_KDJ 26 // 随机指标KDJ
  50. #define STT_R 27 // 威廉指标R
  51. #define STT_RSI 28 // 相对强弱指标
  52. #define STT_BIAS 29 // 乖离率BIAS
  53. #define STT_MTM 30 // 动量指标MTM
  54. #define STT_DMI 31 // 动向指标DMI
  55. #define STT_ROC 32 // 变动率指标ROC
  56. #define STT_CCI 33 // 顺势通道指标CCI
  57. #define STT_CV 34 // 佳庆指标CV
  58. #define STT_ARBR 35 // 人气意愿指标ARBR
  59. #define STT_CR 36 // 中间意愿指标CR
  60. #define STT_OSC 37 // 摆动量OSC
  61. #define STT_UOS 38 // 极摆动指标UOS
  62. #define STT_MAOSC 39 // 移动平均摆动量MAOSC
  63. #define STT_36BIAS 40 // 3减6日乖离3-6BIAS
  64. #define STT_DPO 41 // 去势价格摆动指数DPO
  65. #define STT_KST 42 // 确然指标KST
  66. #define STT_SWING_MAX 42
  67. // 其他类
  68. #define STT_OTHER_MIN 43
  69. #define STT_REI 43 // 范围膨胀指数REI
  70. #define STT_DMKI 44 // 迪马克尔指标DMKI
  71. #define STT_PCNT 45 // 幅度比PCNT
  72. #define STT_HLC 46 // 幅度分析HLC
  73. #define STT_CDP 47 // 逆势操作指标CDP
  74. #define STT_ASI 48 // 累积摆动指标ASI
  75. #define STT_ATR 49 // 均幅指标ATR
  76. #define STT_OTHER_MAX 49
  77. #define STT_CLK_MIN 50
  78. #define STT_CYO 50 // 周期摆动量CYO
  79. #define STT_DCYO 51 // 去噪周期摆动量DCYO
  80. #define STT_HSL 52 // 相对换手率HSL
  81. #define STT_DPER 53 // 去势百分比指标DPER
  82. #define STT_CLK_MAX 53
  83. #define STT_MAX 53
  84. #define STT_USER_MIN 10000
  85. #define STT_INVALID DWORD(-1)
  86. // 指标类别
  87. #define STT_CLASS_MIN 1
  88. #define STT_CLASS_KLINE 1 // K线叠加类
  89. #define STT_CLASS_TREND 2 // 趋势类
  90. #define STT_CLASS_ENERGY 3 // 能量类
  91. #define STT_CLASS_SWING 4 // 摆动类
  92. #define STT_CLASS_OTHER 5 // 其它类
  93. #define STT_CLASS_CLK 6 // 策略为王类
  94. #define STT_CLASS_USER 7 // 外挂指标类
  95. #define STT_CLASS_MAX 7
  96. // 买卖信号
  97. #define ITS_MIN -15
  98. #define ITS_SELLINTENSE -15 // 强烈卖出
  99. #define ITSG_SELLINTENSE -13 // 门限
  100. #define ITS_SELL -10 // 卖出
  101. #define ITSG_SELL -8 // 门限
  102. #define ITS_SELLFEEBLE -5 // 微弱卖出
  103. #define ITSG_SELLFEEBLE -3 // 门限
  104. #define ITS_NOTHING 0 // 无
  105. #define ITSG_BUYFEEBLE 3 // 门限
  106. #define ITS_BUYFEEBLE 5 // 微弱买进
  107. #define ITSG_BUY 8 // 门限
  108. #define ITS_BUY 10 // 买进
  109. #define ITSG_BUYINTENSE 13 // 门限
  110. #define ITS_BUYINTENSE 15 // 强烈买进
  111. #define ITS_MAX 15
  112. // 买卖信号理由
  113. #define ITSC_MIN 1
  114. #define ITSC_NOTHING 1 // 无
  115. #define ITSC_DEVIATEONBOTTOM 2 // 底背离
  116. #define ITSC_DEVIATEONTOP 3 // 顶背离
  117. #define ITSC_GOLDENFORK 4 // 金叉
  118. #define ITSC_DEADFORK 5 // 死叉
  119. #define ITSC_LONG 6 // 多头
  120. #define ITSC_SHORT 7 // 空头
  121. #define ITSC_OVERBOUGHT 8 // 超买
  122. #define ITSC_OVERSOLD 9 // 超卖
  123. #define ITSC_SUPPORT 10 // 支撑位
  124. #define ITSC_RESISTANCE 11 // 阻力位
  125. #define ITSC_MAX 11
  126. #define ITS_ISSELL(x) (x<0)
  127. #define ITS_ISBUY(x) (x>0)
  128. #define ITS_ISSELLORNOTHING(x) (x<=0)
  129. #define ITS_ISBUYORNOTHING(x) (x>=0)
  130. #define ITS_GETMINMAXDAYRANGE 120
  131. #define ITS_DAYS_DEVIATE 115
  132. /***
  133. 一些宏定义,主要是技术指标计算中常用的一些代码
  134. */
  135. #define STT_ASSERT_GETMINMAXINFO( m_pKData, nStart, nEnd )
  136. SP_ASSERT( m_pKData && nStart >= 0 && nStart < m_pKData->GetSize() && nEnd >= 0 && nEnd < m_pKData->GetSize() );
  137. if( nStart < 0 || nStart >=m_pKData->GetSize() || nEnd < 0 || nEnd >=m_pKData->GetSize() )
  138. return FALSE;
  139. #define STT_ASSERT_CALCULATE( m_pKData, nIndex, nDays )
  140. SP_ASSERT( m_pKData && nIndex >= 0 && nIndex < m_pKData->GetSize() && nDays > 0 );
  141. if( !m_pKData || nIndex < 0 || nIndex >=m_pKData->GetSize() || nDays <= 0 )
  142. return FALSE;
  143. if( !IsValidParameters( ) )
  144. SetDefaultParameters( );
  145. #define STT_ASSERT_CALCULATE1( m_pKData, nIndex )
  146. SP_ASSERT( m_pKData && nIndex >= 0 && nIndex < m_pKData->GetSize() );
  147. if( !m_pKData || nIndex < 0 || nIndex >=m_pKData->GetSize() )
  148. return FALSE;
  149. if( !IsValidParameters( ) )
  150. SetDefaultParameters( );
  151. #define VALID_DAYS( x ) (x>=1&&x<=1024)
  152. #define STT_VALID_DAYSARRAY( a )
  153. if( a.GetSize() <= 0 )
  154. return FALSE;
  155. for( int k=0; k<a.GetSize(); k++ )
  156. if( a[k] < 1 || a[k] > 1024 )
  157. return FALSE;
  158. #define VALID_ITS( x ) (x>=ITS_MIN&&x<=ITS_MAX)
  159. /***
  160. 一些反复使用的代码,用函数代替,得到技术指标在指定范围内的最大最小值
  161. */
  162. class CTechnique;
  163. BOOL AfxGetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax, CTechnique * pTech, CSPDWordArray & adwDays ); // 技术指标有不同日期作为参数
  164. BOOL AfxGetMinMaxInfo1( int nStart, int nEnd, double *pdMin, double *pdMax, CTechnique * pTech ); // 技术指标有1个最终值
  165. BOOL AfxGetMinMaxInfo2( int nStart, int nEnd, double *pdMin, double *pdMax, CTechnique * pTech ); // 技术指标有2个最终值
  166. BOOL AfxGetMinMaxInfo3( int nStart, int nEnd, double *pdMin, double *pdMax, CTechnique * pTech ); // 技术指标有3个最终值
  167. BOOL AfxGetMinMaxInfo4( int nStart, int nEnd, double *pdMin, double *pdMax, CTechnique * pTech ); // 技术指标有4个最终值
  168. BOOL AfxGetMinMaxInfo5( int nStart, int nEnd, double *pdMin, double *pdMax, CTechnique * pTech ); // 技术指标有5个最终值
  169. DWORD AfxGetMaxDays( CSPDWordArray & adw ); // 数组adw的最大值
  170. /**
  171. 技术指标基类
  172. */
  173. class STKLIB_API CTechnique
  174. {
  175. public:
  176. // Constructors
  177. CTechnique( );
  178. CTechnique( CKData * pKData );
  179. virtual ~CTechnique();
  180. void SetKData( CKData * pKData ); // 设定K线数据
  181. CKData * GetKData( );
  182. virtual void Clear( ); // 清除
  183. virtual void ClearLastIntensity( ); // 清除上次买卖信号
  184. virtual BOOL PrepareCache( int nStart, int nEnd, BOOL bForceRecalculate ); // 计算好数据,放入缓冲区
  185. protected:
  186. BOOL LoadFromCache( int nIndex, double * pValue1,
  187. double * pValue2 = NULL, double * pValue3 = NULL, double * pValue4 = NULL, double * pValue5 = NULL ); // 从缓冲区读入结果
  188. BOOL StoreToCache( int nIndex, double * pValue1,
  189. double * pValue2 = NULL, double * pValue3 = NULL, double * pValue4 = NULL, double * pValue5 = NULL ); // 将结果保存至缓冲区
  190. // Intensity Utility
  191. BOOL IntensityPrepare( int nIndex, UINT * pnCode, int nMaxDays, int nMinMaxDays, double *pdLiminalLow, double *pdLiminalHigh, double dGateLow = 0.3, double dGateHigh = 0.7 ); // 准备数据,得到较大值和较小值
  192. BOOL IntensityPreparePrice( int nIndex, UINT * pnCode, int nMaxDays, int nMinMaxDays, double *pdLiminalLow, double *pdLiminalHigh, double dGateLow = 0.3, double dGateHigh = 0.7 ); // 准备数据,得到价格较大值和较小值
  193. BOOL IsNewValue( int nIndex, BOOL bTopOrBottom, int nDays, double * pdValue1, double * pdValue2 ); // 是否创新高或者创新低
  194. BOOL IsDeviateOnBottom( int nIndex, double * pdValue1, double * pdValue2 ); // 是否底背离
  195. BOOL IsDeviateOnTop( int nIndex, double * pdValue1, double * pdValue2 ); // 是否顶背离
  196. BOOL IsGoldenFork( int nIndex, double * pdValue1, double * pdValue2 ); // 是否金叉
  197. BOOL IsDeadFork( int nIndex, double * pdValue1, double * pdValue2 ); // 是否死叉
  198. int GetForkSignal( int nIndex, CSPDWordArray & adwDays, UINT itsGoldenFork, UINT itsDeadFork,  UINT * pnCode ); // 得到金叉或者死叉信号
  199. int GetForkSignal( int nIndex, UINT itsGoldenFork, UINT itsDeadFork, UINT *pnCode ); // 得到金叉或者死叉信号
  200. int GetForkSignal(int nIndex, double * pdValue1, double * pdValue2, UINT itsGoldenFork, UINT itsDeadFork, UINT *pnCode ); // 得到金叉死叉信号
  201. int GetTrendIntensity(int nIndex, CSPDWordArray & adwDays, UINT itsLong, UINT itsShort, UINT * pnCode ); // 得到趋势信号
  202. int GetTrendIntensity1( int nIndex, UINT itsLong, UINT itsShort, UINT *pnCode ); // 得到趋势信号
  203. int GetTrendIntensity2( int nIndex, UINT itsLong, UINT itsShort, UINT *pnCode ); // 得到趋势信号
  204. int GetTrendIntensity(int nIndex, double * pdValue1, double * pdValue2, UINT itsLong, UINT itsShort, UINT *pnCode ); // 得到趋势信号
  205. public:
  206. // Attributes
  207. virtual void SetDefaultParameters( ); // 设定缺省参数
  208. void AttachParameters( CTechnique & src ); // 指定参数与src相同
  209. virtual BOOL IsValidParameters( ); // 参数是否合法
  210. // Creations
  211. static CTechnique * CreateTechnique( UINT nTech, CKData * pKData ); // 创建CTechnique对象
  212. // Operations
  213. virtual int GetSignal( int nIndex, UINT * pnCode = NULL ); // 得到买卖信号
  214. virtual int GetIntensity( int nIndex, UINT * pnCode = NULL, BOOL bTraceBack = TRUE ); // 得到买卖趋势信号
  215. virtual int GetIntensityTraceback( int nIndex, UINT * pnCode = NULL ); // 得到买卖趋势信号
  216. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax ); // 得到最大最小值
  217. virtual BOOL Calculate( double * pValue, int nIndex, int nDays, BOOL bUseLast ); // 计算指标值
  218. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast ); // 计算指标值
  219. virtual BOOL Calculate( double * pValue1, double * pValue2, int nIndex, BOOL bUseLast ); // 计算指标值
  220. virtual BOOL Calculate( double * pValue1, double * pValue2, double * pValue3, int nIndex, BOOL bUseLast ); // 计算指标值
  221. virtual BOOL Calculate( double * pValue1, double * pValue2, double * pValue3, double * pValue4, int nIndex, BOOL bUseLast ); // 计算指标值
  222. virtual BOOL Calculate( double * pValue1, double * pValue2, double * pValue3, double * pValue4, double * pValue5, int nIndex, BOOL bUseLast ); // 计算指标值
  223. virtual BOOL CalculateMA( double * pValue, double * pMA, int nIndex, BOOL bUseLast, int nMADays ); // 计算指标值和均值
  224. protected:
  225. CKData * m_pKData;
  226. double * m_pdCache1;
  227. double * m_pdCache2;
  228. double * m_pdCache3;
  229. double * m_pdCache4;
  230. double * m_pdCache5;
  231. BOOL * m_pbHasCache1;
  232. BOOL * m_pbHasCache2;
  233. BOOL * m_pbHasCache3;
  234. BOOL * m_pbHasCache4;
  235. BOOL * m_pbHasCache5;
  236. int m_nLength;
  237. int m_nIndexStart;
  238. int m_nLastIntensity;
  239. UINT m_nLastIntensityCode;
  240. };
  241. // K线
  242. class STKLIB_API CKLine : public CTechnique
  243. {
  244. public:
  245. // Constructors
  246. CKLine( );
  247. CKLine( CKData * pKData );
  248. virtual ~CKLine();
  249. public:
  250. virtual void Clear( );
  251. // Attributes
  252. virtual void SetDefaultParameters( );
  253. void AttachParameters( CKLine & src );
  254. virtual BOOL IsValidParameters( );
  255. // Operations
  256. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  257. };
  258. /////////////////////////////////////////////////////////////////////////
  259. // K线属性类
  260. // 移动平均线MA
  261. class STKLIB_API CMA : public CTechnique
  262. {
  263. public:
  264. // Constructors
  265. CMA( );
  266. CMA( CKData * pKData );
  267. virtual ~CMA();
  268. public:
  269. virtual void Clear( );
  270. // Attributes
  271. enum MATypes {
  272. typeMA = 0x01,
  273. typeEXPMA = 0x02,
  274. };
  275. int m_nType;
  276. CSPDWordArray m_adwMADays;
  277. int m_itsGoldenFork;
  278. int m_itsDeadFork;
  279. int m_itsLong;
  280. int m_itsShort;
  281. virtual void SetDefaultParameters( );
  282. void AttachParameters( CMA & src );
  283. virtual BOOL IsValidParameters( );
  284. // Operations
  285. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  286. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  287. virtual BOOL Calculate( double * pValue, int nIndex, int nDays, BOOL bUseLast );
  288. };
  289. // 多空指标BBI
  290. class STKLIB_API CBBI : public CTechnique
  291. {
  292. public:
  293. // Constructors
  294. CBBI( );
  295. CBBI( CKData * pKData );
  296. virtual ~CBBI();
  297. public:
  298. virtual void Clear( );
  299. // Attributes
  300. int m_nMA1Days;
  301. int m_nMA2Days;
  302. int m_nMA3Days;
  303. int m_nMA4Days;
  304. int m_itsGoldenFork;
  305. int m_itsDeadFork;
  306. virtual void SetDefaultParameters( );
  307. void AttachParameters( CBBI & src );
  308. virtual BOOL IsValidParameters( );
  309. // Operations
  310. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  311. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  312. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  313. };
  314. // 布林带BOLL
  315. class STKLIB_API CBOLL : public CTechnique
  316. {
  317. public:
  318. // Constructors
  319. CBOLL( );
  320. CBOLL( CKData * pKData );
  321. virtual ~CBOLL();
  322. public:
  323. virtual void Clear( );
  324. // Attributes
  325. double m_dMultiUp;
  326. double m_dMultiDown;
  327. int m_nMADays;
  328. int m_itsSupport;
  329. int m_itsResistance;
  330. virtual void SetDefaultParameters( );
  331. void AttachParameters( CBOLL & src );
  332. virtual BOOL IsValidParameters( );
  333. // Operations
  334. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  335. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  336. virtual BOOL Calculate( double * pdMA, double * pdUp, double * pdDown, int nIndex, BOOL bUseLast );
  337. };
  338. // 汇证均价线P/V
  339. class STKLIB_API CPV : public CTechnique
  340. {
  341. public:
  342. // Constructors
  343. CPV( );
  344. CPV( CKData * pKData );
  345. virtual ~CPV();
  346. public:
  347. virtual void Clear( );
  348. // Attributes
  349. virtual void SetDefaultParameters( );
  350. void AttachParameters( CPV & src );
  351. virtual BOOL IsValidParameters( );
  352. // Operations
  353. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  354. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  355. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  356. };
  357. // 停损点转向指标SAR
  358. class STKLIB_API CSAR : public CTechnique
  359. {
  360. public:
  361. // Constructors
  362. CSAR( );
  363. CSAR( CKData * pKData );
  364. virtual ~CSAR();
  365. protected:
  366. BOOL CalculateSAR( double * pValue, int nIndex, BOOL bUseLast );
  367. public:
  368. virtual void Clear( );
  369. // Attributes
  370. int m_nInitDays;
  371. int m_bFirstUp;
  372. double m_dAFStep;
  373. double m_dAFMax;
  374. int m_itsBuy;
  375. int m_itsSell;
  376. virtual void SetDefaultParameters( );
  377. void AttachParameters( CSAR & src );
  378. virtual BOOL IsValidParameters( );
  379. // Operations
  380. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  381. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  382. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  383. protected:
  384. BOOL m_bCurUp;
  385. BOOL m_bTurn;
  386. double m_dCurAF;
  387. double m_dCurHigh;
  388. double m_dCurLow;
  389. };
  390. // 叠加图DJ
  391. class STKLIB_API CDJ : public CTechnique
  392. {
  393. public:
  394. // Constructors
  395. CDJ( );
  396. CDJ( CKData * pKData );
  397. virtual ~CDJ();
  398. static CStock m_stockSha;
  399. static CStock m_stockSzn;
  400. static CSPString m_strCodeOrg;
  401. public:
  402. virtual void Clear( );
  403. // Attributes
  404. CSPString m_strCodeSha;
  405. CSPString m_strCodeSzn;
  406. virtual void SetDefaultParameters( );
  407. void AttachParameters( CDJ & src );
  408. virtual BOOL IsValidParameters( );
  409. BOOL PrepareStockData(CStDatabase * pDatabase, const char * szCodeOrg,
  410. int nCurKType, int nCurKFormat, int nCurMaindataType,
  411. DWORD dwAutoResumeDRBegin, int nAutoResumeDRLimit );
  412. // Operations
  413. };
  414. // 筹码分布图CW
  415. class STKLIB_API CCW : public CTechnique
  416. {
  417. public:
  418. // Constructors
  419. CCW( );
  420. CCW( CKData * pKData );
  421. virtual ~CCW();
  422. public:
  423. virtual void Clear( );
  424. // Attributes
  425. double m_dChangeHand;
  426. virtual void SetDefaultParameters( );
  427. void AttachParameters( CCW & src );
  428. virtual BOOL IsValidParameters( );
  429. // Operations
  430. BOOL GetRange( int & nStart, int & nEnd, CStockInfo & info );
  431. BOOL GetMinMaxInfo(int nStart, int nEnd, double dMinPrice, double dMaxPrice, double dStep,
  432. double *pdMinVolume, double *pdMaxVolume );
  433. BOOL CalculateCW( double *pdVolume, int nStart, int nEnd, double dPrice, double dStep );
  434. BOOL CalculateCW(int nStart, int nEnd, CStockInfo & info, double dStep,
  435. CSPDWordArray & adwPrice, CSPDWordArray & adwVolume,
  436. double * pdMinVolume, double * pdMaxVolume, double * pdTotalVolume, double * pdVolPercent );
  437. BOOL CalculateRecentCW(int nEnd, int nDays, CStockInfo & info, double dStep,
  438. CSPDWordArray & adwPrice, CSPDWordArray & adwVolume,
  439. double * pdMinVolume, double * pdMaxVolume, double * pdTotalVolume, double * pdVolPercent );
  440. BOOL CalculatePastCW(int nEnd, int nDays, CStockInfo & info, double dStep,
  441. CSPDWordArray & adwPrice, CSPDWordArray & adwVolume,
  442. double * pdMinVolume, double * pdMaxVolume, double * pdTotalVolume, double * pdVolPercent );
  443. // Stat
  444. static BOOL StatGainPercent( double *pdGainPercent, CSPDWordArray &adwPrice, CSPDWordArray &adwVolume, double dPriceSel );
  445. static BOOL StatCostAverage( double *pdCostAve, CSPDWordArray &adwPrice, CSPDWordArray &adwVolume );
  446. static BOOL StatMass(double *pdLower, double *pdUpper, double *pdMassPrice, CSPDWordArray &adwPrice, CSPDWordArray &adwVolume, double dMassVol );
  447. };
  448. /////////////////////////////////////////////////////////////////////////
  449. // 趋势类
  450. // 指数平滑异同移动平均线MACD
  451. class STKLIB_API CMACD : public CTechnique
  452. {
  453. public:
  454. // Constructors
  455. CMACD( );
  456. CMACD( CKData * pKData );
  457. virtual ~CMACD();
  458. public:
  459. virtual void Clear( );
  460. // Attributes
  461. int m_nEMA1Days;
  462. int m_nEMA2Days;
  463. int m_nDIFDays;
  464. int m_itsDeviateOnBottom;
  465. int m_itsDeviateOnTop;
  466. int m_itsGoldenFork;
  467. int m_itsDeadFork;
  468. virtual void SetDefaultParameters( );
  469. void AttachParameters( CMACD & src );
  470. virtual BOOL IsValidParameters( );
  471. // Operations
  472. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  473. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  474. virtual BOOL Calculate( double *pdEMA1, double *pdEMA2, double *pdDIF, double *pdDEA,
  475. int nIndex, BOOL bUseLast );
  476. };
  477. // 麦克指标MIKE
  478. class STKLIB_API CMIKE : public CTechnique
  479. {
  480. public:
  481. // Constructors
  482. CMIKE( );
  483. CMIKE( CKData * pKData );
  484. virtual ~CMIKE();
  485. public:
  486. virtual void Clear( );
  487. // Attributes
  488. int m_nDays;
  489. virtual void SetDefaultParameters( );
  490. void AttachParameters( CMIKE & src );
  491. virtual BOOL IsValidParameters( );
  492. // Operations
  493. BOOL CalculateMIKE( double *pWR, double *pMR, double *pSR,
  494. double *pWS, double *pMS, double *pSS, int nIndex );
  495. };
  496. // 心理线PSY
  497. class STKLIB_API CPSY : public CTechnique
  498. {
  499. public:
  500. // Constructors
  501. CPSY( );
  502. CPSY( CKData * pKData );
  503. virtual ~CPSY();
  504. public:
  505. virtual void Clear( );
  506. // Attributes
  507. int m_nDays;
  508. int m_itsSold;
  509. int m_itsBought;
  510. virtual void SetDefaultParameters( );
  511. void AttachParameters( CPSY & src );
  512. virtual BOOL IsValidParameters( );
  513. // Operations
  514. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  515. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  516. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  517. };
  518. /////////////////////////////////////////////////////////////////////////
  519. // 能量类
  520. // 成交量
  521. class STKLIB_API CVOLUME : public CTechnique
  522. {
  523. public:
  524. // Constructors
  525. CVOLUME( );
  526. CVOLUME( CKData * pKData );
  527. virtual ~CVOLUME();
  528. public:
  529. virtual void Clear( );
  530. // Attributes
  531. CSPDWordArray m_adwMADays;
  532. int m_itsDeviateOnBottom;
  533. int m_itsDeviateOnTop;
  534. int m_itsLong;
  535. int m_itsShort;
  536. virtual void SetDefaultParameters( );
  537. void AttachParameters( CVOLUME & src );
  538. virtual BOOL IsValidParameters( );
  539. // Operations
  540. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  541. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  542. virtual BOOL Calculate( double * pValue, int nIndex, int nDays, BOOL bUseLast );
  543. };
  544. // 负成交量指标NVI
  545. class STKLIB_API CNVI : public CTechnique
  546. {
  547. public:
  548. // Constructors
  549. CNVI( );
  550. CNVI( CKData * pKData );
  551. virtual ~CNVI();
  552. public:
  553. virtual void Clear( );
  554. // Attributes
  555. int m_nMADays;
  556. int m_itsGoldenFork;
  557. int m_itsDeadFork;
  558. virtual void SetDefaultParameters( );
  559. void AttachParameters( CNVI & src );
  560. virtual BOOL IsValidParameters( );
  561. // Operations
  562. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  563. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  564. virtual BOOL Calculate( double * pValue, double *pMA, int nIndex, BOOL bUseLast );
  565. };
  566. // 正成交量指标PVI
  567. class STKLIB_API CPVI : public CTechnique
  568. {
  569. public:
  570. // Constructors
  571. CPVI( );
  572. CPVI( CKData * pKData );
  573. virtual ~CPVI();
  574. public:
  575. virtual void Clear( );
  576. // Attributes
  577. int m_nMADays;
  578. int m_itsGoldenFork;
  579. int m_itsDeadFork;
  580. virtual void SetDefaultParameters( );
  581. void AttachParameters( CPVI & src );
  582. virtual BOOL IsValidParameters( );
  583. // Operations
  584. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  585. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  586. virtual BOOL Calculate( double * pValue, double *pMA, int nIndex, BOOL bUseLast );
  587. };
  588. // 容量比率VR
  589. class STKLIB_API CVR : public CTechnique
  590. {
  591. public:
  592. // Constructors
  593. CVR( );
  594. CVR( CKData * pKData );
  595. virtual ~CVR();
  596. public:
  597. virtual void Clear( );
  598. // Attributes
  599. int m_nDays;
  600. int m_itsLong;
  601. int m_itsShort;
  602. virtual void SetDefaultParameters( );
  603. void AttachParameters( CVR & src );
  604. virtual BOOL IsValidParameters( );
  605. // Operations
  606. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  607. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  608. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  609. };
  610. // 成交量变动率指标VROC
  611. class STKLIB_API CVROC : public CTechnique
  612. {
  613. public:
  614. // Constructors
  615. CVROC( );
  616. CVROC( CKData * pKData );
  617. virtual ~CVROC();
  618. public:
  619. virtual void Clear( );
  620. // Attributes
  621. int m_nDays;
  622. int m_nMADays;
  623. int m_itsDeviateOnBottom;
  624. int m_itsDeviateOnTop;
  625. virtual void SetDefaultParameters( );
  626. void AttachParameters( CVROC & src );
  627. virtual BOOL IsValidParameters( );
  628. // Operations
  629. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  630. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  631. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  632. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  633. };
  634. // 能量线OBV
  635. class STKLIB_API COBV : public CTechnique
  636. {
  637. public:
  638. // Constructors
  639. COBV( );
  640. COBV( CKData * pKData );
  641. virtual ~COBV();
  642. public:
  643. virtual void Clear( );
  644. // Attributes
  645. int m_itsDeviateOnBottom;
  646. int m_itsDeviateOnTop;
  647. virtual void SetDefaultParameters( );
  648. void AttachParameters( COBV & src );
  649. virtual BOOL IsValidParameters( );
  650. // Operations
  651. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  652. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  653. virtual BOOL Calculate( double * pdOBV, int nIndex, BOOL bUseLast );
  654. };
  655. // 主力进出MOBV
  656. class STKLIB_API CMOBV : public COBV
  657. {
  658. public:
  659. // Constructors
  660. CMOBV( );
  661. CMOBV( CKData * pKData );
  662. virtual ~CMOBV();
  663. public:
  664. virtual void Clear( );
  665. // Attributes
  666. int m_nDays1;
  667. int m_nDays2;
  668. int m_itsGoldenFork;
  669. int m_itsDeadFork;
  670. virtual void SetDefaultParameters( );
  671. void AttachParameters( CMOBV & src );
  672. virtual BOOL IsValidParameters( );
  673. // Operations
  674. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  675. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  676. virtual BOOL Calculate( double * pValue1, double * pValue2, double * pValue3, int nIndex, BOOL bUseLast );
  677. };
  678. // 资金流动指数MFI
  679. class STKLIB_API CMFI : public CTechnique
  680. {
  681. public:
  682. // Constructors
  683. CMFI( );
  684. CMFI( CKData * pKData );
  685. virtual ~CMFI();
  686. public:
  687. virtual void Clear( );
  688. // Attributes
  689. int m_nDays;
  690. int m_itsLong;
  691. int m_itsShort;
  692. virtual void SetDefaultParameters( );
  693. void AttachParameters( CMFI & src );
  694. virtual BOOL IsValidParameters( );
  695. // Operations
  696. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  697. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  698. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  699. };
  700. // 量指数平滑异同移动平均线VMACD
  701. class STKLIB_API CVMACD : public CMACD
  702. {
  703. public:
  704. // Constructors
  705. CVMACD( );
  706. CVMACD( CKData * pKData );
  707. virtual ~CVMACD();
  708. protected:
  709. public:
  710. virtual BOOL Calculate( double *pdEMA1, double *pdEMA2, double *pdDIF, double *pdDEA,
  711. int nIndex, BOOL bUseLast );
  712. };
  713. // 威廉变异离散量WVAD
  714. class STKLIB_API CWVAD : public CTechnique
  715. {
  716. public:
  717. // Constructors
  718. CWVAD( );
  719. CWVAD( CKData * pKData );
  720. virtual ~CWVAD();
  721. public:
  722. virtual void Clear( );
  723. // Attributes
  724. int m_nDays;
  725. int m_itsLong;
  726. int m_itsShort;
  727. virtual void SetDefaultParameters( );
  728. void AttachParameters( CWVAD & src );
  729. virtual BOOL IsValidParameters( );
  730. // Operations
  731. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  732. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  733. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  734. };
  735. // 简易波动指标EMV
  736. class STKLIB_API CEMV : public CTechnique
  737. {
  738. public:
  739. // Constructors
  740. CEMV( );
  741. CEMV( CKData * pKData );
  742. virtual ~CEMV();
  743. public:
  744. virtual void Clear( );
  745. // Attributes
  746. int m_nDays;
  747. int m_nMADays;
  748. int m_itsGoldenFork;
  749. int m_itsDeadFork;
  750. virtual void SetDefaultParameters( );
  751. void AttachParameters( CEMV & src );
  752. virtual BOOL IsValidParameters( );
  753. // Operations
  754. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  755. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  756. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  757. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  758. };
  759. // 量相对强弱指标VRSI
  760. class STKLIB_API CVRSI : public CTechnique
  761. {
  762. public:
  763. // Constructors
  764. CVRSI( );
  765. CVRSI( CKData * pKData );
  766. virtual ~CVRSI();
  767. public:
  768. virtual void Clear( );
  769. // Attributes
  770. int m_nDays;
  771. int m_itsDeviateOnBottom;
  772. int m_itsDeviateOnTop;
  773. int m_itsSold;
  774. int m_itsBought;
  775. virtual void SetDefaultParameters( );
  776. void AttachParameters( CVRSI & src );
  777. virtual BOOL IsValidParameters( );
  778. // Operations
  779. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  780. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );
  781. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  782. };
  783. // 新量相对强弱指标VRSI
  784. class STKLIB_API CNVRSI : public CVRSI
  785. {
  786. public:
  787. // Constructors
  788. CNVRSI( );
  789. CNVRSI( CKData * pKData );
  790. virtual ~CNVRSI();
  791. public:
  792. // Operations
  793. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  794. };
  795. // 聚/散指标A/D
  796. class STKLIB_API CAD : public CTechnique
  797. {
  798. public:
  799. // Constructors
  800. CAD( );
  801. CAD( CKData * pKData );
  802. virtual ~CAD();
  803. public:
  804. virtual void Clear( );
  805. // Attributes
  806. int m_nDays;
  807. virtual void SetDefaultParameters( );
  808. void AttachParameters( CAD & src );
  809. virtual BOOL IsValidParameters( );
  810. // Operations
  811. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  812. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  813. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  814. };
  815. // 累积指数CI
  816. class STKLIB_API CCI : public CTechnique
  817. {
  818. public:
  819. // Constructors
  820. CCI( );
  821. CCI( CKData * pKData );
  822. virtual ~CCI();
  823. public:
  824. virtual void Clear( );
  825. // Attributes
  826. virtual void SetDefaultParameters( );
  827. void AttachParameters( CCI & src );
  828. virtual BOOL IsValidParameters( );
  829. // Operations
  830. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  831. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  832. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  833. };
  834. /////////////////////////////////////////////////////////////////////////
  835. // 摆动类
  836. // 随机指标KDJ
  837. class STKLIB_API CKDJ : public CTechnique
  838. {
  839. public:
  840. // Constructors
  841. CKDJ( );
  842. CKDJ( CKData * pKData );
  843. virtual ~CKDJ();
  844. protected:
  845. BOOL CalculateRSV( double * pValue, int nIndex );
  846. public:
  847. virtual void Clear( );
  848. // Attributes
  849. enum modeJ {
  850. mode3K2D = 0x01,
  851. mode3D2K = 0x02,
  852. };
  853. int m_nRSVDays;
  854. int m_nKDays;
  855. int m_nDDays;
  856. int m_nJ; // 1 For 3K-2D, 2 For 3D-2K
  857. int m_itsGoldenFork;
  858. int m_itsDeadFork;
  859. virtual void SetDefaultParameters( );
  860. void AttachParameters( CKDJ & src );
  861. virtual BOOL IsValidParameters( );
  862. // Operations
  863. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  864. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  865. virtual BOOL Calculate( double *pValue1, double *pValue2, double *pValue3, int nIndex, BOOL bUseLast );
  866. };
  867. // 威廉指标R
  868. class STKLIB_API CR : public CTechnique
  869. {
  870. public:
  871. // Constructors
  872. CR( );
  873. CR( CKData * pKData );
  874. virtual ~CR();
  875. public:
  876. virtual void Clear( );
  877. // Attributes
  878. int m_nDays;
  879. virtual void SetDefaultParameters( );
  880. void AttachParameters( CR & src );
  881. virtual BOOL IsValidParameters( );
  882. // Operations
  883. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  884. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  885. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  886. };
  887. // 相对强弱指标
  888. class STKLIB_API CRSI : public CTechnique
  889. {
  890. public:
  891. // Constructors
  892. CRSI( );
  893. CRSI( CKData * pKData );
  894. virtual ~CRSI();
  895. public:
  896. virtual void Clear( );
  897. // Attributes
  898. CSPDWordArray m_adwDays;
  899. int m_itsSold;
  900. int m_itsGoldenFork;
  901. int m_itsDeadFork;
  902. virtual void SetDefaultParameters( );
  903. void AttachParameters( CRSI & src );
  904. virtual BOOL IsValidParameters( );
  905. // Operations
  906. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  907. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  908. virtual BOOL Calculate( double * pValue, int nIndex, int nDays, BOOL bUseLast );
  909. };
  910. // 乖离率BIAS
  911. class STKLIB_API CBIAS : public CTechnique
  912. {
  913. public:
  914. // Constructors
  915. CBIAS( );
  916. CBIAS( CKData * pKData );
  917. virtual ~CBIAS();
  918. public:
  919. virtual void Clear( );
  920. // Attributes
  921. int m_nDays;
  922. int m_itsSold;
  923. int m_itsBought;
  924. virtual void SetDefaultParameters( );
  925. void AttachParameters( CBIAS & src );
  926. virtual BOOL IsValidParameters( );
  927. // Operations
  928. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  929. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  930. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  931. };
  932. // 动量指标MTM
  933. class STKLIB_API CMTM : public CTechnique
  934. {
  935. public:
  936. // Constructors
  937. CMTM( );
  938. CMTM( CKData * pKData );
  939. virtual ~CMTM();
  940. public:
  941. virtual void Clear( );
  942. // Attributes
  943. int m_nDays;
  944. int m_nMADays;
  945. int m_itsGoldenFork;
  946. int m_itsDeadFork;
  947. virtual void SetDefaultParameters( );
  948. void AttachParameters( CMTM & src );
  949. virtual BOOL IsValidParameters( );
  950. // Operations
  951. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  952. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  953. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  954. virtual BOOL Calculate( double * pValue, double *pMA, int nIndex, BOOL bUseLast );
  955. };
  956. // 动向指标DMI
  957. class STKLIB_API CDMI : public CTechnique
  958. {
  959. public:
  960. // Constructors
  961. CDMI( );
  962. CDMI( CKData * pKData );
  963. virtual ~CDMI();
  964. protected:
  965. double * m_pdDMICache;
  966. int * m_pnDMICacheIndex;
  967. int m_nDMICacheCurrent;
  968. BOOL CalculateDM( double *pDMPlus, double *pDMMinus, double *pTR, int nIndex );
  969. BOOL CalculateDIDX( double *pDIPlus, double *pDIMinus, double *pDX, int nIndex, int nDays );
  970. public:
  971. virtual void Clear( );
  972. // Attributes
  973. int m_nDays;
  974. virtual void SetDefaultParameters( );
  975. void AttachParameters( CDMI & src );
  976. virtual BOOL IsValidParameters( );
  977. // Operations
  978. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  979. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  980. virtual BOOL Calculate( double * pDIPlus, double * pDIMinus, double *pADX, double *pADXR, int nIndex, BOOL bUseLast );
  981. };
  982. // 变动率指标ROC
  983. class STKLIB_API CROC : public CTechnique
  984. {
  985. public:
  986. // Constructors
  987. CROC( );
  988. CROC( CKData * pKData );
  989. virtual ~CROC();
  990. public:
  991. virtual void Clear( );
  992. // Attributes
  993. int m_nDays;
  994. int m_nMADays;
  995. int m_itsGoldenFork;
  996. int m_itsDeadFork;
  997. virtual void SetDefaultParameters( );
  998. void AttachParameters( CROC & src );
  999. virtual BOOL IsValidParameters( );
  1000. // Operations
  1001. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1002. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1003. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1004. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1005. };
  1006. // 顺势通道指标CCI
  1007. class STKLIB_API CCCI : public CTechnique
  1008. {
  1009. public:
  1010. // Constructors
  1011. CCCI( );
  1012. CCCI( CKData * pKData );
  1013. virtual ~CCCI();
  1014. public:
  1015. virtual void Clear( );
  1016. // Attributes
  1017. int m_nDays;
  1018. double m_dQuotiety;
  1019. int m_nMADays;
  1020. int m_itsGoldenFork;
  1021. int m_itsDeadFork;
  1022. virtual void SetDefaultParameters( );
  1023. void AttachParameters( CCCI & src );
  1024. virtual BOOL IsValidParameters( );
  1025. // Operations
  1026. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1027. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1028. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1029. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1030. };
  1031. // 佳庆指标CV
  1032. class STKLIB_API CCV : public CTechnique
  1033. {
  1034. public:
  1035. // Constructors
  1036. CCV( );
  1037. CCV( CKData * pKData );
  1038. virtual ~CCV();
  1039. public:
  1040. virtual void Clear( );
  1041. // Attributes
  1042. int m_nMAHLDays;
  1043. int m_nCVDays;
  1044. int m_itsSold;
  1045. int m_itsBought;
  1046. virtual void SetDefaultParameters( );
  1047. void AttachParameters( CCV & src );
  1048. virtual BOOL IsValidParameters( );
  1049. // Operations
  1050. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1051. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1052. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1053. };
  1054. // 人气意愿指标ARBR
  1055. class STKLIB_API CARBR : public CTechnique
  1056. {
  1057. public:
  1058. // Constructors
  1059. CARBR( );
  1060. CARBR( CKData * pKData );
  1061. virtual ~CARBR();
  1062. public:
  1063. virtual void Clear( );
  1064. // Attributes
  1065. int m_nDays;
  1066. int m_itsGoldenFork;
  1067. int m_itsDeadFork;
  1068. int m_itsSold;
  1069. int m_itsBought;
  1070. virtual void SetDefaultParameters( );
  1071. void AttachParameters( CARBR & src );
  1072. virtual BOOL IsValidParameters( );
  1073. // Operations
  1074. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1075. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1076. virtual BOOL Calculate( double * pAR, double *pBR, int nIndex, BOOL bUseLast );
  1077. };
  1078. // 中间意愿指标CR
  1079. class STKLIB_API CCR : public CTechnique
  1080. {
  1081. public:
  1082. // Constructors
  1083. CCR( );
  1084. CCR( CKData * pKData );
  1085. virtual ~CCR();
  1086. public:
  1087. virtual void Clear( );
  1088. // Attributes
  1089. int m_nDays;
  1090. int m_nMADaysA;
  1091. int m_nMADaysB;
  1092. int m_nMADaysC;
  1093. int m_nMADaysD;
  1094. int m_itsSold;
  1095. int m_itsBought;
  1096. virtual void SetDefaultParameters( );
  1097. void AttachParameters( CCR & src );
  1098. virtual BOOL IsValidParameters( );
  1099. // Operations
  1100. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1101. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1102. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1103. virtual BOOL Calculate( double * pValue, double * pA, double * pB, double * pC, double * pD, int nIndex, BOOL bUseLast );
  1104. };
  1105. // 摆动量OSC
  1106. class STKLIB_API COSC : public CTechnique
  1107. {
  1108. public:
  1109. // Constructors
  1110. COSC( );
  1111. COSC( CKData * pKData );
  1112. virtual ~COSC();
  1113. public:
  1114. virtual void Clear( );
  1115. // Attributes
  1116. int m_nDays;
  1117. int m_nMADays;
  1118. int m_itsGoldenFork;
  1119. int m_itsDeadFork;
  1120. virtual void SetDefaultParameters( );
  1121. void AttachParameters( COSC & src );
  1122. virtual BOOL IsValidParameters( );
  1123. // Operations
  1124. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1125. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1126. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1127. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1128. };
  1129. // 极摆动指标UOS
  1130. class STKLIB_API CUOS : public CTechnique
  1131. {
  1132. public:
  1133. // Constructors
  1134. CUOS( );
  1135. CUOS( CKData * pKData );
  1136. virtual ~CUOS();
  1137. public:
  1138. virtual void Clear( );
  1139. // Attributes
  1140. int m_nDays1;
  1141. int m_nDays2;
  1142. int m_nDays3;
  1143. int m_nMADays;
  1144. int m_itsGoldenFork;
  1145. int m_itsDeadFork;
  1146. virtual void SetDefaultParameters( );
  1147. void AttachParameters( CUOS & src );
  1148. virtual BOOL IsValidParameters( );
  1149. // Operations
  1150. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1151. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1152. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1153. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1154. };
  1155. // 移动平均摆动量MAOSC
  1156. class STKLIB_API CMAOSC : public CTechnique
  1157. {
  1158. public:
  1159. // Constructors
  1160. CMAOSC( );
  1161. CMAOSC( CKData * pKData );
  1162. virtual ~CMAOSC();
  1163. public:
  1164. virtual void Clear( );
  1165. // Attributes
  1166. int m_nDays1;
  1167. int m_nDays2;
  1168. int m_nMADays;
  1169. int m_itsGoldenFork;
  1170. int m_itsDeadFork;
  1171. virtual void SetDefaultParameters( );
  1172. void AttachParameters( CMAOSC & src );
  1173. virtual BOOL IsValidParameters( );
  1174. // Operations
  1175. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1176. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1177. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1178. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1179. };
  1180. // 3减6日乖离3-6BIAS
  1181. class STKLIB_API C36BIAS : public CTechnique
  1182. {
  1183. public:
  1184. // Constructors
  1185. C36BIAS( );
  1186. C36BIAS( CKData * pKData );
  1187. virtual ~C36BIAS();
  1188. public:
  1189. virtual void Clear( );
  1190. // Attributes
  1191. int m_itsSold;
  1192. int m_itsBought;
  1193. virtual void SetDefaultParameters( );
  1194. void AttachParameters( C36BIAS & src );
  1195. virtual BOOL IsValidParameters( );
  1196. // Operations
  1197. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1198. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1199. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1200. };
  1201. // 去势价格摆动指数DPO
  1202. class STKLIB_API CDPO : public CTechnique
  1203. {
  1204. public:
  1205. // Constructors
  1206. CDPO( );
  1207. CDPO( CKData * pKData );
  1208. virtual ~CDPO();
  1209. public:
  1210. virtual void Clear( );
  1211. // Attributes
  1212. int m_nDays;
  1213. int m_nMADays;
  1214. int m_itsGoldenFork;
  1215. int m_itsDeadFork;
  1216. virtual void SetDefaultParameters( );
  1217. void AttachParameters( CDPO & src );
  1218. virtual BOOL IsValidParameters( );
  1219. // Operations
  1220. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1221. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1222. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1223. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1224. };
  1225. // 确然指标KST
  1226. class STKLIB_API CKST : public CTechnique
  1227. {
  1228. public:
  1229. // Constructors
  1230. CKST( );
  1231. CKST( CKData * pKData );
  1232. virtual ~CKST();
  1233. public:
  1234. virtual void Clear( );
  1235. // Attributes
  1236. CSPDWordArray m_adwROCDays;
  1237. int m_nMADays;
  1238. int m_itsGoldenFork;
  1239. int m_itsDeadFork;
  1240. virtual void SetDefaultParameters( );
  1241. void AttachParameters( CKST & src );
  1242. virtual BOOL IsValidParameters( );
  1243. // Operations
  1244. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1245. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1246. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1247. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1248. };
  1249. /////////////////////////////////////////////////////////////////////////
  1250. // 其他类
  1251. // 范围膨胀指数REI
  1252. class STKLIB_API CREI : public CTechnique
  1253. {
  1254. public:
  1255. // Constructors
  1256. CREI( );
  1257. CREI( CKData * pKData );
  1258. virtual ~CREI();
  1259. public:
  1260. virtual void Clear( );
  1261. // Attributes
  1262. int m_nDays;
  1263. int m_itsLong;
  1264. int m_itsShort;
  1265. virtual void SetDefaultParameters( );
  1266. void AttachParameters( CREI & src );
  1267. virtual BOOL IsValidParameters( );
  1268. // Operations
  1269. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1270. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1271. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1272. };
  1273. // 迪马克尔指标DMKI
  1274. class STKLIB_API CDMKI : public CTechnique
  1275. {
  1276. public:
  1277. // Constructors
  1278. CDMKI( );
  1279. CDMKI( CKData * pKData );
  1280. virtual ~CDMKI();
  1281. public:
  1282. virtual void Clear( );
  1283. // Attributes
  1284. int m_nDays;
  1285. int m_itsSold;
  1286. int m_itsBought;
  1287. virtual void SetDefaultParameters( );
  1288. void AttachParameters( CDMKI & src );
  1289. virtual BOOL IsValidParameters( );
  1290. // Operations
  1291. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1292. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1293. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1294. };
  1295. // 幅度比PCNT
  1296. class STKLIB_API CPCNT : public CTechnique
  1297. {
  1298. public:
  1299. // Constructors
  1300. CPCNT( );
  1301. CPCNT( CKData * pKData );
  1302. virtual ~CPCNT();
  1303. public:
  1304. virtual void Clear( );
  1305. // Attributes
  1306. int m_nMADays;
  1307. int m_itsGoldenFork;
  1308. int m_itsDeadFork;
  1309. virtual void SetDefaultParameters( );
  1310. void AttachParameters( CPCNT & src );
  1311. virtual BOOL IsValidParameters( );
  1312. // Operations
  1313. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1314. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1315. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1316. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1317. };
  1318. // 幅度分析HLC
  1319. class STKLIB_API CHLC : public CTechnique
  1320. {
  1321. public:
  1322. // Constructors
  1323. CHLC( );
  1324. CHLC( CKData * pKData );
  1325. virtual ~CHLC();
  1326. public:
  1327. virtual void Clear( );
  1328. // Attributes
  1329. int m_nDays;
  1330. int m_nMADays;
  1331. int m_itsGoldenFork;
  1332. int m_itsDeadFork;
  1333. virtual void SetDefaultParameters( );
  1334. void AttachParameters( CHLC & src );
  1335. virtual BOOL IsValidParameters( );
  1336. // Operations
  1337. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1338. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1339. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1340. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1341. };
  1342. // 逆势操作指标CDP
  1343. class STKLIB_API CCDP : public CTechnique
  1344. {
  1345. public:
  1346. // Constructors
  1347. CCDP( );
  1348. CCDP( CKData * pKData );
  1349. virtual ~CCDP();
  1350. public:
  1351. virtual void Clear( );
  1352. // Attributes
  1353. virtual void SetDefaultParameters( );
  1354. void AttachParameters( CCDP & src );
  1355. virtual BOOL IsValidParameters( );
  1356. // Operations
  1357. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1358. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1359. virtual BOOL Calculate( double * pAH, double * pNH, double * pAL, double * pNL, int nIndex, BOOL bUseLast );
  1360. };
  1361. // 累积摆动指标ASI
  1362. class STKLIB_API CASI : public CTechnique
  1363. {
  1364. public:
  1365. // Constructors
  1366. CASI( );
  1367. CASI( CKData * pKData );
  1368. virtual ~CASI();
  1369. public:
  1370. virtual void Clear( );
  1371. // Attributes
  1372. int m_nDays;
  1373. int m_itsDeviateOnBottom;
  1374. int m_itsDeviateOnTop;
  1375. virtual void SetDefaultParameters( );
  1376. void AttachParameters( CASI & src );
  1377. virtual BOOL IsValidParameters( );
  1378. // Operations
  1379. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1380. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1381. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1382. };
  1383. // 均幅指标ATR
  1384. class STKLIB_API CATR : public CTechnique
  1385. {
  1386. public:
  1387. // Constructors
  1388. CATR( );
  1389. CATR( CKData * pKData );
  1390. virtual ~CATR();
  1391. public:
  1392. virtual void Clear( );
  1393. // Attributes
  1394. int m_nDays;
  1395. int m_itsSold;
  1396. int m_itsBought;
  1397. virtual void SetDefaultParameters( );
  1398. void AttachParameters( CATR & src );
  1399. virtual BOOL IsValidParameters( );
  1400. // Operations
  1401. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1402. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1403. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1404. };
  1405. /////////////////////////////////////////////////////////////////////////
  1406. // 策略为王类
  1407. // 周期摆动量CYO
  1408. class STKLIB_API CCYO : public CTechnique
  1409. {
  1410. public:
  1411. // Constructors
  1412. CCYO( );
  1413. CCYO( CKData * pKData );
  1414. virtual ~CCYO();
  1415. public:
  1416. virtual void Clear( );
  1417. // Attributes
  1418. CSPDWordArray m_adwMTMDays;
  1419. int m_nMADays;
  1420. int m_itsGoldenFork;
  1421. int m_itsDeadFork;
  1422. virtual void SetDefaultParameters( );
  1423. void AttachParameters( CCYO & src );
  1424. virtual BOOL IsValidParameters( );
  1425. // Operations
  1426. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1427. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1428. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1429. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1430. };
  1431. // 去噪周期摆动量DCYO
  1432. class STKLIB_API CDCYO : public CTechnique
  1433. {
  1434. public:
  1435. // Constructors
  1436. CDCYO( );
  1437. CDCYO( CKData * pKData );
  1438. virtual ~CDCYO();
  1439. public:
  1440. virtual void Clear( );
  1441. // Attributes
  1442. CSPDWordArray m_adwMTMDays;
  1443. int m_nMADays;
  1444. int m_itsGoldenFork;
  1445. int m_itsDeadFork;
  1446. virtual void SetDefaultParameters( );
  1447. void AttachParameters( CDCYO & src );
  1448. virtual BOOL IsValidParameters( );
  1449. // Operations
  1450. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1451. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1452. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1453. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1454. };
  1455. // 相对换手率HSL
  1456. class STKLIB_API CHSL : public CTechnique
  1457. {
  1458. public:
  1459. // Constructors
  1460. CHSL( );
  1461. CHSL( CKData * pKData );
  1462. virtual ~CHSL();
  1463. static double GetMainChangeHand( DWORD dwMarket, CKData & kdata, int nIndexKD );
  1464. public:
  1465. virtual void Clear( );
  1466. CStockInfo m_stockinfo;
  1467. // Attributes
  1468. int m_nDays; // Not Used
  1469. int m_nMADays; // Not Used
  1470. int m_itsGoldenFork; // Not Used
  1471. int m_itsDeadFork; // Not used
  1472. virtual void SetDefaultParameters( );
  1473. void AttachParameters( CHSL & src );
  1474. virtual BOOL IsValidParameters( );
  1475. // Operations
  1476. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1477. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1478. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1479. virtual BOOL Calculate( double * pValue, int nIndex, int nDays, BOOL bUseLast );
  1480. };
  1481. // 去势百分比指标DPER
  1482. class STKLIB_API CDPER : public CTechnique
  1483. {
  1484. public:
  1485. // Constructors
  1486. CDPER( );
  1487. CDPER( CKData * pKData );
  1488. virtual ~CDPER();
  1489. public:
  1490. virtual void Clear( );
  1491. // Attributes
  1492. int m_nDays;
  1493. int m_nMADays;
  1494. int m_nDetrendDays;
  1495. int m_itsGoldenFork;
  1496. int m_itsDeadFork;
  1497. virtual void SetDefaultParameters( );
  1498. void AttachParameters( CDPER & src );
  1499. virtual BOOL IsValidParameters( );
  1500. // Operations
  1501. virtual int GetSignal( int nIndex, UINT * pnCode = NULL );
  1502. virtual BOOL GetMinMaxInfo(int nStart, int nEnd, double *pdMin, double *pdMax );
  1503. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast );
  1504. virtual BOOL Calculate( double * pValue, double * pMA, int nIndex, BOOL bUseLast );
  1505. };
  1506. #define TECHUSER_API
  1507. #include "TechUser.h"
  1508. // 用户外挂指标
  1509. class STKLIB_API CTechUser : public CTechnique
  1510. {
  1511. public:
  1512. // Constructors
  1513. CTechUser( );
  1514. CTechUser( CKData * pKData );
  1515. virtual ~CTechUser();
  1516. // static functions
  1517. static UINT GetTechUserCount();
  1518. static CSPString GetTechUserName( int nTech );
  1519. static CSPString GetTechUserShortName( int nTech );
  1520. // techuser attributes
  1521. BOOL SetTechUserID( int nTechUserID );
  1522. UINT GetTechUserID( );
  1523. void SetStock( CStock * pStock );
  1524. UINT GetLineCount( );
  1525. CSPString GetLineName( int nLine );
  1526. public:
  1527. virtual void Clear( ); // 清除
  1528. public:
  1529. // Attributes
  1530. virtual void SetDefaultParameters( ); // 设定缺省参数
  1531. void AttachParameters( CTechUser & src ); // 指定参数与src相同
  1532. virtual BOOL IsValidParameters( ); // 参数是否合法
  1533. // Operations
  1534. virtual int GetSignal( int nIndex, UINT * pnCode = NULL ); // 得到买卖信号
  1535. virtual int GetIntensity( int nIndex, UINT * pnCode = NULL, BOOL bTraceBack = TRUE ); // 得到买卖趋势信号
  1536. virtual int GetIntensityTraceback( int nIndex, UINT * pnCode = NULL ); // 得到买卖趋势信号
  1537. virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax ); // 得到最大最小值
  1538. virtual BOOL Calculate( double * pValue, int nIndex, BOOL bUseLast ); // 计算指标值
  1539. virtual BOOL Calculate( double * pValue1, double * pValue2, int nIndex, BOOL bUseLast ); // 计算指标值
  1540. virtual BOOL Calculate( double * pValue1, double * pValue2, double * pValue3, int nIndex, BOOL bUseLast ); // 计算指标值
  1541. virtual BOOL Calculate( double * pValue1, double * pValue2, double * pValue3, double * pValue4, int nIndex, BOOL bUseLast ); // 计算指标值
  1542. virtual BOOL Calculate( double * pValue1, double * pValue2, double * pValue3, double * pValue4, double * pValue5, int nIndex, BOOL bUseLast ); // 计算指标值
  1543. protected:
  1544. UINT m_nTechUserID;
  1545. TECHUSER_INFO m_techuserinfo;
  1546. CStock * m_pStock;
  1547. };
  1548. #endif //__STKLIB_TECHNIQUE_H__