hqchart 1.1.12693 → 1.1.12706

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/package.json +15 -47
  2. package/src/jscommon/umychart.resource/js/codemirror/javascript.js +1 -1
  3. package/.babelrc +0 -6
  4. package/.vscode/settings.json +0 -4
  5. package/Makefile +0 -9
  6. package/README.md +0 -452
  7. package/index.js +0 -17
  8. package/postcss.config.js +0 -5
  9. package/src/index.html +0 -18
  10. package/src/jscommon/backup/announcement.png +0 -0
  11. package/src/jscommon/backup/announcement2.png +0 -0
  12. package/src/jscommon/backup/blocktrading.png +0 -0
  13. package/src/jscommon/backup/investor.png +0 -0
  14. package/src/jscommon/backup/pforecast.png +0 -0
  15. package/src/jscommon/backup/research.png +0 -0
  16. package/src/jscommon/backup/tradedetail.png +0 -0
  17. package/src/jscommon/backup/umychart - backup.js +0 -17631
  18. package/src/jscommon/backup/umychart.macro.js +0 -4
  19. package/src/jscommon/backup/umychart.macro.vue.js +0 -3
  20. package/src/jscommon/commonindextree.json +0 -92
  21. package/src/jscommon/index.html +0 -13
  22. package/src/jscommon/jschinamapdata.js +0 -3
  23. package/src/jscommon/umychart.NetworkFilterTest.js +0 -48803
  24. package/src/jscommon/umychart.aliYunnetwork.js +0 -47
  25. package/src/jscommon/umychart.cninfo.components/readme.txt +0 -1
  26. package/src/jscommon/umychart.complier.js +0 -25293
  27. package/src/jscommon/umychart.complier.node/umychart.complier.controller.js +0 -559
  28. package/src/jscommon/umychart.complier.node/umychart.complier.node.js +0 -7043
  29. package/src/jscommon/umychart.complier.node/umychart.data.node.js +0 -816
  30. package/src/jscommon/umychart.console.js +0 -12
  31. package/src/jscommon/umychart.deal.js +0 -1452
  32. package/src/jscommon/umychart.dragdiv.js +0 -48
  33. package/src/jscommon/umychart.index.data.js +0 -4132
  34. package/src/jscommon/umychart.js +0 -90542
  35. package/src/jscommon/umychart.keyboard.js +0 -1659
  36. package/src/jscommon/umychart.listctrl.js +0 -690
  37. package/src/jscommon/umychart.mind.js +0 -2203
  38. package/src/jscommon/umychart.network.js +0 -44
  39. package/src/jscommon/umychart.news.js +0 -823
  40. package/src/jscommon/umychart.node.build/buildall.bat +0 -1
  41. package/src/jscommon/umychart.node.build/umychart.node.bat +0 -1
  42. package/src/jscommon/umychart.node.build/umychart.node.export.js +0 -40
  43. package/src/jscommon/umychart.regressiontest.js +0 -400
  44. package/src/jscommon/umychart.report.js +0 -5803
  45. package/src/jscommon/umychart.scrollbar.js +0 -1345
  46. package/src/jscommon/umychart.stock.js +0 -4218
  47. package/src/jscommon/umychart.style.js +0 -625
  48. package/src/jscommon/umychart.testdata.js +0 -150
  49. package/src/jscommon/umychart.uniapp.build/buildall.bat +0 -1
  50. package/src/jscommon/umychart.uniapp.build/umychart.bat +0 -1
  51. package/src/jscommon/umychart.uniapp.build/umychart.export.js +0 -70
  52. package/src/jscommon/umychart.user.js +0 -137
  53. package/src/jscommon/umychart.version.js +0 -30
  54. package/src/jscommon/umychart.vue/umychart.aliYunnetwork.vue.js +0 -56
  55. package/src/jscommon/umychart.vue.build/buildall.bat +0 -4
  56. package/src/jscommon/umychart.vue.build/copy_codemirror.bat +0 -2
  57. package/src/jscommon/umychart.vue.build/umychart.aliYunnetwork.vue.export.js +0 -9
  58. package/src/jscommon/umychart.vue.build/umychart.dragdiv.bat +0 -1
  59. package/src/jscommon/umychart.vue.build/umychart.dragdiv.export.js +0 -6
  60. package/src/jscommon/umychart.vue.build/umychart.index.data.bat +0 -1
  61. package/src/jscommon/umychart.vue.build/umychart.index.data.export.js +0 -4
  62. package/src/jscommon/umychart.vue.build/umychart.listctrl.vue.export.js +0 -15
  63. package/src/jscommon/umychart.vue.build/umychart.regressiontest.vue.export.js +0 -7
  64. package/src/jscommon/umychart.vue.build/umychart.regressiontest.wechat.export.js +0 -12
  65. package/src/jscommon/umychart.vue.build/umychart.stock.bat +0 -1
  66. package/src/jscommon/umychart.vue.build/umychart.stock.vue.export.js +0 -16
  67. package/src/jscommon/umychart.vue.build/umychart.testdata.bat +0 -3
  68. package/src/jscommon/umychart.vue.build/umychart.testdata.vue.export.js +0 -7
  69. package/src/jscommon/umychart.vue.build/umychart.vue.bat +0 -8
  70. package/src/jscommon/umychart.vue.build/umychart.vue.export.js +0 -112
  71. package/src/jscommon/umychart.vue.components/empyt.vue +0 -51
  72. package/src/jscommon/umychart.vue.components/historydayline.vue +0 -240
  73. package/src/jscommon/umychart.vue.components/jsloader.adddialog.vue +0 -315
  74. package/src/jscommon/umychart.vue.components/jsloader.vue +0 -93
  75. package/src/jscommon/umychart.vue.components/jsvuecontainer.vue +0 -160
  76. package/src/jscommon/umychart.vue.components/jsvuecontainer2.0.vue +0 -391
  77. package/src/jscommon/umychart.vue.components/login.vue +0 -178
  78. package/src/jscommon/umychart.vue.components/queryContent.vue +0 -750
  79. package/src/jscommon/umychart.vue.components/readme.txt +0 -8
  80. package/src/jscommon/umychart.vue.components/searchsymbol.vue +0 -299
  81. package/src/jscommon/umychart.vue.components/simulatetrade.vue +0 -1471
  82. package/src/jscommon/umychart.vue.components/stockchart.vue +0 -343
  83. package/src/jscommon/umychart.vue.components/stockchartV2.vue +0 -195
  84. package/src/jscommon/umychart.vue.components/stockdeal.vue +0 -358
  85. package/src/jscommon/umychart.vue.components/stockdealcount.vue +0 -262
  86. package/src/jscommon/umychart.vue.components/stockdeallastest.vue +0 -316
  87. package/src/jscommon/umychart.vue.components/stockdrawtool.vue +0 -343
  88. package/src/jscommon/umychart.vue.components/stockfull.vue +0 -355
  89. package/src/jscommon/umychart.vue.components/stockinfo.demo.vue +0 -153
  90. package/src/jscommon/umychart.vue.components/stockinfo.vue +0 -685
  91. package/src/jscommon/umychart.vue.components/stockkline.demo.vue +0 -1904
  92. package/src/jscommon/umychart.vue.components/stockmultiorder.vue +0 -174
  93. package/src/jscommon/umychart.vue.components/stockmultiperiod.vue +0 -222
  94. package/src/jscommon/umychart.vue.components/stockorder.vue +0 -320
  95. package/src/jscommon/umychart.vue.components/stocktradeinfo.demo.vue +0 -250
  96. package/src/jscommon/umychart.vue.components/stocktradeinfo.vue +0 -1907
  97. package/src/jscommon/umychart.vue.components/test.vue +0 -0
  98. package/src/jscommon/umychart.wechat/getDate.wechat.js +0 -91
  99. package/src/jscommon/umychart.wechat/lighter.news.wechat.js +0 -262
  100. package/src/jscommon/umychart.wechat/readme.txt +0 -3
  101. package/src/jscommon/umychart.wechat/umychart.analyze.wechat.js +0 -551
  102. package/src/jscommon/umychart.wechat/umychart.apidraw.wechat.js +0 -126
  103. package/src/jscommon/umychart.wechat/umychart.bigV.wechat.js +0 -2510
  104. package/src/jscommon/umychart.wechat/umychart.chartframe.wechat.js +0 -2942
  105. package/src/jscommon/umychart.wechat/umychart.chartpaint.wechat.js +0 -9752
  106. package/src/jscommon/umychart.wechat/umychart.charttitle.wechat.js +0 -2023
  107. package/src/jscommon/umychart.wechat/umychart.complier.wechat.js +0 -14726
  108. package/src/jscommon/umychart.wechat/umychart.console.wechat.js +0 -8
  109. package/src/jscommon/umychart.wechat/umychart.coordinatedata.wechat.js +0 -3654
  110. package/src/jscommon/umychart.wechat/umychart.data.wechat.js +0 -2243
  111. package/src/jscommon/umychart.wechat/umychart.element.wechart.js +0 -132
  112. package/src/jscommon/umychart.wechat/umychart.explainer.wechat.js +0 -1077
  113. package/src/jscommon/umychart.wechat/umychart.extendchart.wechat.js +0 -1140
  114. package/src/jscommon/umychart.wechat/umychart.framesplit.wechat.js +0 -2247
  115. package/src/jscommon/umychart.wechat/umychart.hqIndexformula.wechat.js +0 -941
  116. package/src/jscommon/umychart.wechat/umychart.index.data.wechat.js +0 -3628
  117. package/src/jscommon/umychart.wechat/umychart.index.wechat.js +0 -4074
  118. package/src/jscommon/umychart.wechat/umychart.klineinfo.wechat.js +0 -836
  119. package/src/jscommon/umychart.wechat/umychart.markethot.js +0 -50
  120. package/src/jscommon/umychart.wechat/umychart.network.wechart.js +0 -62
  121. package/src/jscommon/umychart.wechat/umychart.news.wechat.js +0 -3568
  122. package/src/jscommon/umychart.wechat/umychart.regressiontest.wechat.js +0 -412
  123. package/src/jscommon/umychart.wechat/umychart.report.wechat.js +0 -3983
  124. package/src/jscommon/umychart.wechat/umychart.resource.wechat.js +0 -919
  125. package/src/jscommon/umychart.wechat/umychart.shareimage.wechat.js +0 -681
  126. package/src/jscommon/umychart.wechat/umychart.simulatetrade.wechat.js +0 -238
  127. package/src/jscommon/umychart.wechat/umychart.stock.wechat.js +0 -4035
  128. package/src/jscommon/umychart.wechat/umychart.style.wechat.js +0 -419
  129. package/src/jscommon/umychart.wechat/umychart.uniapp.canvas.helper.js +0 -99
  130. package/src/jscommon/umychart.wechat/umychart.user.wechat.js +0 -588
  131. package/src/jscommon/umychart.wechat/umychart.userlog.wechat.js +0 -240
  132. package/src/jscommon/umychart.wechat/umychart.vedio.wechat.js +0 -112
  133. package/src/jscommon/umychart.wechat/umychart.version.wechat.js +0 -36
  134. package/src/jscommon/umychart.wechat/umychart.wechat.3.0.js +0 -12055
  135. package/src/jscommon/umychart.wechat/umychart.wechat.js +0 -15460
  136. package/src/jscommon/umychart.worker.js +0 -114
  137. package/src/jscommon/umychart.ws.stock.js +0 -110
  138. package/src/jscommon/umychart_python/.vscode/launch.json +0 -15
  139. package/src/jscommon/umychart_python/__init__.py +0 -4
  140. package/src/jscommon/umychart_python/build.cmd +0 -2
  141. package/src/jscommon/umychart_python/setup.py +0 -25
  142. package/src/jscommon/umychart_python/umychart_cache_testcase.py +0 -165
  143. package/src/jscommon/umychart_python/umychart_complier_data.py +0 -781
  144. package/src/jscommon/umychart_python/umychart_complier_help.py +0 -175
  145. package/src/jscommon/umychart_python/umychart_complier_job.py +0 -193
  146. package/src/jscommon/umychart_python/umychart_complier_jsalgorithm.py +0 -4144
  147. package/src/jscommon/umychart_python/umychart_complier_jscomplier.py +0 -177
  148. package/src/jscommon/umychart_python/umychart_complier_jsexecute.py +0 -517
  149. package/src/jscommon/umychart_python/umychart_complier_jsparser.py +0 -864
  150. package/src/jscommon/umychart_python/umychart_complier_jssymboldata.py +0 -1238
  151. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_cache.py +0 -146
  152. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_json.py +0 -106
  153. package/src/jscommon/umychart_python/umychart_complier_pandas_help.py +0 -80
  154. package/src/jscommon/umychart_python/umychart_complier_scanner.py +0 -554
  155. package/src/jscommon/umychart_python/umychart_complier_testcase.py +0 -362
  156. package/src/jscommon/umychart_python/umychart_complier_util.py +0 -30
  157. package/src/jscommon/umychart_python/umychart_webtemplate.py +0 -131
  158. package/src/jscommon/umychart_python/updatehqchartweb.bat +0 -5
  159. package/src/jscommon/vendor.js +0 -2
  160. package/src/pages/block.list.demo.page/App.vue +0 -117
  161. package/src/pages/block.list.demo.page/index.js +0 -12
  162. package/src/pages/brushTool.demo.page/App.vue +0 -19
  163. package/src/pages/brushTool.demo.page/index.js +0 -12
  164. package/src/pages/container.demo.page/App.vue +0 -118
  165. package/src/pages/container.demo.page/index.js +0 -18
  166. package/src/pages/dataZoom.demo.page/App.vue +0 -265
  167. package/src/pages/dataZoom.demo.page/components/dataZoom.vue +0 -303
  168. package/src/pages/dataZoom.demo.page/index.js +0 -12
  169. package/src/pages/historydayline.demo.page/App.vue +0 -57
  170. package/src/pages/historydayline.demo.page/index.js +0 -12
  171. package/src/pages/hq.demo.page/App.vue +0 -163
  172. package/src/pages/hq.demo.page/index.js +0 -12
  173. package/src/pages/hqchart.black/App.vue +0 -90
  174. package/src/pages/hqchart.black/components/searchsymbol.vue +0 -299
  175. package/src/pages/hqchart.black/components/stockdrawtool.vue +0 -300
  176. package/src/pages/hqchart.black/components/stockfull.vue +0 -313
  177. package/src/pages/hqchart.black/components/stockinfo.vue +0 -428
  178. package/src/pages/hqchart.black/components/stockkline.demo.vue +0 -1652
  179. package/src/pages/hqchart.black/components/stocktradeinfo.vue +0 -1337
  180. package/src/pages/hqchart.black/index.js +0 -30
  181. package/src/pages/hqchart.black/router/candlestickChart.vue +0 -108
  182. package/src/pages/hqchart.black/router/pricePointsTable.vue +0 -294
  183. package/src/pages/hqchart.black/router/stockDeallas.vue +0 -417
  184. package/src/pages/hqchart.black/router/timeShareChart.vue +0 -108
  185. package/src/pages/hqchart.page/App.vue +0 -101
  186. package/src/pages/hqchart.page/index.js +0 -18
  187. package/src/pages/index/App.vue +0 -1408
  188. package/src/pages/index/index.js +0 -7
  189. package/src/pages/indexHq/App.vue +0 -110
  190. package/src/pages/indexHq/index.js +0 -18
  191. package/src/pages/login.demo.page/App.vue +0 -22
  192. package/src/pages/login.demo.page/index.js +0 -12
  193. package/src/pages/queryContent.demo.page/App.vue +0 -29
  194. package/src/pages/queryContent.demo.page/index.js +0 -18
  195. package/src/pages/ranking.black/App.vue +0 -199
  196. package/src/pages/ranking.black/index.js +0 -18
  197. package/src/pages/search.demo.page/App.vue +0 -28
  198. package/src/pages/search.demo.page/index.js +0 -12
  199. package/src/pages/simulatetrade.demo.page/app.vue +0 -121
  200. package/src/pages/simulatetrade.demo.page/index.js +0 -17
  201. package/src/pages/stockdeal.demo.page/App.vue +0 -63
  202. package/src/pages/stockdeal.demo.page/index.js +0 -19
  203. package/src/pages/stockdealcount.demo.page/App.vue +0 -37
  204. package/src/pages/stockdealcount.demo.page/index.js +0 -12
  205. package/src/pages/stockdeallastest.demo.page/App.vue +0 -74
  206. package/src/pages/stockdeallastest.demo.page/index.js +0 -18
  207. package/src/pages/stockinfo.demo.page/App.vue +0 -92
  208. package/src/pages/stockinfo.demo.page/index.html +0 -13
  209. package/src/pages/stockinfo.demo.page/index.js +0 -19
  210. package/src/pages/stockkline.demo.page/App.vue +0 -55
  211. package/src/pages/stockkline.demo.page/index.js +0 -18
  212. package/src/pages/stockmultiorder.demo.page/App.vue +0 -149
  213. package/src/pages/stockmultiorder.demo.page/index.js +0 -18
  214. package/src/pages/stockmultiperiod.demo.page/App.vue +0 -87
  215. package/src/pages/stockmultiperiod.demo.page/index.js +0 -18
  216. package/src/pages/stockorder.demo.page/App.vue +0 -69
  217. package/src/pages/stockorder.demo.page/index.js +0 -18
  218. package/src/pages/test/App.vue +0 -22
  219. package/src/pages/test/index.js +0 -7
  220. package/src/pages/tradeinfopage/app.vue +0 -40
  221. package/src/pages/tradeinfopage/index.js +0 -7
  222. package/src/pages/tradeinfopage/tradeinfo.html +0 -12
  223. package/src/utils/urlObj.js +0 -81
  224. package/src/vendor.js +0 -2
  225. package/webpack.config.js +0 -104
