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

金融证券系统

开发平台:

Visual C++

  1. #include <time.h>
  2. ///////////////////////////////////////////////////////////////////////
  3. //  CDRData
  4. _STOCK_INLINE int CDRData::GetSize() const
  5. { return m_nSize; }
  6. _STOCK_INLINE int CDRData::GetUpperBound() const
  7. { return m_nSize-1; }
  8. _STOCK_INLINE void CDRData::RemoveAll()
  9. { SetSize(0); }
  10. _STOCK_INLINE DRDATA CDRData::GetAt(int nIndex) const
  11. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  12. return m_pData[nIndex]; }
  13. _STOCK_INLINE void CDRData::SetAt(int nIndex, DRDATA newElement)
  14. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  15. m_pData[nIndex] = newElement; }
  16. _STOCK_INLINE DRDATA& CDRData::ElementAt(int nIndex)
  17. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  18. return m_pData[nIndex]; }
  19. _STOCK_INLINE const DRDATA* CDRData::GetData() const
  20. { return (const DRDATA*)m_pData; }
  21. _STOCK_INLINE DRDATA* CDRData::GetData()
  22. { return (DRDATA*)m_pData; }
  23. _STOCK_INLINE int CDRData::Add(DRDATA newElement)
  24. { int nIndex = m_nSize;
  25. SetAtGrow(nIndex, newElement);
  26. return nIndex; }
  27. _STOCK_INLINE DRDATA CDRData::operator[](int nIndex) const
  28. { return GetAt(nIndex); }
  29. _STOCK_INLINE DRDATA& CDRData::operator[](int nIndex)
  30. { return ElementAt(nIndex); }
  31. ///////////////////////////////////////////////////////////////////////
  32. //  CKData
  33. _STOCK_INLINE int CKData::GetUpperBound() const
  34. { return m_nSize-1; }
  35. _STOCK_INLINE void CKData::RemoveAll()
  36. { SetSize(0); }
  37. _STOCK_INLINE KDATA CKData::GetAt(int nIndex) const
  38. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  39. return m_pData[nIndex]; }
  40. _STOCK_INLINE void CKData::SetAt(int nIndex, KDATA newElement)
  41. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  42. m_pData[nIndex] = newElement; }
  43. _STOCK_INLINE KDATA& CKData::ElementAt(int nIndex)
  44. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  45. return m_pData[nIndex]; }
  46. _STOCK_INLINE const KDATA* CKData::GetData() const
  47. { return (const KDATA*)m_pData; }
  48. _STOCK_INLINE KDATA* CKData::GetData()
  49. { return (KDATA*)m_pData; }
  50. _STOCK_INLINE KDATA CKData::operator[](int nIndex) const
  51. { return GetAt(nIndex); }
  52. _STOCK_INLINE KDATA& CKData::operator[](int nIndex)
  53. { return ElementAt(nIndex); }
  54. _STOCK_INLINE BOOL CKData::DateAt(int nIndex,
  55. int &nYear, int &nMonth, int &nDay, int &nHour, int &nMinute ) const
  56. {
  57. SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  58. if( nIndex < 0 || nIndex >= m_nSize )
  59. return 0;
  60. DWORD date = m_pData[nIndex].m_date;
  61. CSPTime sptime;
  62. BOOL bOK = FALSE;
  63. if( ktypeMonth == m_nKType 
  64. || ktypeWeek == m_nKType 
  65. || ktypeDay == m_nKType )
  66. {
  67. bOK = sptime.FromStockTimeDay( date );
  68. }
  69. else if( ktypeMin60 == m_nKType
  70. || ktypeMin30 == m_nKType
  71. || ktypeMin15 == m_nKType
  72. || ktypeMin5 == m_nKType )
  73. {
  74. bOK = sptime.FromStockTimeMin( date );
  75. }
  76. else
  77. {
  78. nYear = nMonth = nDay = nHour = nMinute = 0;
  79. return FALSE;
  80. }
  81. if( !bOK )
  82. return FALSE;
  83. nYear = sptime.GetYear();
  84. nMonth = sptime.GetMonth();
  85. nDay = sptime.GetDay();
  86. nHour = sptime.GetHour();
  87. nMinute = sptime.GetMinute();
  88. return TRUE;
  89. }
  90. _STOCK_INLINE float CKData::MaindataAt(int nIndex) const
  91. // 得到CKData的nIndex日的主数据,根据主数据类型不同,返回值可能是开盘价、收盘价或者平均价
  92. {
  93. SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  94. if( nIndex < 0 || nIndex >= m_nSize )
  95. return 0;
  96. if( mdtypeOpen == m_nCurMaindataType )
  97. return m_pData[nIndex].m_fOpen;
  98. else if( mdtypeAverage == m_nCurMaindataType
  99. && m_pData[nIndex].m_fVolume > 1e-4 && m_pData[nIndex].m_fAmount > 1e-4 )
  100. {
  101. int nCount = 0;
  102. double average = ((double)(m_pData[nIndex].m_fAmount)) / m_pData[nIndex].m_fVolume;
  103. while( average < m_pData[nIndex].m_fLow && nCount < 10 ) { average *= 10; nCount ++; }
  104. while( average > m_pData[nIndex].m_fHigh && nCount < 20 ) { average /= 10; nCount ++; }
  105. if( average < m_pData[nIndex].m_fLow ) // 说明是指数
  106. average = (m_pData[nIndex].m_fOpen+m_pData[nIndex].m_fHigh+m_pData[nIndex].m_fLow+m_pData[nIndex].m_fClose)/4;
  107. return (float)average;
  108. }
  109. else
  110. return m_pData[nIndex].m_fClose;
  111. // WARNING CPV::Calculate( ... ) use the save code.
  112. }
  113. ///////////////////////////////////////////////////////////////////////
  114. //  CBaseData
  115. _STOCK_INLINE int CBaseData::GetSize() const
  116. { return m_nSize; }
  117. _STOCK_INLINE int CBaseData::GetUpperBound() const
  118. { return m_nSize-1; }
  119. _STOCK_INLINE void CBaseData::RemoveAll()
  120. { SetSize(0); }
  121. _STOCK_INLINE BASEDATA CBaseData::GetAt(int nIndex) const
  122. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  123. return m_pData[nIndex]; }
  124. _STOCK_INLINE void CBaseData::SetAt(int nIndex, BASEDATA newElement)
  125. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  126. m_pData[nIndex] = newElement; }
  127. _STOCK_INLINE BASEDATA& CBaseData::ElementAt(int nIndex)
  128. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  129. return m_pData[nIndex]; }
  130. _STOCK_INLINE const BASEDATA* CBaseData::GetData() const
  131. { return (const BASEDATA*)m_pData; }
  132. _STOCK_INLINE BASEDATA* CBaseData::GetData()
  133. { return (BASEDATA*)m_pData; }
  134. _STOCK_INLINE int CBaseData::Add(BASEDATA newElement)
  135. { int nIndex = m_nSize;
  136. SetAtGrow(nIndex, newElement);
  137. return nIndex; }
  138. _STOCK_INLINE BASEDATA CBaseData::operator[](int nIndex) const
  139. { return GetAt(nIndex); }
  140. _STOCK_INLINE BASEDATA& CBaseData::operator[](int nIndex)
  141. { return ElementAt(nIndex); }
  142. ///////////////////////////////////////////////////////////////////////
  143. //  CReport
  144. _STOCK_INLINE int CReport::GetSize() const
  145. { return m_nSize; }
  146. _STOCK_INLINE int CReport::GetUpperBound() const
  147. { return m_nSize-1; }
  148. _STOCK_INLINE void CReport::RemoveAll()
  149. { SetSize(0); }
  150. _STOCK_INLINE REPORT CReport::GetAt(int nIndex) const
  151. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  152. return m_pData[nIndex]; }
  153. _STOCK_INLINE void CReport::SetAt(int nIndex, REPORT newElement)
  154. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  155. m_pData[nIndex] = newElement; }
  156. _STOCK_INLINE REPORT& CReport::ElementAt(int nIndex)
  157. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  158. return m_pData[nIndex]; }
  159. _STOCK_INLINE const REPORT* CReport::GetData() const
  160. { return (const REPORT*)m_pData; }
  161. _STOCK_INLINE REPORT* CReport::GetData()
  162. { return (REPORT*)m_pData; }
  163. _STOCK_INLINE int CReport::Add(REPORT newElement)
  164. { int nIndex = m_nSize;
  165. SetAtGrow(nIndex, newElement);
  166. return nIndex; }
  167. _STOCK_INLINE REPORT CReport::operator[](int nIndex) const
  168. { return GetAt(nIndex); }
  169. _STOCK_INLINE REPORT& CReport::operator[](int nIndex)
  170. { return ElementAt(nIndex); }
  171. ///////////////////////////////////////////////////////////////////////
  172. //  CMinute
  173. _STOCK_INLINE int CMinute::GetSize() const
  174. { return m_nSize; }
  175. _STOCK_INLINE int CMinute::GetUpperBound() const
  176. { return m_nSize-1; }
  177. _STOCK_INLINE void CMinute::RemoveAll()
  178. { SetSize(0); }
  179. _STOCK_INLINE MINUTE CMinute::GetAt(int nIndex) const
  180. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  181. return m_pData[nIndex]; }
  182. _STOCK_INLINE void CMinute::SetAt(int nIndex, MINUTE newElement)
  183. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  184. m_pData[nIndex] = newElement; }
  185. _STOCK_INLINE MINUTE& CMinute::ElementAt(int nIndex)
  186. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  187. return m_pData[nIndex]; }
  188. _STOCK_INLINE const MINUTE* CMinute::GetData() const
  189. { return (const MINUTE*)m_pData; }
  190. _STOCK_INLINE MINUTE* CMinute::GetData()
  191. { return (MINUTE*)m_pData; }
  192. _STOCK_INLINE int CMinute::Add(MINUTE newElement)
  193. { int nIndex = m_nSize;
  194. SetAtGrow(nIndex, newElement);
  195. return nIndex; }
  196. _STOCK_INLINE MINUTE CMinute::operator[](int nIndex) const
  197. { return GetAt(nIndex); }
  198. _STOCK_INLINE MINUTE& CMinute::operator[](int nIndex)
  199. { return ElementAt(nIndex); }
  200. ///////////////////////////////////////////////////////////////////////
  201. //  COutline
  202. _STOCK_INLINE int COutline::GetSize() const
  203. { return m_nSize; }
  204. _STOCK_INLINE int COutline::GetUpperBound() const
  205. { return m_nSize-1; }
  206. _STOCK_INLINE void COutline::RemoveAll()
  207. { SetSize(0); }
  208. _STOCK_INLINE OUTLINE COutline::GetAt(int nIndex) const
  209. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  210. return m_pData[nIndex]; }
  211. _STOCK_INLINE void COutline::SetAt(int nIndex, OUTLINE newElement)
  212. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  213. m_pData[nIndex] = newElement; }
  214. _STOCK_INLINE OUTLINE& COutline::ElementAt(int nIndex)
  215. { SP_ASSERT(nIndex >= 0 && nIndex < m_nSize);
  216. return m_pData[nIndex]; }
  217. _STOCK_INLINE const OUTLINE* COutline::GetData() const
  218. { return (const OUTLINE*)m_pData; }
  219. _STOCK_INLINE OUTLINE* COutline::GetData()
  220. { return (OUTLINE*)m_pData; }
  221. _STOCK_INLINE int COutline::Add(OUTLINE newElement)
  222. { int nIndex = m_nSize;
  223. SetAtGrow(nIndex, newElement);
  224. return nIndex; }
  225. _STOCK_INLINE OUTLINE COutline::operator[](int nIndex) const
  226. { return GetAt(nIndex); }
  227. _STOCK_INLINE OUTLINE& COutline::operator[](int nIndex)
  228. { return ElementAt(nIndex); }