@@ -1,781 +0,0 @@
1
- # Copyright (c) 2018 jones
2
- #
3
- # http://www.apache.org/licenses/LICENSE-2.0
4
- #
5
- # 开源项目 https://github.com/jones2000/HQChart
6
- #
7
- # jones_2000@163.com
8
-
9
-
10
- ###########################################################################
11
- #
12
- # 数据结构类
13
- #
14
- ############################################################################
15
- import sys
16
- import time
17
- import datetime
18
- from umychart_complier_help import JSComplierHelper
19
-
20
- class PERIOD_ID:
21
- # 日线周期
22
- DAY=0
23
- WEEK=1
24
- MONTH=2
25
- QUARTER=9
26
- YEAR=3
27
- # 分钟周期
28
- MINUTE=4
29
- MINUTE_5=5
30
- MINUTE_15=6
31
- MINUTE_30=7
32
- MINUTE_60=8
33
- MINUTE_120=11
34
- MINUTE_240=12
35
- # 自定日线周期
36
- CUSTOM_DAY_PERIOD_START= 40000
37
- CUSTOM_DAY_PERIOD_END= 49999
38
- # 自定义分钟周期
39
- CUSTOM_MINUTE_PERIOD_START=20000
40
- CUSTOM_MINUTE_PERIOD_END=29999
41
-
42
-
43
- # 历史K线数据
44
- class HistoryData() :
45
- def __init__(self) :
46
- self.Date=None
47
- self.YClose=None
48
- self.Open=None
49
- self.Close=None
50
- self.High=None
51
- self.Low=None
52
- self.Vol=None
53
- self.Amount=None
54
- self.Time=None
55
- self.FlowCapital=0 # 流通股本
56
-
57
- # 指数才有的数据
58
- self.Stop=None # 停牌家数
59
- self.Up =None # 上涨
60
- self.Down=None # 下跌
61
- self.Unchanged=None # 平盘
62
-
63
- def IsVaild(self, type=5) : # 开高低收昨收数据时候有效
64
- if type==5 :
65
- return self.Open>0 and self.High>0 and self.Low>0 and self.Close>0 and self.YClose>0
66
- elif type==4 :
67
- return self.Open>0 and self.High>0 and self.Low>0 and self.Close>0
68
-
69
- @staticmethod
70
- def Copy(data) :
71
- newData=HistoryData()
72
- newData.Date=data.Date
73
- newData.YClose=data.YClose
74
- newData.Open=data.Open
75
- newData.Close=data.Close
76
- newData.High=data.High
77
- newData.Low=data.Low
78
- newData.Vol=data.Vol
79
- newData.Amount=data.Amount
80
- newData.Time=data.Time
81
- newData.FlowCapital=data.FlowCapital
82
-
83
- newData.Stop=data.Stop
84
- newData.Up=data.Up
85
- newData.Down=data.Down
86
- newData.Unchanged=data.Unchanged
87
-
88
- return newData
89
-
90
- @staticmethod # 数据复权拷贝
91
- def CopyRight(data,seed=1) :
92
- newData=HistoryData()
93
- newData.Date=data.Date
94
- newData.YClose=data.YClose*seed
95
- newData.Open=data.Open*seed
96
- newData.Close=data.Close*seed
97
- newData.High=data.High*seed
98
- newData.Low=data.Low*seed
99
-
100
- newData.Vol=data.Vol
101
- newData.Amount=data.Amount
102
- newData.FlowCapital=data.FlowCapital
103
-
104
- return newData
105
-
106
-
107
- class MinuteData :
108
- def __init__(self) :
109
- self.Close=None
110
- self.Open=None
111
- self.High=None
112
- self.Low=None
113
- self.Vol=None
114
- self.Amount=None
115
- self.DateTime=None
116
- self.Increase=None
117
- self.Risefall=None
118
- self.AvPrice=None
119
-
120
- # 单指标数据
121
- class SingleData() :
122
- def __init__(self, date=None, value=None) :
123
- self.Date=date # 日期
124
- self.Value=value # 数据 (可以是一个数组)
125
- self.TestData=None # 内部测试用
126
-
127
- class ChartData:
128
- def __init__(self, data, dataType=None) :
129
- self.Data=data
130
- self.Period=0 # 周期 0=日线 1=周线 2=月线 3=年线
131
- self.Right=0 # 复权 0=不复权 1=前复权 2=后复权
132
- self.DataType=dataType
133
-
134
- @staticmethod # 是否是日线周期 0=日线 1=周线 2=月线 3=年线 9=季线 21=双周 [40001-50000) 自定义日线 (isIncludeBase 是否包含基础日线周期)
135
- def IsDayPeriod(period, isIncludeBase) :
136
- if period==1 or period==2 or period==3 or period==9 or period==21 :
137
- return True
138
- if period>PERIOD_ID.CUSTOM_DAY_PERIOD_START and period<=PERIOD_ID.CUSTOM_DAY_PERIOD_END :
139
- return True
140
- if period==0 and isIncludeBase==True :
141
- return True
142
- return False
143
-
144
- @staticmethod # 是否是分钟周期 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟 11=120分钟 12=240分钟 [20001-30000) 自定义分钟 (isIncludeBase 是否包含基础1分钟周期)
145
- def IsMinutePeriod(period,isIncludeBase) :
146
- if (period==5 or period==6 or period==7 or period==8 or period==11 or period==12) :
147
- return True
148
- if (period>PERIOD_ID.CUSTOM_MINUTE_PERIOD_START and period<=PERIOD_ID.CUSTOM_MINUTE_PERIOD_END) :
149
- return True
150
- if (period==4 and isIncludeBase==True) :
151
- return True
152
- return False
153
-
154
- # 数据长度
155
- def GetCount(self):
156
- return len(self.Data)
157
-
158
- # 获取最大最小值
159
- def GetMaxMin(self):
160
- dMaxPrice=self.Data[0].High
161
- dMinPrice=self.Data[0].Low
162
- for i in range(len(self.Data)) :
163
- item=self.Data[i]
164
- dMinPrice = min(dMinPrice,item.Low)
165
- dMaxPrice = max(dMaxPrice,item.High)
166
- return {"Max":dMaxPrice, "Min":dMinPrice}
167
-
168
- def GetItem(self,index):
169
- return self.Data[index]
170
-
171
- # 获取收盘价
172
- def GetClose(self) :
173
- result=[None] * len(self.Data)
174
- for i in range(len(self.Data)) :
175
- result[i]=self.Data[i].Close
176
- return result
177
-
178
- def GetYClose(self) :
179
- result=[None] * len(self.Data)
180
- for i in range(len(self.Data)) :
181
- result[i]=self.Data[i].YClose
182
- return result
183
-
184
- def GetHigh(self) :
185
- result=[None] * len(self.Data)
186
- for i in range(len(self.Data)) :
187
- result[i]=self.Data[i].High
188
- return result
189
-
190
- def GetLow(self) :
191
- result=[None] * len(self.Data)
192
- for i in range(len(self.Data)) :
193
- result[i]=self.Data[i].Low
194
- return result
195
-
196
- def GetOpen(self) :
197
- result=[None] * len(self.Data)
198
- for i in range(len(self.Data)) :
199
- result[i]=self.Data[i].Open
200
- return result
201
-
202
- def GetVol(self) :
203
- result=[None] * len(self.Data)
204
- for i in range(len(self.Data)) :
205
- result[i]=self.Data[i].Vol
206
- return result
207
-
208
- def GetAmount(self) :
209
- result=[None] * len(self.Data)
210
- for i in range(len(self.Data)) :
211
- result[i]=self.Data[i].Amount
212
- return result
213
-
214
- def GetUp(self) : # 上涨家数
215
- result=[None] * len(self.Data)
216
- for i in range(len(self.Data)) :
217
- result[i]=self.Data[i].Up
218
- return result
219
-
220
- def GetDown(self) : # 下跌家数
221
- result=[None] * len(self.Data)
222
- for i in range(len(self.Data)) :
223
- result[i]=self.Data[i].Down
224
- return result
225
-
226
- def GetYear(self) :
227
- result=[None] * len(self.Data)
228
- for i in range(len(self.Data)) :
229
- result[i]=int(self.Data[i].Date/10000)
230
- return result
231
-
232
- def GetMonth(self) :
233
- result=[None] * len(self.Data)
234
- for i in range(len(self.Data)) :
235
- result[i]=int(self.Data[i].Date%10000/100)
236
- return result
237
-
238
- def GetDate(self) :
239
- result=JSComplierHelper.CreateArray(len(self.Data))
240
- for i in range(len(self.Data)) :
241
- result[i]=self.Data[i].Date
242
- return result
243
-
244
- def GetTime(self) :
245
- result=JSComplierHelper.CreateArray(len(self.Data))
246
- for i in range(len(self.Data)) :
247
- result[i]=self.Data[i].Time
248
- return result
249
-
250
- def GetWeek(self) :
251
- result=[None] * len(self.Data)
252
- for i in range(len(self.Data)) :
253
- value=self.Data[i].Date
254
- if value==None :
255
- result[i]=None
256
- continue
257
-
258
- date = datetime.datetime.strptime(str(value), '%Y%m%d')
259
- day=date.weekday()
260
- result[i]=day+1
261
-
262
- return result
263
-
264
-
265
- # 复权 0 不复权 1 前复权 2 后复权
266
- def GetRightDate(self,right) :
267
- result=[]
268
- if len(self.Data)<=0 :
269
- return result
270
-
271
- result=[None] * len(self.Data)
272
- if right==1 :
273
- count=len(self.Data)
274
- index=count-1
275
- seed=1 #复权系数
276
- yClose=self.Data[index].YClose
277
- result[index]=HistoryData.Copy(self.Data[index])
278
-
279
- for i in range(index-1,-1,-1):
280
- index=i
281
- if yClose!=self.Data[index].Close :
282
- break
283
-
284
- result[index]=HistoryData.Copy(self.Data[index])
285
- yClose=self.Data[index].YClose
286
-
287
- for i in range(index,-1,-1) :
288
- index=i
289
- if yClose!=self.Data[index].Close:
290
- seed *= yClose/self.Data[index].Close
291
-
292
- result[index]=HistoryData.CopyRight(self.Data[index],seed)
293
- yClose=self.Data[index].YClose
294
-
295
- elif right==2 :
296
- index=0
297
- seed=1
298
- close=self.Data[index].Close
299
- result[index]=HistoryData.Copy(self.Data[index])
300
-
301
- for i in range(len(self.Data)) :
302
- index=i
303
- if close!=self.Data[index].YClose:
304
- break
305
-
306
- result[index]=HistoryData.Copy(self.Data[index])
307
- close=self.Data[index].Close
308
-
309
- for i in range(index, len(self.Data)) :
310
- index=i
311
- if close!=self.Data[index].YClose :
312
- seed *= close/self.Data[index].YClose
313
-
314
- result[index]=HistoryData.CopyRight(self.Data[index],seed)
315
- close=self.Data[index].Close
316
-
317
- return result
318
-
319
-
320
- # 周期数据 1=周 2=月 3=年
321
- def GetPeriodData(self, period) :
322
- if period in (1,2,3) :
323
- return self.GetDayPeriodData(period)
324
- if period in (5,6,7,8) :
325
- return self.GetMinutePeriodData(period)
326
-
327
- # 计算周,月,年
328
- def GetDayPeriodData(self, period) :
329
- result=[]
330
- startDate=0
331
- newData=None
332
- for dayData in self.Data :
333
- isNewData=False
334
-
335
- if period==1 : # 周线
336
- fridayDate=ChartData.GetFirday(dayData.Date)
337
- if fridayDate!=startDate :
338
- isNewData=True
339
- startDate=fridayDate
340
-
341
- elif period==2 : # 月线
342
- if int(dayData.Date/100)!=int(startDate/100) :
343
- isNewData=True
344
- startDate=dayData.Date
345
- elif period==3 : # 年线
346
- if int(dayData.Date/10000)!=int(startDate/10000) :
347
- isNewData=True
348
- startDate=dayData.Date
349
-
350
- if isNewData :
351
- newData=HistoryData()
352
- newData.Date=dayData.Date
353
- result.append(newData)
354
-
355
- if dayData.Open==None or dayData.Close==None:
356
- continue
357
-
358
- newData.Open=dayData.Open
359
- newData.High=dayData.High
360
- newData.Low=dayData.Low
361
- newData.YClose=dayData.YClose
362
- newData.Close=dayData.Close
363
- newData.Vol=dayData.Vol
364
- newData.Amount=dayData.Amount
365
- newData.FlowCapital=dayData.FlowCapital
366
- else :
367
- if newData==None :
368
- continue
369
- if dayData.Open==None or dayData.Close==None :
370
- continue
371
-
372
- if newData.Open==None or newData.Close==None :
373
- newData.Open=dayData.Open
374
- newData.High=dayData.High
375
- newData.Low=dayData.Low
376
- newData.YClose=dayData.YClose
377
- newData.Close=dayData.Close
378
- newData.Vol=dayData.Vol
379
- newData.Amount=dayData.Amount
380
- newData.FlowCapital=dayData.FlowCapital
381
- else :
382
- if newData.High<dayData.High :
383
- newData.High=dayData.High
384
- if newData.Low>dayData.Low :
385
- newData.Low=dayData.Low
386
-
387
- newData.Close=dayData.Close
388
- newData.Vol+=dayData.Vol
389
- newData.Amount+=dayData.Amount
390
- newData.FlowCapital+=dayData.FlowCapital
391
- newData.Date=dayData.Date
392
-
393
- return result
394
-
395
- @staticmethod
396
- def GetFirday(value) :
397
- date = datetime.datetime.strptime(str(value), '%Y%m%d')
398
- day=date.weekday()
399
- if day==4 :
400
- return value
401
-
402
- date+=datetime.timedelta(days=4-day)
403
- fridayDate= date.year*10000+date.month*100+date.day
404
- return fridayDate
405
-
406
- # 计算分钟
407
- def GetMinutePeriodData(self, period) :
408
- result = []
409
- periodDataCount = 5
410
- if period == 5 :
411
- periodDataCount = 5
412
- elif period == 6 :
413
- periodDataCount = 15
414
- elif period == 7 :
415
- periodDataCount = 30
416
- elif period == 8 :
417
- periodDataCount = 60
418
- else :
419
- return self.Data
420
-
421
- bFirstPeriodData = False
422
- newData = None
423
- dataCount=len(self.Data)
424
- i=-1
425
- while i<dataCount : # for (var i = 0; i < this.Data.length; )
426
- bFirstPeriodData = True
427
-
428
- # for (var j = 0; j < periodDataCount && i < this.Data.length; ++i)
429
- j=0
430
- while j<periodDataCount and i<dataCount :
431
- i+=1
432
- if i>=dataCount :
433
- break
434
-
435
- if bFirstPeriodData :
436
- newData = HistoryData()
437
- result.append(newData)
438
- bFirstPeriodData = False
439
-
440
- minData = self.Data[i]
441
- if minData == None :
442
- j+=1
443
- continue
444
-
445
- if minData.Time in(925 ,930 ,1300) :
446
- pass
447
- else :
448
- j+=1
449
-
450
- newData.Date = minData.Date
451
- newData.Time = minData.Time
452
- if minData.Open==None or minData.Close==None :
453
- continue
454
- if newData.Open==None or newData.Close==None :
455
- newData.Open=minData.Open
456
- newData.High=minData.High
457
- newData.Low=minData.Low
458
- newData.YClose=minData.YClose
459
- newData.Close=minData.Close
460
- newData.Vol=minData.Vol
461
- newData.Amount=minData.Amount
462
- newData.FlowCapital=minData.FlowCapital
463
- else :
464
- if newData.High<minData.High :
465
- newData.High=minData.High
466
- if newData.Low>minData.Low :
467
- newData.Low=minData.Low
468
- newData.Close=minData.Close
469
- newData.Vol+=minData.Vol
470
- newData.Amount+=minData.Amount
471
- newData.FlowCapital+=minData.FlowCapital
472
-
473
- return result
474
-
475
-
476
- # 叠加数据和主数据拟合,去掉主数据没有日期的数据
477
- def GetOverlayData(self,overlayData) :
478
- count=len(self.Data)
479
- overlayDataLen=len(overlayData)
480
- result=[None]*len(self.Data)
481
-
482
- i,j =0,0
483
- while i<count :
484
- date=self.Data[i].Date
485
- if j>overlayDataLen :
486
- result[i]=HistoryData()
487
- result[i].Date=date
488
- i+=1
489
- continue
490
-
491
- overlayDate=overlayData[j].Date
492
-
493
- if overlayDate==date :
494
- result[i]=HistoryData()
495
- result[i].Date=overlayData[j].Date
496
- result[i].YClose=overlayData[j].YClose
497
- result[i].Open=overlayData[j].Open
498
- result[i].High=overlayData[j].High
499
- result[i].Low=overlayData[j].Low
500
- result[i].Close=overlayData[j].Close
501
- result[i].Vol=overlayData[j].Vol
502
- result[i].Amount=overlayData[j].Amount
503
-
504
- # 涨跌家数数据
505
- result[i].Stop=overlayData[j].Stop
506
- result[i].Up=overlayData[j].Up
507
- result[i].Down=overlayData[j].Down
508
- result[i].Unchanged=overlayData[j].Unchanged
509
-
510
- j+=1
511
- i+=1
512
- elif overlayDate<date :
513
- j+=1
514
- else :
515
- result[i]= HistoryData()
516
- result[i].Date=date
517
- i+=1
518
-
519
- return result
520
-
521
- # 叠加数据和主数据拟合,去掉主数据没有日期的数据 分钟K线
522
- def GetOverlayMinuteData(self,overlayData) :
523
- count=len(self.Data)
524
- overlayDataLen=len(overlayData)
525
- result=[None]*len(self.Data)
526
-
527
- i,j =0,0
528
- while i<count :
529
- date=self.Data[i].Date
530
- time=self.Data[i].Time
531
- if j>overlayDataLen :
532
- result[i]=HistoryData()
533
- result[i].Date=date
534
- result[i].Time=time
535
- i+=1
536
- continue
537
-
538
- overlayDate=overlayData[j].Date
539
- overlayTime=overlayData[j].Time
540
-
541
- if overlayDate==date and overlayTime==time:
542
- result[i]=HistoryData()
543
- result[i].Date=overlayData[j].Date
544
- result[i].Time=overlayData[j].Time
545
- result[i].YClose=overlayData[j].YClose
546
- result[i].Open=overlayData[j].Open
547
- result[i].High=overlayData[j].High
548
- result[i].Low=overlayData[j].Low
549
- result[i].Close=overlayData[j].Close
550
- result[i].Vol=overlayData[j].Vol
551
- result[i].Amount=overlayData[j].Amount
552
-
553
- # 涨跌家数数据
554
- result[i].Stop=overlayData[j].Stop
555
- result[i].Up=overlayData[j].Up
556
- result[i].Down=overlayData[j].Down
557
- result[i].Unchanged=overlayData[j].Unchanged
558
-
559
- j+=1
560
- i+=1
561
- elif overlayDate<date or (overlayData==date and overlayTime<time):
562
- j+=1
563
- else :
564
- result[i]= HistoryData()
565
- result[i].Date=date
566
- result[i].Time=time
567
- i+=1
568
-
569
- return result
570
-
571
-
572
- # 把财报数据拟合到主图数据,返回 SingleData 数组
573
- def GetFittingFinanceData(self,financeData) :
574
- dataLen=len(self.Data)
575
- financeLen=len(financeData)
576
- result=JSComplierHelper.CreateArray(dataLen)
577
-
578
- i,j = 0,0
579
- while i<dataLen :
580
- date=self.Data[i].Date
581
- if j+1<financeLen :
582
- if financeData[j].Date<date and financeData[j+1].Date<=date :
583
- j+=1
584
- continue
585
-
586
- item=SingleData()
587
- item.Date=date
588
- if j<financeLen :
589
- item.Value=financeData[j].Value
590
- item.TestData=financeData[j].Date # 财务日期 调试用
591
- else :
592
- item.Value=None
593
- item.TestData=None
594
-
595
- result[i]=item
596
-
597
- i+=1
598
-
599
- return result
600
-
601
-
602
- # 市值计算 financeData.Value 是股数
603
- def GetFittingMarketValueData(self,financeData) :
604
- dataLen=len(self.Data)
605
- financeLen=len(financeData)
606
- result=JSComplierHelper.CreateArray(dataLen)
607
-
608
- i,j =0,0
609
- while i<dataLen :
610
- date=self.Data[i].Date
611
- price=self.Data[i].Close
612
-
613
- if j+1<financeLen :
614
- if financeData[j].Date<date and financeData[j+1].Date<=date :
615
- j+=1
616
- continue
617
-
618
- item=SingleData()
619
- item.Date=date
620
- item.Value=financeData[j].Value*price # 市值计算 收盘价*股数
621
- item.TestDate=financeData[j].Date # 财务日期 调试用
622
- result[i]=item
623
-
624
- i+=1
625
-
626
- return result
627
-
628
- # SingleData 转成单数组
629
- def GetValue(self) :
630
- dataLen=len(self.Data)
631
- result=JSComplierHelper.CreateArray(dataLen)
632
-
633
- for i in range(dataLen) :
634
- if self.Data[i] and self.Data[i].Value!=None :
635
- result[i]=self.Data[i].Value
636
-
637
- return result
638
-
639
- # SingleData 周期合并 日线
640
- def GetPeriodSingleData(self,period) :
641
- result=[]
642
- startDate ,newData =0,None
643
-
644
- for i in range (len(self.Data)) :
645
- isNewData=False
646
- dayData=self.Data[i]
647
- if dayData==None or dayData.Date==None :
648
- continue
649
-
650
- if period==1 : # 周线
651
- fridayDate=ChartData.GetFirday(dayData.Date)
652
- if fridayDate!=startDate :
653
- isNewData=True
654
- startDate=fridayDate
655
-
656
- elif period==2 :# 月线
657
- if int(dayData.Date/100)!=int(startDate/100) :
658
- isNewData=True
659
- startDate=dayData.Date
660
-
661
- elif period==3: # 年线
662
- if int(dayData.Date/10000)!=int(startDate/10000) :
663
- isNewData=True
664
- startDate=dayData.Date
665
-
666
-
667
- if (isNewData) :
668
- newData=SingleData()
669
- newData.Date=dayData.Date
670
- newData.Value=dayData.Value
671
- result.append(newData)
672
- else :
673
- if newData==None :
674
- continue
675
- if dayData.Value==None :
676
- continue
677
- if newData.Value==None :
678
- newData.Value=dayData.Value
679
-
680
- return result
681
-
682
- # 计算股息率 股息率TTM:过去4个季度现金分红总额/总市值 * 100%
683
- def CalculateDividendYield(self,cashData, marketValue) :
684
- if not marketValue :
685
- return []
686
-
687
- dataLen, cashLen = len(self.Data), len(cashData)
688
- dividendYield=[]
689
- j=0
690
- for i in range(dataLen) :
691
- day=self.Data.Data[i]
692
- market=marketValue.MarketValue[i]
693
- if not day or not market :
694
- continue
695
-
696
- item=SingleData()
697
- item.Date=day.Date
698
- item.Value=0
699
-
700
- if (j+1<cashLen) :
701
- if (cashData[j].Date<day.Date and cashData[j+1].Date<=day.Date) :
702
- j+=1
703
- i-=1
704
-
705
- if (j<cashLen) :
706
- cash=cashData[j]
707
- endDate=cash.Date+10000 # 1年有效
708
-
709
- if (day.Date>=cash.Date and day.Date<=endDate and JSComplierHelper.IsDivideNumber(market.Value) and JSComplierHelper.IsNumber(cash.Value)) :
710
- item.Value=cash.Value/market.Value*100
711
-
712
- dividendYield.append(item)
713
-
714
- return dividendYield
715
-
716
-
717
- # 以主图数据 拟合,返回 SingleData 数组
718
- def GetFittingData(self, overlayData) :
719
- dataLen=len(self.Data)
720
- result=JSComplierHelper.CreateArray(dataLen)
721
-
722
- i,j =0,0
723
- while i<dataLen :
724
- date=self.Data[i].Date
725
- if j>=len(overlayData) :
726
- i+=1
727
- continue
728
-
729
- overlayDate=overlayData[j].Date
730
-
731
- if overlayDate==date :
732
- item=SingleData()
733
- item.Date=overlayData[j].Date
734
- item.Value=overlayData[j].Value
735
- result[i]=item
736
- j+=1
737
- i+=1
738
-
739
- elif overlayDate<date :
740
- j+=1
741
- else :
742
- result[i]=SingleData()
743
- result[i].Date=date
744
- i+=1
745
-
746
- return result
747
-
748
- # 缺省数据使用 emptyValue填充
749
- def GetFittingData2(self,overlayData,defaultValue) :
750
- dataLen=len(self.Data)
751
- result=JSComplierHelper.CreateArray(dataLen)
752
- i,j = 0,0
753
- while i<dataLen :
754
- date=self.Data[i].Date
755
- if j>=len(overlayData) :
756
- result[i]=SingleData()
757
- result[i].Date=date
758
- result[i].Value=defaultValue
759
- i+=1
760
- continue
761
-
762
- overlayDate=overlayData[j].Date
763
-
764
- if overlayDate==date :
765
- item=SingleData()
766
- item.Date=overlayData[j].Date
767
- item.Value=overlayData[j].Value
768
- result[i]=item
769
- j+=1
770
- i+=1
771
- elif overlayDate<date :
772
- j+=1
773
- else :
774
- result[i]=SingleData()
775
- result[i].Date=date
776
- result[i].Value=defaultValue
777
- i+=1
778
-
779
- return result
780
-
781
-