hqchart 1.1.12693 → 1.1.12708

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 (229) hide show
  1. package/package.json +15 -47
  2. package/src/jscommon/readmo.txt +2 -2
  3. package/src/jscommon/umychart.resource/js/codemirror/javascript.js +1 -1
  4. package/.babelrc +0 -6
  5. package/.vscode/settings.json +0 -4
  6. package/Makefile +0 -9
  7. package/README.md +0 -452
  8. package/index.js +0 -17
  9. package/postcss.config.js +0 -5
  10. package/src/index.html +0 -18
  11. package/src/jscommon/backup/announcement.png +0 -0
  12. package/src/jscommon/backup/announcement2.png +0 -0
  13. package/src/jscommon/backup/blocktrading.png +0 -0
  14. package/src/jscommon/backup/investor.png +0 -0
  15. package/src/jscommon/backup/pforecast.png +0 -0
  16. package/src/jscommon/backup/research.png +0 -0
  17. package/src/jscommon/backup/tradedetail.png +0 -0
  18. package/src/jscommon/backup/umychart - backup.js +0 -17631
  19. package/src/jscommon/backup/umychart.macro.js +0 -4
  20. package/src/jscommon/backup/umychart.macro.vue.js +0 -3
  21. package/src/jscommon/commonindextree.json +0 -92
  22. package/src/jscommon/index.html +0 -13
  23. package/src/jscommon/jschinamapdata.js +0 -3
  24. package/src/jscommon/phoneHorizontal/hengping.css +0 -283
  25. package/src/jscommon/phoneHorizontal/phone.html +0 -448
  26. package/src/jscommon/phoneHorizontal/rem.js +0 -28
  27. package/src/jscommon/umychart.NetworkFilterTest.js +0 -48803
  28. package/src/jscommon/umychart.aliYunnetwork.js +0 -47
  29. package/src/jscommon/umychart.cninfo.components/readme.txt +0 -1
  30. package/src/jscommon/umychart.complier.js +0 -25293
  31. package/src/jscommon/umychart.complier.node/umychart.complier.controller.js +0 -559
  32. package/src/jscommon/umychart.complier.node/umychart.complier.node.js +0 -7043
  33. package/src/jscommon/umychart.complier.node/umychart.data.node.js +0 -816
  34. package/src/jscommon/umychart.console.js +0 -12
  35. package/src/jscommon/umychart.deal.js +0 -1452
  36. package/src/jscommon/umychart.dragdiv.js +0 -48
  37. package/src/jscommon/umychart.index.data.js +0 -4132
  38. package/src/jscommon/umychart.js +0 -90542
  39. package/src/jscommon/umychart.keyboard.js +0 -1659
  40. package/src/jscommon/umychart.listctrl.js +0 -690
  41. package/src/jscommon/umychart.mind.js +0 -2203
  42. package/src/jscommon/umychart.network.js +0 -44
  43. package/src/jscommon/umychart.news.js +0 -823
  44. package/src/jscommon/umychart.node.build/buildall.bat +0 -1
  45. package/src/jscommon/umychart.node.build/umychart.node.bat +0 -1
  46. package/src/jscommon/umychart.node.build/umychart.node.export.js +0 -40
  47. package/src/jscommon/umychart.regressiontest.js +0 -400
  48. package/src/jscommon/umychart.report.js +0 -5803
  49. package/src/jscommon/umychart.scrollbar.js +0 -1345
  50. package/src/jscommon/umychart.stock.js +0 -4218
  51. package/src/jscommon/umychart.style.js +0 -625
  52. package/src/jscommon/umychart.testdata.js +0 -150
  53. package/src/jscommon/umychart.uniapp.build/buildall.bat +0 -1
  54. package/src/jscommon/umychart.uniapp.build/umychart.bat +0 -1
  55. package/src/jscommon/umychart.uniapp.build/umychart.export.js +0 -70
  56. package/src/jscommon/umychart.user.js +0 -137
  57. package/src/jscommon/umychart.version.js +0 -30
  58. package/src/jscommon/umychart.vue/umychart.aliYunnetwork.vue.js +0 -56
  59. package/src/jscommon/umychart.vue.build/buildall.bat +0 -4
  60. package/src/jscommon/umychart.vue.build/copy_codemirror.bat +0 -2
  61. package/src/jscommon/umychart.vue.build/umychart.aliYunnetwork.vue.export.js +0 -9
  62. package/src/jscommon/umychart.vue.build/umychart.dragdiv.bat +0 -1
  63. package/src/jscommon/umychart.vue.build/umychart.dragdiv.export.js +0 -6
  64. package/src/jscommon/umychart.vue.build/umychart.index.data.bat +0 -1
  65. package/src/jscommon/umychart.vue.build/umychart.index.data.export.js +0 -4
  66. package/src/jscommon/umychart.vue.build/umychart.listctrl.vue.export.js +0 -15
  67. package/src/jscommon/umychart.vue.build/umychart.regressiontest.vue.export.js +0 -7
  68. package/src/jscommon/umychart.vue.build/umychart.regressiontest.wechat.export.js +0 -12
  69. package/src/jscommon/umychart.vue.build/umychart.stock.bat +0 -1
  70. package/src/jscommon/umychart.vue.build/umychart.stock.vue.export.js +0 -16
  71. package/src/jscommon/umychart.vue.build/umychart.testdata.bat +0 -3
  72. package/src/jscommon/umychart.vue.build/umychart.testdata.vue.export.js +0 -7
  73. package/src/jscommon/umychart.vue.build/umychart.vue.bat +0 -8
  74. package/src/jscommon/umychart.vue.build/umychart.vue.export.js +0 -112
  75. package/src/jscommon/umychart.vue.components/empyt.vue +0 -51
  76. package/src/jscommon/umychart.vue.components/historydayline.vue +0 -240
  77. package/src/jscommon/umychart.vue.components/jsloader.adddialog.vue +0 -315
  78. package/src/jscommon/umychart.vue.components/jsloader.vue +0 -93
  79. package/src/jscommon/umychart.vue.components/jsvuecontainer.vue +0 -160
  80. package/src/jscommon/umychart.vue.components/jsvuecontainer2.0.vue +0 -391
  81. package/src/jscommon/umychart.vue.components/login.vue +0 -178
  82. package/src/jscommon/umychart.vue.components/queryContent.vue +0 -750
  83. package/src/jscommon/umychart.vue.components/readme.txt +0 -8
  84. package/src/jscommon/umychart.vue.components/searchsymbol.vue +0 -299
  85. package/src/jscommon/umychart.vue.components/simulatetrade.vue +0 -1471
  86. package/src/jscommon/umychart.vue.components/stockchart.vue +0 -343
  87. package/src/jscommon/umychart.vue.components/stockchartV2.vue +0 -195
  88. package/src/jscommon/umychart.vue.components/stockdeal.vue +0 -358
  89. package/src/jscommon/umychart.vue.components/stockdealcount.vue +0 -262
  90. package/src/jscommon/umychart.vue.components/stockdeallastest.vue +0 -316
  91. package/src/jscommon/umychart.vue.components/stockdrawtool.vue +0 -343
  92. package/src/jscommon/umychart.vue.components/stockfull.vue +0 -355
  93. package/src/jscommon/umychart.vue.components/stockinfo.demo.vue +0 -153
  94. package/src/jscommon/umychart.vue.components/stockinfo.vue +0 -685
  95. package/src/jscommon/umychart.vue.components/stockkline.demo.vue +0 -1904
  96. package/src/jscommon/umychart.vue.components/stockmultiorder.vue +0 -174
  97. package/src/jscommon/umychart.vue.components/stockmultiperiod.vue +0 -222
  98. package/src/jscommon/umychart.vue.components/stockorder.vue +0 -320
  99. package/src/jscommon/umychart.vue.components/stocktradeinfo.demo.vue +0 -250
  100. package/src/jscommon/umychart.vue.components/stocktradeinfo.vue +0 -1907
  101. package/src/jscommon/umychart.vue.components/test.vue +0 -0
  102. package/src/jscommon/umychart.wechat/getDate.wechat.js +0 -91
  103. package/src/jscommon/umychart.wechat/lighter.news.wechat.js +0 -262
  104. package/src/jscommon/umychart.wechat/readme.txt +0 -3
  105. package/src/jscommon/umychart.wechat/umychart.analyze.wechat.js +0 -551
  106. package/src/jscommon/umychart.wechat/umychart.apidraw.wechat.js +0 -126
  107. package/src/jscommon/umychart.wechat/umychart.bigV.wechat.js +0 -2510
  108. package/src/jscommon/umychart.wechat/umychart.chartframe.wechat.js +0 -2942
  109. package/src/jscommon/umychart.wechat/umychart.chartpaint.wechat.js +0 -9752
  110. package/src/jscommon/umychart.wechat/umychart.charttitle.wechat.js +0 -2023
  111. package/src/jscommon/umychart.wechat/umychart.complier.wechat.js +0 -14726
  112. package/src/jscommon/umychart.wechat/umychart.console.wechat.js +0 -8
  113. package/src/jscommon/umychart.wechat/umychart.coordinatedata.wechat.js +0 -3654
  114. package/src/jscommon/umychart.wechat/umychart.data.wechat.js +0 -2243
  115. package/src/jscommon/umychart.wechat/umychart.element.wechart.js +0 -132
  116. package/src/jscommon/umychart.wechat/umychart.explainer.wechat.js +0 -1077
  117. package/src/jscommon/umychart.wechat/umychart.extendchart.wechat.js +0 -1140
  118. package/src/jscommon/umychart.wechat/umychart.framesplit.wechat.js +0 -2247
  119. package/src/jscommon/umychart.wechat/umychart.hqIndexformula.wechat.js +0 -941
  120. package/src/jscommon/umychart.wechat/umychart.index.data.wechat.js +0 -3628
  121. package/src/jscommon/umychart.wechat/umychart.index.wechat.js +0 -4074
  122. package/src/jscommon/umychart.wechat/umychart.klineinfo.wechat.js +0 -836
  123. package/src/jscommon/umychart.wechat/umychart.markethot.js +0 -50
  124. package/src/jscommon/umychart.wechat/umychart.network.wechart.js +0 -62
  125. package/src/jscommon/umychart.wechat/umychart.news.wechat.js +0 -3568
  126. package/src/jscommon/umychart.wechat/umychart.regressiontest.wechat.js +0 -412
  127. package/src/jscommon/umychart.wechat/umychart.report.wechat.js +0 -3983
  128. package/src/jscommon/umychart.wechat/umychart.resource.wechat.js +0 -919
  129. package/src/jscommon/umychart.wechat/umychart.shareimage.wechat.js +0 -681
  130. package/src/jscommon/umychart.wechat/umychart.simulatetrade.wechat.js +0 -238
  131. package/src/jscommon/umychart.wechat/umychart.stock.wechat.js +0 -4035
  132. package/src/jscommon/umychart.wechat/umychart.style.wechat.js +0 -419
  133. package/src/jscommon/umychart.wechat/umychart.uniapp.canvas.helper.js +0 -99
  134. package/src/jscommon/umychart.wechat/umychart.user.wechat.js +0 -588
  135. package/src/jscommon/umychart.wechat/umychart.userlog.wechat.js +0 -240
  136. package/src/jscommon/umychart.wechat/umychart.vedio.wechat.js +0 -112
  137. package/src/jscommon/umychart.wechat/umychart.version.wechat.js +0 -36
  138. package/src/jscommon/umychart.wechat/umychart.wechat.3.0.js +0 -12055
  139. package/src/jscommon/umychart.wechat/umychart.wechat.js +0 -15460
  140. package/src/jscommon/umychart.worker.js +0 -114
  141. package/src/jscommon/umychart.ws.stock.js +0 -110
  142. package/src/jscommon/umychart_python/.vscode/launch.json +0 -15
  143. package/src/jscommon/umychart_python/__init__.py +0 -4
  144. package/src/jscommon/umychart_python/build.cmd +0 -2
  145. package/src/jscommon/umychart_python/setup.py +0 -25
  146. package/src/jscommon/umychart_python/umychart_cache_testcase.py +0 -165
  147. package/src/jscommon/umychart_python/umychart_complier_data.py +0 -781
  148. package/src/jscommon/umychart_python/umychart_complier_help.py +0 -175
  149. package/src/jscommon/umychart_python/umychart_complier_job.py +0 -193
  150. package/src/jscommon/umychart_python/umychart_complier_jsalgorithm.py +0 -4144
  151. package/src/jscommon/umychart_python/umychart_complier_jscomplier.py +0 -177
  152. package/src/jscommon/umychart_python/umychart_complier_jsexecute.py +0 -517
  153. package/src/jscommon/umychart_python/umychart_complier_jsparser.py +0 -864
  154. package/src/jscommon/umychart_python/umychart_complier_jssymboldata.py +0 -1238
  155. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_cache.py +0 -146
  156. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_json.py +0 -106
  157. package/src/jscommon/umychart_python/umychart_complier_pandas_help.py +0 -80
  158. package/src/jscommon/umychart_python/umychart_complier_scanner.py +0 -554
  159. package/src/jscommon/umychart_python/umychart_complier_testcase.py +0 -362
  160. package/src/jscommon/umychart_python/umychart_complier_util.py +0 -30
  161. package/src/jscommon/umychart_python/umychart_webtemplate.py +0 -131
  162. package/src/jscommon/umychart_python/updatehqchartweb.bat +0 -5
  163. package/src/jscommon/vendor.js +0 -2
  164. package/src/pages/block.list.demo.page/App.vue +0 -117
  165. package/src/pages/block.list.demo.page/index.js +0 -12
  166. package/src/pages/brushTool.demo.page/App.vue +0 -19
  167. package/src/pages/brushTool.demo.page/index.js +0 -12
  168. package/src/pages/container.demo.page/App.vue +0 -118
  169. package/src/pages/container.demo.page/index.js +0 -18
  170. package/src/pages/dataZoom.demo.page/App.vue +0 -265
  171. package/src/pages/dataZoom.demo.page/components/dataZoom.vue +0 -303
  172. package/src/pages/dataZoom.demo.page/index.js +0 -12
  173. package/src/pages/historydayline.demo.page/App.vue +0 -57
  174. package/src/pages/historydayline.demo.page/index.js +0 -12
  175. package/src/pages/hq.demo.page/App.vue +0 -163
  176. package/src/pages/hq.demo.page/index.js +0 -12
  177. package/src/pages/hqchart.black/App.vue +0 -90
  178. package/src/pages/hqchart.black/components/searchsymbol.vue +0 -299
  179. package/src/pages/hqchart.black/components/stockdrawtool.vue +0 -300
  180. package/src/pages/hqchart.black/components/stockfull.vue +0 -313
  181. package/src/pages/hqchart.black/components/stockinfo.vue +0 -428
  182. package/src/pages/hqchart.black/components/stockkline.demo.vue +0 -1652
  183. package/src/pages/hqchart.black/components/stocktradeinfo.vue +0 -1337
  184. package/src/pages/hqchart.black/index.js +0 -30
  185. package/src/pages/hqchart.black/router/candlestickChart.vue +0 -108
  186. package/src/pages/hqchart.black/router/pricePointsTable.vue +0 -294
  187. package/src/pages/hqchart.black/router/stockDeallas.vue +0 -417
  188. package/src/pages/hqchart.black/router/timeShareChart.vue +0 -108
  189. package/src/pages/hqchart.page/App.vue +0 -101
  190. package/src/pages/hqchart.page/index.js +0 -18
  191. package/src/pages/index/App.vue +0 -1408
  192. package/src/pages/index/index.js +0 -7
  193. package/src/pages/indexHq/App.vue +0 -110
  194. package/src/pages/indexHq/index.js +0 -18
  195. package/src/pages/login.demo.page/App.vue +0 -22
  196. package/src/pages/login.demo.page/index.js +0 -12
  197. package/src/pages/queryContent.demo.page/App.vue +0 -29
  198. package/src/pages/queryContent.demo.page/index.js +0 -18
  199. package/src/pages/ranking.black/App.vue +0 -199
  200. package/src/pages/ranking.black/index.js +0 -18
  201. package/src/pages/search.demo.page/App.vue +0 -28
  202. package/src/pages/search.demo.page/index.js +0 -12
  203. package/src/pages/simulatetrade.demo.page/app.vue +0 -121
  204. package/src/pages/simulatetrade.demo.page/index.js +0 -17
  205. package/src/pages/stockdeal.demo.page/App.vue +0 -63
  206. package/src/pages/stockdeal.demo.page/index.js +0 -19
  207. package/src/pages/stockdealcount.demo.page/App.vue +0 -37
  208. package/src/pages/stockdealcount.demo.page/index.js +0 -12
  209. package/src/pages/stockdeallastest.demo.page/App.vue +0 -74
  210. package/src/pages/stockdeallastest.demo.page/index.js +0 -18
  211. package/src/pages/stockinfo.demo.page/App.vue +0 -92
  212. package/src/pages/stockinfo.demo.page/index.html +0 -13
  213. package/src/pages/stockinfo.demo.page/index.js +0 -19
  214. package/src/pages/stockkline.demo.page/App.vue +0 -55
  215. package/src/pages/stockkline.demo.page/index.js +0 -18
  216. package/src/pages/stockmultiorder.demo.page/App.vue +0 -149
  217. package/src/pages/stockmultiorder.demo.page/index.js +0 -18
  218. package/src/pages/stockmultiperiod.demo.page/App.vue +0 -87
  219. package/src/pages/stockmultiperiod.demo.page/index.js +0 -18
  220. package/src/pages/stockorder.demo.page/App.vue +0 -69
  221. package/src/pages/stockorder.demo.page/index.js +0 -18
  222. package/src/pages/test/App.vue +0 -22
  223. package/src/pages/test/index.js +0 -7
  224. package/src/pages/tradeinfopage/app.vue +0 -40
  225. package/src/pages/tradeinfopage/index.js +0 -7
  226. package/src/pages/tradeinfopage/tradeinfo.html +0 -12
  227. package/src/utils/urlObj.js +0 -81
  228. package/src/vendor.js +0 -2
  229. package/webpack.config.js +0 -104
@@ -1,2243 +0,0 @@
1
- /*
2
- copyright (c) 2018 jones
3
-
4
- http://www.apache.org/licenses/LICENSE-2.0
5
-
6
- 开源项目 https://github.com/jones2000/HQChart
7
-
8
- jones_2000@163.com
9
-
10
- 行情数据结构 及计算方法
11
- */
12
-
13
- import { MARKET_SUFFIX_NAME } from "./umychart.coordinatedata.wechat.js";
14
-
15
- function Guid()
16
- {
17
- function S4()
18
- {
19
- return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
20
- }
21
-
22
- return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
23
- }
24
-
25
- function IsPlusNumber(value)
26
- {
27
- if (value==null) return false;
28
- if (isNaN(value)) return false;
29
- return value>0;
30
- }
31
-
32
- function IsNumber(value)
33
- {
34
- if (value==null) return false;
35
- if (isNaN(value)) return false;
36
-
37
- return true;
38
- }
39
-
40
- //历史K线数据
41
- function HistoryData()
42
- {
43
- this.Date;
44
- this.YClose;
45
- this.Open;
46
- this.Close;
47
- this.High;
48
- this.Low;
49
- this.Vol;
50
- this.Amount;
51
- this.Time; //分钟 HHMM / 秒HHMMSS
52
- this.FlowCapital = 0; //流通股本
53
- this.Position = null; //持仓量
54
-
55
- //指数才有的数据
56
- this.Stop; //停牌家数
57
- this.Up; //上涨
58
- this.Down; //下跌
59
- this.Unchanged; //平盘
60
-
61
- this.ExtendData; //扩展数据
62
-
63
- this.BFactor; //前复权
64
- this.AFactor; //后复权
65
-
66
- this.ColorData; //自定义颜色 {Type:0=空心 1=实心, Line:{ Color:'上下线颜色'}, Border:{Color:柱子边框颜色}, BarColor:柱子颜色};
67
- }
68
-
69
- //数据复制
70
- HistoryData.Copy=function(data)
71
- {
72
- var newData=new HistoryData();
73
- newData.Date=data.Date;
74
- if (IsNumber(data.Time)) newData.Time=data.Time;
75
- newData.YClose=data.YClose;
76
- newData.Open=data.Open;
77
- newData.Close=data.Close;
78
- newData.High=data.High;
79
- newData.Low=data.Low;
80
- newData.Vol=data.Vol;
81
- newData.Amount=data.Amount;
82
-
83
- if (IsPlusNumber(data.FlowCapital)) newData.FlowCapital = data.FlowCapital;
84
- if (IsPlusNumber(data.Position)) newData.Position = data.Position;
85
-
86
- //指数才有的数据
87
- if (IsPlusNumber(data.Stop)) newData.Stop = data.Stop;
88
- if (IsPlusNumber(data.Up)) newData.Up = data.Up;
89
- if (IsPlusNumber(data.Down)) newData.Down = data.Down;
90
- if (IsPlusNumber(data.Unchanged)) newData.Unchanged = data.Unchanged;
91
-
92
- //复权因子
93
- if (IsPlusNumber(data.BFactor)) newData.BFactor = data.BFactor;
94
- if (IsPlusNumber(data.AFactor)) newData.AFactor = data.AFactor;
95
-
96
- if (data.ColorData) newData.ColorData=data.ColorData;
97
- if (data.ExtendData) newData.ExtendData=data.ExtendData;
98
-
99
- return newData;
100
- }
101
-
102
- //把数据 src 复制到 dest中
103
- HistoryData.CopyTo = function (dest, src)
104
- {
105
- dest.Date = src.Date;
106
- dest.YClose = src.YClose;
107
- dest.Open = src.Open;
108
- dest.Close = src.Close;
109
- dest.High = src.High;
110
- dest.Low = src.Low;
111
- dest.Vol = src.Vol;
112
- dest.Amount = src.Amount;
113
- if (IsPlusNumber(src.Time)) dest.Time = src.Time;
114
- if (IsPlusNumber(src.FlowCapital)) dest.FlowCapital = src.FlowCapital;
115
-
116
- //指数才有的数据
117
- if (IsPlusNumber(src.Stop)) dest.Stop = src.Stop;
118
- if (IsPlusNumber(src.Up)) dest.Up = src.Up;
119
- if (IsPlusNumber(src.Down)) dest.Down = src.Down;
120
- if (IsPlusNumber(src.Unchanged)) dest.Unchanged = src.Unchanged;
121
-
122
- //复权因子
123
- if (IsPlusNumber(src.BFactor)) dest.BFactor = src.BFactor;
124
- if (IsPlusNumber(src.AFactor)) dest.AFactor = src.AFactor;
125
-
126
- if (src.ColorData) dest.ColorData=src.ColorData;
127
- if (src.ExtendData) dest.ExtendData=src.ExtendData;
128
- }
129
-
130
- //数据复权拷贝
131
- HistoryData.CopyRight=function(data,seed)
132
- {
133
- var newData=new HistoryData();
134
- newData.Date=data.Date;
135
- if (IsNumber(data.Time)) newData.Time=data.Time;
136
-
137
- newData.YClose=data.YClose*seed;
138
- newData.Open=data.Open*seed;
139
- newData.Close=data.Close*seed;
140
- newData.High=data.High*seed;
141
- newData.Low=data.Low*seed;
142
-
143
- newData.Vol=data.Vol;
144
- newData.Amount=data.Amount;
145
-
146
- newData.FlowCapital = data.FlowCapital;
147
- newData.Position = data.Position;
148
-
149
- if (data.ColorData) newData.ColorData=data.ColorData; //K线颜色
150
- if (data.ExtendData) newData.ExtendData=data.ExtendData; //扩张数据
151
-
152
- return newData;
153
- }
154
-
155
- //分钟数据
156
- function MinuteData()
157
- {
158
- this.Close;
159
- this.Open;
160
- this.High;
161
- this.Low;
162
- this.Vol;
163
- this.Amount;
164
- this.DateTime;
165
- this.Increase;
166
- this.Risefall;
167
- this.AvPrice;
168
- this.Date;
169
- this.Time;
170
- this.Position = null; //持仓量
171
- this.YClearing; //昨结算价
172
- this.YClose; //昨收
173
-
174
- this.ExtendData; //扩展数据
175
- }
176
-
177
- //单指标数据
178
- function SingleData()
179
- {
180
- this.Date; //日期
181
- this.Value; //数据
182
- }
183
-
184
- //外部数据计算方法接口
185
- function DataPlus()
186
- {
187
- this.PeriodCallback=new Map(); //key=周期id value={ Period, Callback(period,data,self): }
188
-
189
- this.GetPeriodCallback=function(period)
190
- {
191
- if (!this.PeriodCallback.has(period)) return null;
192
-
193
- return this.PeriodCallback.get(period);
194
- }
195
-
196
- this.AddPeriodCallback=function(obj)
197
- {
198
- if (!IFrameSplitOperator.IsNumber(obj.Period) || !obj.Callback) return;
199
-
200
- var item={ Period:obj.Period, Callback:obj.Callback };
201
- this.PeriodCallback.set(obj.Period, item);
202
- }
203
-
204
- this.RemovePeriodCallback=function(obj)
205
- {
206
- if (!this.PeriodCallback.has(obj.ID)) return;
207
- this.PeriodCallback.delete(obj.ID);
208
- }
209
- };
210
-
211
- var g_DataPlus=new DataPlus();
212
-
213
- //////////////////////////////////////////////////////////////////////
214
- // 数据集合
215
- function ChartData()
216
- {
217
- this.Data=new Array();
218
- this.DataOffset=0; //数据偏移
219
- this.Period=0; //周期 0 日线 1 周线 2 月线 3年线
220
- this.Right=0; //复权 0 不复权 1 前复权 2 后复权
221
- this.Symbol; //股票代码
222
-
223
- this.Data2=new Array(); //第1组数据 走势图:历史分钟数据
224
-
225
- this.GetCloseMA=function(dayCount)
226
- {
227
- var result=new Array();
228
- for (var i = 0, len = this.Data.length; i < len; i++)
229
- {
230
- if (i < dayCount)
231
- {
232
- result[i]=null;
233
- continue;
234
- }
235
-
236
- var sum = 0;
237
- for (var j = 0; j < dayCount; j++)
238
- {
239
- sum += this.Data[i - j].Close;
240
- }
241
- result[i]=sum / dayCount;
242
- }
243
- return result;
244
- }
245
-
246
- this.GetVolMA=function(dayCount)
247
- {
248
- var result=new Array();
249
- for (var i = 0, len = this.Data.length; i < len; i++)
250
- {
251
- if (i < dayCount)
252
- {
253
- result[i]=null;
254
- continue;
255
- }
256
-
257
- var sum = 0;
258
- for (var j = 0; j < dayCount; j++)
259
- {
260
- sum += this.Data[i - j].Vol;
261
- }
262
- result[i]=sum / dayCount;
263
- }
264
- return result;
265
- }
266
-
267
- this.GetAmountMA=function(dayCount)
268
- {
269
- var result=new Array();
270
- for (var i = 0, len = this.Data.length; i < len; i++)
271
- {
272
- if (i < dayCount)
273
- {
274
- result[i]=null;
275
- continue;
276
- }
277
-
278
- var sum = 0;
279
- for (var j = 0; j < dayCount; j++)
280
- {
281
- sum += this.Data[i - j].Amount;
282
- }
283
- result[i]=sum / dayCount;
284
- }
285
- return result;
286
- }
287
-
288
- //获取收盘价
289
- this.GetClose=function()
290
- {
291
- var result=new Array();
292
- for(var i in this.Data)
293
- {
294
- result[i]=this.Data[i].Close;
295
- }
296
-
297
- return result;
298
- }
299
-
300
- this.GetYClose=function()
301
- {
302
- var result=new Array();
303
- for(var i in this.Data)
304
- {
305
- result[i]=this.Data[i].YClose;
306
- }
307
-
308
- return result;
309
- }
310
-
311
- this.GetHigh=function()
312
- {
313
- var result=new Array();
314
- for(var i in this.Data)
315
- {
316
- result[i]=this.Data[i].High;
317
- }
318
-
319
- return result;
320
- }
321
-
322
- this.GetLow=function()
323
- {
324
- var result=new Array();
325
- for(var i in this.Data)
326
- {
327
- result[i]=this.Data[i].Low;
328
- }
329
-
330
- return result;
331
- }
332
-
333
- this.GetOpen=function()
334
- {
335
- var result=new Array();
336
- for(var i in this.Data)
337
- {
338
- result[i]=this.Data[i].Open;
339
- }
340
-
341
- return result;
342
- }
343
-
344
- this.GetVol=function(unit)
345
- {
346
- var value=1;
347
- if (ChartData.IsNumber(unit)) value=unit;
348
- var result=[];
349
- for(var i in this.Data)
350
- {
351
- result[i]=this.Data[i].Vol/value;
352
- }
353
-
354
- return result;
355
- }
356
-
357
- this.GetAmount=function()
358
- {
359
- var result=new Array();
360
- for(var i in this.Data)
361
- {
362
- result[i]=this.Data[i].Amount;
363
- }
364
-
365
- return result;
366
- }
367
-
368
- this.GetPosition = function ()
369
- {
370
- var result = new Array();
371
- for (var i in this.Data)
372
- {
373
- result[i] = this.Data[i].Position;
374
- }
375
-
376
- return result;
377
- }
378
-
379
- this.GetDate = function ()
380
- {
381
- var result = [];
382
- for (var i in this.Data)
383
- {
384
- result[i] = this.Data[i].Date;
385
- }
386
-
387
- return result;
388
- }
389
-
390
- this.GetTime = function ()
391
- {
392
- var result = [];
393
- for (var i in this.Data)
394
- {
395
- result[i] = this.Data[i].Time;
396
- }
397
-
398
- return result;
399
- }
400
-
401
- this.GetUp = function () //上涨家数
402
- {
403
- var result = [];
404
- for (var i in this.Data) {
405
- result[i] = this.Data[i].Up;
406
- }
407
-
408
- return result;
409
- }
410
-
411
- this.GetDown = function () //下跌家数
412
- {
413
- var result = [];
414
- for (var i in this.Data) {
415
- result[i] = this.Data[i].Down;
416
- }
417
-
418
- return result;
419
- }
420
-
421
- this.GetYear=function()
422
- {
423
- var result=new Array();
424
- for(var i in this.Data)
425
- {
426
- result[i]=parseInt(this.Data[i].Date/10000);
427
- }
428
-
429
- return result;
430
- }
431
-
432
- this.GetMonth=function()
433
- {
434
- var result=new Array();
435
- for(var i in this.Data)
436
- {
437
- result[i]=parseInt(this.Data[i].Date%10000/100);
438
- }
439
-
440
- return result;
441
- }
442
-
443
- //分时图均价
444
- this.GetAvPrice=function()
445
- {
446
- var result=new Array();
447
- for(var i in this.Data)
448
- {
449
- var value=this.Data[i].AvPrice;
450
- if (ChartData.IsNumber(value))
451
- result[i]=value;
452
- else
453
- result[i]=0;
454
- }
455
-
456
- return result;
457
- }
458
-
459
- this.GetSettlementPrice=function() //结算价
460
- {
461
- var result=[]
462
- for(var i=0; i<this.Data.length; ++i)
463
- {
464
- result[i]=this.Data[i].FClose;
465
- }
466
-
467
- return result;
468
- }
469
-
470
- this.GetIsEqual=function()
471
- {
472
- var result=[];
473
- for(var i=0; i<this.Data.length; ++i)
474
- {
475
- var item=this.Data[i];
476
- result[i]=(item.Close==item.Open? 1:0);
477
- }
478
-
479
- return result;
480
- }
481
-
482
- this.GetIsUp=function()
483
- {
484
- var result=[];
485
- for(var i=0; i<this.Data.length; ++i)
486
- {
487
- var item=this.Data[i];
488
- result[i]=(item.Close>item.Open? 1:0);
489
- }
490
-
491
- return result;
492
- }
493
-
494
- this.GetIsDown=function()
495
- {
496
- var result=[];
497
- for(var i=0; i<this.Data.length; ++i)
498
- {
499
- var item=this.Data[i];
500
- result[i]=(item.Close<item.Open? 1:0);
501
- }
502
-
503
- return result;
504
- }
505
-
506
- //获取数据日期和时间范围
507
- this.GetDateRange=function()
508
- {
509
- if (!this.Data || this.Data.length<=0) return null;
510
-
511
- var start=this.Data[0];
512
- var end=this.Data[this.Data.length-1];
513
- var range={ Start:{Date:start.Date}, End:{Date:end.Date} };
514
- if (ChartData.IsNumber(start.Time)) range.Start.Time=start.Time;
515
- if (ChartData.IsNumber(end.Time)) range.End.Time=end.Time;
516
-
517
- return range;
518
- }
519
-
520
-
521
- this.GetDateIndex = function (data) //日期转化 对应数据索引
522
- {
523
- for (var i = 0, j = 0; i < this.Data.length;)
524
- {
525
- var date = this.Data[i].Date;
526
-
527
- if (j >= data.length) break;
528
-
529
- var dateItem = data[j];
530
-
531
- if (dateItem.Date == date)
532
- {
533
- dateItem.Index = i;
534
- ++j;
535
- }
536
- else if (dateItem.Date < date)
537
- {
538
- ++j;
539
- }
540
- else
541
- {
542
- ++i;
543
- }
544
- }
545
- }
546
-
547
-
548
- this.GetDateTimeIndex = function (data) //日期 时间转化 对应数据索引
549
- {
550
- for (var i = 0, j = 0; i < this.Data.length;)
551
- {
552
- var date = this.Data[i].Date;
553
- var time = this.Data[i].Time;
554
-
555
- if (j >= data.length) break;
556
-
557
- var dateTimeItem = data[j];
558
-
559
- if (dateTimeItem.Date == date && dateTimeItem.Time == time)
560
- {
561
- dateTimeItem.Index = i;
562
- ++j;
563
- }
564
- else if (dateTimeItem.Date < date || (dateTimeItem.Date == date && dateTimeItem.Time < time))
565
- {
566
- ++j;
567
- }
568
- else
569
- {
570
- ++i;
571
- }
572
- }
573
- }
574
-
575
- this.GetMinutePeriodData=function(period)
576
- {
577
- if (period > CUSTOM_MINUTE_PERIOD_START && period <= CUSTOM_MINUTE_PERIOD_END)
578
- return this.GetMinuteCustomPeriodData(period - CUSTOM_MINUTE_PERIOD_START);
579
-
580
- var result = [];
581
- var periodDataCount = 5;
582
- if (period == 5)
583
- periodDataCount = 5;
584
- else if (period == 6)
585
- periodDataCount = 15;
586
- else if (period == 7)
587
- periodDataCount = 30;
588
- else if (period == 8)
589
- periodDataCount = 60;
590
- else if (period == 11)
591
- periodDataCount = 120;
592
- else if (period == 12)
593
- periodDataCount = 240;
594
- else
595
- return this.Data;
596
- var bFirstPeriodData = false;
597
- var newData = null;
598
- var preTime = null; //上一次的计算时间
599
- for (var i = 0; i < this.Data.length; )
600
- {
601
- bFirstPeriodData = true;
602
- for (var j = 0; j < periodDataCount && i < this.Data.length; ++i)
603
- {
604
- if (bFirstPeriodData)
605
- {
606
- newData = new HistoryData();
607
- result.push(newData);
608
- bFirstPeriodData = false;
609
- }
610
- var minData = this.Data[i];
611
- if (minData == null)
612
- {
613
- ++j;
614
- continue;
615
- }
616
- if (minData.Time == 925 && (preTime == null || preTime != 924)) //9:25, 9:30 不连续就不算个数
617
- {
618
- }
619
- else if (minData.Time == 930 && (preTime == null || preTime != 929))
620
- {
621
- }
622
- else if (minData.Time == 1300 && (preTime == null || preTime != 1259)) //1点的数据 如果不是连续的 就不算个数
623
- {
624
-
625
- }
626
- else
627
- ++j;
628
- newData.Date = minData.Date;
629
- newData.Time = minData.Time;
630
- preTime = newData.Time;
631
- if (minData.Open==null || minData.Close==null)
632
- continue;
633
- if (newData.Open==null || newData.Close==null)
634
- {
635
- newData.Open=minData.Open;
636
- newData.High=minData.High;
637
- newData.Low=minData.Low;
638
- newData.YClose=minData.YClose;
639
- newData.Close=minData.Close;
640
- newData.Vol=minData.Vol;
641
- newData.Amount=minData.Amount;
642
- newData.Position = minData.Position;
643
- newData.FlowCapital = minData.FlowCapital;
644
- }
645
- else
646
- {
647
- if (newData.High<minData.High)
648
- newData.High=minData.High;
649
- if (newData.Low>minData.Low)
650
- newData.Low=minData.Low;
651
- newData.Close=minData.Close;
652
- newData.Vol+=minData.Vol;
653
- newData.Amount+=minData.Amount;
654
- newData.Position = minData.Position;
655
- newData.FlowCapital = minData.FlowCapital;
656
- }
657
-
658
- if (i + 1 < this.Data.length) //判断下一个数据是否是不同日期的
659
- {
660
- var nextItem = this.Data[i + 1];
661
- if (nextItem && nextItem.Date != minData.Date) //不同日期的, 周期结束
662
- {
663
- ++i;
664
- break;
665
- }
666
- }
667
- }
668
- }
669
- return result;
670
- }
671
-
672
- //自定义分钟
673
- this.GetMinuteCustomPeriodData = function (count)
674
- {
675
- var result = new Array();
676
- var periodDataCount = count;
677
- var bFirstPeriodData = false;
678
- var newData = null;
679
- for (var i = 0; i < this.Data.length;)
680
- {
681
- bFirstPeriodData = true;
682
- for (var j = 0; j < periodDataCount && i < this.Data.length; ++i, ++j)
683
- {
684
- if (bFirstPeriodData)
685
- {
686
- newData = new HistoryData();
687
- result.push(newData);
688
- bFirstPeriodData = false;
689
- }
690
- var minData = this.Data[i];
691
- if (minData == null) continue;
692
-
693
- newData.Date = minData.Date;
694
- newData.Time = minData.Time;
695
- if (minData.Open == null || minData.Close == null) continue;
696
- if (newData.Open == null || newData.Close == null)
697
- {
698
- newData.Open = minData.Open;
699
- newData.High = minData.High;
700
- newData.Low = minData.Low;
701
- newData.YClose = minData.YClose;
702
- newData.Close = minData.Close;
703
- newData.Vol = minData.Vol;
704
- newData.Amount = minData.Amount;
705
- newData.FlowCapital = minData.FlowCapital;
706
- newData.Position = minData.Position;
707
- }
708
- else
709
- {
710
- if (newData.High < minData.High) newData.High = minData.High;
711
- if (newData.Low > minData.Low) newData.Low = minData.Low;
712
- newData.Close = minData.Close;
713
- newData.Vol += minData.Vol;
714
- newData.Amount += minData.Amount;
715
- newData.FlowCapital = minData.FlowCapital;
716
- newData.Position = minData.Position;
717
- }
718
- }
719
- }
720
- return result;
721
- }
722
-
723
- this.GetDayPeriodData=function(period)
724
- {
725
- if (period > CUSTOM_DAY_PERIOD_START && period <= CUSTOM_DAY_PERIOD_END) //自定义周期
726
- return this.GetDayCustomPeriodData(period - CUSTOM_DAY_PERIOD_START);
727
-
728
- var isBit = MARKET_SUFFIX_NAME.IsBIT(this.Symbol);
729
- var result=[];
730
- var index=0;
731
- var startDate=0;
732
- var weekCount = 2;
733
- var newData=null;
734
- for(var i in this.Data)
735
- {
736
- var isNewData=false;
737
- var dayData=this.Data[i];
738
-
739
- switch(period)
740
- {
741
- case 1: //周线
742
- if (isBit) var fridayDate = ChartData.GetSunday(dayData.Date);
743
- else var fridayDate=ChartData.GetFirday(dayData.Date);
744
- if (fridayDate!=startDate)
745
- {
746
- isNewData=true;
747
- startDate=fridayDate;
748
- }
749
- break;
750
- case 21: //双周
751
- if (isBit) var fridayDate = ChartData.GetSunday(dayData.Date);
752
- else var fridayDate = ChartData.GetFirday(dayData.Date);
753
- if (fridayDate != startDate)
754
- {
755
- ++weekCount;
756
- if (weekCount >= 2)
757
- {
758
- isNewData = true;
759
- weekCount = 0;
760
- }
761
- startDate = fridayDate;
762
- }
763
- break;
764
- case 2: //月线
765
- if (parseInt(dayData.Date/100)!=parseInt(startDate/100))
766
- {
767
- isNewData=true;
768
- startDate=dayData.Date;
769
- }
770
- break;
771
- case 3: //年线
772
- if (parseInt(dayData.Date/10000)!=parseInt(startDate/10000))
773
- {
774
- isNewData=true;
775
- startDate=dayData.Date;
776
- }
777
- break;
778
- case 9: //季线
779
- var now = ChartData.GetQuarter(dayData.Date);
780
- now = parseInt(dayData.Date / 10000) * 10 + now;
781
- var last = ChartData.GetQuarter(startDate);
782
- last = parseInt(startDate / 10000) * 10 + last;
783
- if (now != last)
784
- {
785
- isNewData = true;
786
- startDate = dayData.Date;
787
- }
788
- break;
789
- }
790
-
791
- if (isNewData)
792
- {
793
- newData=new HistoryData();
794
- newData.Date=dayData.Date;
795
- result.push(newData);
796
-
797
- if (dayData.Open==null || dayData.Close==null) continue;
798
-
799
- newData.Open=dayData.Open;
800
- newData.High=dayData.High;
801
- newData.Low=dayData.Low;
802
- newData.YClose=dayData.YClose;
803
- newData.Close=dayData.Close;
804
- newData.Vol=dayData.Vol;
805
- newData.Amount=dayData.Amount;
806
- newData.FlowCapital = dayData.FlowCapital;
807
- newData.Position = dayData.Position;
808
- }
809
- else
810
- {
811
- if (newData==null) continue;
812
- if (dayData.Open==null || dayData.Close==null) continue;
813
-
814
- if (newData.Open==null || newData.Close==null)
815
- {
816
- newData.Open=dayData.Open;
817
- newData.High=dayData.High;
818
- newData.Low=dayData.Low;
819
- newData.YClose=dayData.YClose;
820
- newData.Close=dayData.Close;
821
- newData.Vol=dayData.Vol;
822
- newData.Amount=dayData.Amount;
823
- newData.FlowCapital = dayData.FlowCapital;
824
- newData.Position = dayData.Position;
825
- }
826
- else
827
- {
828
- if (newData.High<dayData.High) newData.High=dayData.High;
829
- if (newData.Low>dayData.Low) newData.Low=dayData.Low;
830
-
831
- newData.Close=dayData.Close;
832
- newData.Vol+=dayData.Vol;
833
- newData.Amount+=dayData.Amount;
834
- newData.Date=dayData.Date;
835
- newData.FlowCapital = dayData.FlowCapital;
836
- newData.Position = dayData.Position;
837
- }
838
- }
839
- }
840
-
841
- return result;
842
- }
843
-
844
- this.GetDayCustomPeriodData = function (count) //自定义日线周期
845
- {
846
- var result = [];
847
- var periodDataCount = count;
848
- var bFirstPeriodData = false;
849
- var newData = null;
850
- for (var i = 0; i < this.Data.length;)
851
- {
852
- bFirstPeriodData = true;
853
- for (var j = 0; j < periodDataCount && i < this.Data.length; ++i, ++j)
854
- {
855
- if (bFirstPeriodData)
856
- {
857
- newData = new HistoryData();
858
- result.push(newData);
859
- bFirstPeriodData = false;
860
- }
861
- var dayData = this.Data[i];
862
- if (dayData == null) continue;
863
-
864
- newData.Date = dayData.Date;
865
-
866
- if (dayData.Open == null || dayData.Close == null) continue;
867
- if (newData.Open == null || newData.Close == null)
868
- {
869
- newData.Open = dayData.Open;
870
- newData.High = dayData.High;
871
- newData.Low = dayData.Low;
872
- newData.YClose = dayData.YClose;
873
- newData.Close = dayData.Close;
874
- newData.Vol = dayData.Vol;
875
- newData.Amount = dayData.Amount;
876
- newData.FlowCapital = dayData.FlowCapital;
877
- newData.Position = dayData.Position;
878
- }
879
- else
880
- {
881
- if (newData.High < dayData.High) newData.High = dayData.High;
882
- if (newData.Low > dayData.Low) newData.Low = dayData.Low;
883
- newData.Close = dayData.Close;
884
- newData.Vol += dayData.Vol;
885
- newData.Amount += dayData.Amount;
886
- newData.Position = dayData.Position;
887
- newData.FlowCapital = dayData.FlowCapital;
888
- }
889
- }
890
- }
891
- return result;
892
- }
893
-
894
- //周期数据 1=周 2=月 3=年 9=季
895
- this.GetPeriodData=function(period)
896
- {
897
- //外部自定义周期计算函数
898
- var itemCallback=g_DataPlus.GetPeriodCallback(period);
899
- if (itemCallback) return itemCallback.Callback(period,this.Data,this);
900
-
901
- //if (period == 1 || period == 2 || period == 3 || period == 9 || period == 21 || (period > CUSTOM_DAY_PERIOD_START && period <= CUSTOM_DAY_PERIOD_END))
902
- if (ChartData.IsDayPeriod(period,false))
903
- return this.GetDayPeriodData(period);
904
-
905
- //if (period == 5 || period == 6 || period == 7 || period == 8 || period == 11 || period == 12 ||(period > CUSTOM_MINUTE_PERIOD_START && period <= CUSTOM_MINUTE_PERIOD_END))
906
- if (ChartData.IsMinutePeriod(period,false))
907
- return this.GetMinutePeriodData(period);
908
- }
909
-
910
- //复权 0 不复权 1 前复权 2 后复权 option={ AlgorithmType:1 复权系数模式 }
911
- this.GetRightData=function(right, option)
912
- {
913
- var result=[];
914
- if (this.Data.length<=0) return result;
915
-
916
- if (option && option.AlgorithmType==1) //使用复权因子计算
917
- {
918
- for(var i=0;i<this.Data.length;++i)
919
- {
920
- var item=this.Data[i];
921
- var seed=(right==1?item.BFactor:item.AFactor);
922
- result[i]=HistoryData.CopyRight(item,seed);
923
- }
924
-
925
- return result;
926
- }
927
-
928
- if (right==1)
929
- {
930
- var index=this.Data.length-1;
931
- var seed=1; //复权系数
932
- var yClose=this.Data[index].YClose;
933
-
934
- result[index]=HistoryData.Copy(this.Data[index]);
935
-
936
- for(--index; index>=0; --index)
937
- {
938
- if (yClose!=this.Data[index].Close) break;
939
- result[index]=HistoryData.Copy(this.Data[index]);
940
- yClose=this.Data[index].YClose;
941
- }
942
-
943
- for(; index>=0; --index)
944
- {
945
- if(yClose!=this.Data[index].Close)
946
- seed *= yClose/this.Data[index].Close;
947
-
948
- result[index]=HistoryData.CopyRight(this.Data[index],seed);
949
-
950
- yClose=this.Data[index].YClose;
951
- }
952
- }
953
- else if (right==2)
954
- {
955
- var index=0;
956
- var seed=1;
957
- var close=this.Data[index].Close;
958
- result[index]=HistoryData.Copy(this.Data[index]);
959
-
960
- for(++index;index<this.Data.length;++index)
961
- {
962
- if (close!=this.Data[index].YClose) break;
963
- result[index]=HistoryData.Copy(this.Data[index]);
964
- close=this.Data[index].Close;
965
- }
966
-
967
- for(;index<this.Data.length;++index)
968
- {
969
- if(close!=this.Data[index].YClose)
970
- seed *= close/this.Data[index].YClose;
971
-
972
- result[index]=HistoryData.CopyRight(this.Data[index],seed);
973
-
974
- close=this.Data[index].Close;
975
- }
976
- }
977
-
978
- return result;
979
- }
980
-
981
- this.GetRightDate=this.GetRightData;
982
-
983
- //叠加数据和主数据拟合,去掉主数据没有日期的数据
984
- this.GetOverlayData=function(overlayData)
985
- {
986
- var result=[];
987
-
988
- for(var i=0,j=0;i<this.Data.length;)
989
- {
990
- var date=this.Data[i].Date;
991
-
992
- if (j>=overlayData.length)
993
- {
994
- result[i]=new HistoryData();
995
- result[i].Date=date;
996
- ++i;
997
- continue;;
998
- }
999
-
1000
- var overlayDate=overlayData[j].Date;
1001
-
1002
- if (overlayDate==date)
1003
- {
1004
- result[i]=new HistoryData();
1005
- result[i].Date=overlayData[j].Date;
1006
- result[i].YClose=overlayData[j].YClose;
1007
- result[i].Open=overlayData[j].Open;
1008
- result[i].High=overlayData[j].High;
1009
- result[i].Low=overlayData[j].Low;
1010
- result[i].Close=overlayData[j].Close;
1011
- result[i].Vol=overlayData[j].Vol;
1012
- result[i].Amount=overlayData[j].Amount;
1013
-
1014
- //涨跌家数数据
1015
- result[i].Stop = overlayData[j].Stop;
1016
- result[i].Up = overlayData[j].Up;
1017
- result[i].Down = overlayData[j].Down;
1018
- result[i].Unchanged = overlayData[j].Unchanged;
1019
-
1020
- ++j;
1021
- ++i;
1022
- }
1023
- else if (overlayDate<date)
1024
- {
1025
- ++j;
1026
- }
1027
- else
1028
- {
1029
- result[i]=new HistoryData();
1030
- result[i].Date=date;
1031
- ++i;
1032
- }
1033
- }
1034
-
1035
- return result;
1036
- }
1037
-
1038
-
1039
- /*
1040
- 技术指标数据方法
1041
- */
1042
- //以主图数据 拟合,返回 SingleData 数组
1043
- this.GetFittingData=function(overlayData)
1044
- {
1045
- var result=new Array();
1046
-
1047
- for(var i=0,j=0;i<this.Data.length;)
1048
- {
1049
- var date=this.Data[i].Date;
1050
-
1051
- if (j>=overlayData.length)
1052
- {
1053
- result[i]=null;
1054
- ++i;
1055
- continue;;
1056
- }
1057
-
1058
- var overlayDate=overlayData[j].Date;
1059
-
1060
- if (overlayDate==date)
1061
- {
1062
- var item=new SingleData();
1063
- item.Date=overlayData[j].Date;
1064
- item.Value=overlayData[j].Value;
1065
- result[i]=item;
1066
- ++j;
1067
- ++i;
1068
- }
1069
- else if (overlayDate<date)
1070
- {
1071
- ++j;
1072
- }
1073
- else
1074
- {
1075
- result[i]=new SingleData();
1076
- result[i].Date=date;
1077
- ++i;
1078
- }
1079
- }
1080
-
1081
- return result;
1082
- }
1083
-
1084
- // 缺省数据使用 emptyValue填充
1085
- this.GetFittingData2 = function (overlayData, emptyValue)
1086
- {
1087
- var result = new Array();
1088
-
1089
- for (var i = 0, j = 0; i < this.Data.length;)
1090
- {
1091
- var date = this.Data[i].Date;
1092
-
1093
- if (j >= overlayData.length)
1094
- {
1095
- result[i] = new SingleData();
1096
- result[i].Date = date;
1097
- result[i].Value = emptyValue;
1098
- ++i;
1099
- continue;;
1100
- }
1101
-
1102
- var overlayDate = overlayData[j].Date;
1103
-
1104
- if (overlayDate == date)
1105
- {
1106
- var item = new SingleData();
1107
- item.Date = overlayData[j].Date;
1108
- item.Value = overlayData[j].Value;
1109
- result[i] = item;
1110
- ++j;
1111
- ++i;
1112
- }
1113
- else if (overlayDate < date)
1114
- {
1115
- ++j;
1116
- }
1117
- else
1118
- {
1119
- result[i] = new SingleData();
1120
- result[i].Date = date;
1121
- result[i].Value = emptyValue;
1122
- ++i;
1123
- }
1124
- }
1125
-
1126
- return result;
1127
- }
1128
-
1129
-
1130
- this.GetMinuteFittingData = function (overlayData) // 分钟数据拟合
1131
- {
1132
- var result = [];
1133
- for (var i = 0, j = 0; i < this.Data.length;)
1134
- {
1135
- var date = this.Data[i].Date;
1136
- var time = this.Data[i].Time;
1137
-
1138
- if (j >= overlayData.length)
1139
- {
1140
- result[i] = null;
1141
- ++i;
1142
- continue;;
1143
- }
1144
-
1145
- var overlayDate = overlayData[j].Date;
1146
- var overlayTime = overlayData[j].Time;
1147
- const overlayItem = overlayData[j];
1148
-
1149
- if (overlayDate == date && overlayTime == time)
1150
- {
1151
- var item = new SingleData();
1152
- item.Date = overlayItem.Date;
1153
- item.Time = overlayItem.Time;
1154
- item.Value = overlayItem.Value;
1155
- result[i] = item;
1156
- ++j;
1157
- ++i;
1158
- }
1159
- else if (overlayDate < date || (overlayDate == date && overlayTime < time))
1160
- {
1161
- ++j;
1162
- }
1163
- else
1164
- {
1165
- var item = new SingleData();
1166
- item.Date = date;
1167
- item.Time = time;
1168
- result[i] = item;
1169
- ++i;
1170
- }
1171
- }
1172
-
1173
- return result;
1174
- }
1175
-
1176
- //把财报数据拟合到主图数据,返回 SingleData 数组
1177
- this.GetFittingFinanceData = function (financeData)
1178
- {
1179
- var result = [];
1180
-
1181
- for (var i = 0, j = 0; i < this.Data.length;)
1182
- {
1183
- var date = this.Data[i].Date;
1184
-
1185
- if (j<financeData.length)
1186
- {
1187
- var fDate=financeData[j].Date;
1188
- if (date<fDate)
1189
- {
1190
- ++i;
1191
- continue;
1192
- }
1193
- }
1194
-
1195
- if (j + 1 < financeData.length)
1196
- {
1197
- if (financeData[j].Date < date && financeData[j + 1].Date <= date)
1198
- {
1199
- ++j;
1200
- continue;
1201
- }
1202
- }
1203
-
1204
- var item = new SingleData();
1205
- item.Date = date;
1206
- item.Value = financeData[j].Value;
1207
- item.FinanceDate = financeData[j].Date; //财务日期 调试用
1208
- result[i] = item;
1209
-
1210
- ++i;
1211
- }
1212
-
1213
- return result;
1214
- }
1215
-
1216
- //财务数据拟合到分钟数据上 返回 SingleData 数组
1217
- this.GetMinuteFittingFinanceData=function(financeData)
1218
- {
1219
- var result=[];
1220
- if (!Array.isArray(financeData) || financeData.length<=0) return result;
1221
-
1222
- var i=0;
1223
- var firstItem=financeData[0];
1224
- for(i=0;i<this.Data.length;++i)
1225
- {
1226
- var date=this.Data[i].Date;
1227
- var time=this.Data[i].Time;
1228
- if (date>firstItem.Date || (date==firstItem.Date && time>=firstItem.Time))
1229
- {
1230
- break;
1231
- }
1232
- }
1233
-
1234
- for(var j=0;i<this.Data.length;)
1235
- {
1236
- var date=this.Data[i].Date;
1237
- var time=this.Data[i].Time;
1238
-
1239
- if (j+1<financeData.length)
1240
- {
1241
- if ((financeData[j].Date<date && financeData[j+1].Date<=date) ||
1242
- (financeData[j].Date==date && financeData[j].Time<time && financeData[j+1].Time<=time) )
1243
- {
1244
- ++j;
1245
- continue;
1246
- }
1247
- }
1248
-
1249
- var item=new SingleData();
1250
- item.Date=date;
1251
- item.Time=time;
1252
- if (j<financeData.length)
1253
- {
1254
- item.Value=financeData[j].Value;
1255
- item.FinanceDate=financeData[j].Date; //财务日期 调试用
1256
- item.FinanceTime=financeData[j].Time; //财务日期 调试用
1257
- }
1258
- else
1259
- {
1260
- item.Value=null;
1261
- item.FinanceDate=null;
1262
- item.FinanceTime=null;
1263
- }
1264
- result[i]=item;
1265
-
1266
- ++i;
1267
- }
1268
-
1269
- return result;
1270
- }
1271
-
1272
- //市值计算 financeData.Value 是股数
1273
- this.GetFittingMarketValueData = function (financeData)
1274
- {
1275
- var result = [];
1276
-
1277
- for (var i = 0, j = 0; i < this.Data.length;)
1278
- {
1279
- var date = this.Data[i].Date;
1280
- var price = this.Data[i].Close;
1281
-
1282
- if (j + 1 < financeData.length)
1283
- {
1284
- if (financeData[j].Date < date && financeData[j + 1].Date <= date)
1285
- {
1286
- ++j;
1287
- continue;
1288
- }
1289
- }
1290
-
1291
- var item = new SingleData();
1292
- item.Date = date;
1293
- item.Value = financeData[j].Value * price; //市值计算 收盘价*股数
1294
- item.FinanceDate = financeData[j].Date; //财务日期 调试用
1295
- result[i] = item;
1296
-
1297
- ++i;
1298
- }
1299
-
1300
- return result;
1301
- }
1302
-
1303
- //月线数据拟合
1304
- this.GetFittingMonthData = function (overlayData) {
1305
- var result = new Array();
1306
-
1307
- var preDate = null;
1308
- for (var i = 0, j = 0; i < this.Data.length;) {
1309
- var date = this.Data[i].Date;
1310
-
1311
- if (j >= overlayData.length) {
1312
- result[i] = null;
1313
- ++i;
1314
- continue;;
1315
- }
1316
-
1317
- var overlayDate = overlayData[j].Date;
1318
-
1319
- if (overlayDate == date) {
1320
- var item = new SingleData();
1321
- item.Date = overlayData[j].Date;
1322
- item.Value = overlayData[j].Value;
1323
- item.Text = overlayData[j].Text;
1324
- result[i] = item;
1325
- ++j;
1326
- ++i;
1327
- }
1328
- else if (preDate != null && preDate < overlayDate && date > overlayDate) {
1329
- var item = new SingleData();
1330
- item.Date = date;
1331
- item.OverlayDate = overlayData[j].Date;
1332
- item.Value = overlayData[j].Value;
1333
- item.Text = overlayData[j].Text;
1334
- result[i] = item;
1335
- ++j;
1336
- ++i;
1337
- }
1338
- else if (overlayDate < date) {
1339
- ++j;
1340
- }
1341
- else {
1342
- result[i] = new SingleData();
1343
- result[i].Date = date;
1344
- ++i;
1345
- }
1346
-
1347
- preDate = date;
1348
- }
1349
-
1350
- return result;
1351
- }
1352
-
1353
-
1354
- this.GetValue=function()
1355
- {
1356
- var result=new Array();
1357
- for(var i in this.Data)
1358
- {
1359
- if (this.Data[i]==null || this.Data[i].Value == null)
1360
- {
1361
- result[i] = null;
1362
- }
1363
- else
1364
- {
1365
- // console.log(this.Data[i].Value);
1366
- // console.log(i);
1367
- if (!isNaN(this.Data[i].Value))
1368
- result[i] = this.Data[i].Value;
1369
- else if (this.Data[i].Value instanceof Array) //支持数组
1370
- result[i] = this.Data[i].Value;
1371
- else
1372
- result[i] = null;
1373
- }
1374
- }
1375
-
1376
- return result;
1377
- }
1378
-
1379
- this.GetObject=function()
1380
- {
1381
- var result=[];
1382
- for(var i in this.Data)
1383
- {
1384
- if (this.Data[i] && this.Data[i].Value)
1385
- {
1386
- var item=this.Data[i].Value;
1387
- result[i]=item;
1388
- }
1389
- else
1390
- result[i]=null;
1391
- }
1392
-
1393
- return result;
1394
- }
1395
-
1396
- this.GetPeriodSingleData=function(period)
1397
- {
1398
- var result=new Array();
1399
- var index=0;
1400
- var startDate=0;
1401
- var newData=null;
1402
- for(var i in this.Data)
1403
- {
1404
- var isNewData=false;
1405
- var dayData=this.Data[i];
1406
- if (dayData==null || dayData.Date==null) continue;
1407
-
1408
- switch(period)
1409
- {
1410
- case 1: //周线
1411
- var fridayDate=ChartData.GetFirday(dayData.Date);
1412
- if (fridayDate!=startDate)
1413
- {
1414
- isNewData=true;
1415
- startDate=fridayDate;
1416
- }
1417
- break;
1418
- case 2: //月线
1419
- if (parseInt(dayData.Date/100)!=parseInt(startDate/100))
1420
- {
1421
- isNewData=true;
1422
- startDate=dayData.Date;
1423
- }
1424
- break;
1425
- case 3: //年线
1426
- if (parseInt(dayData.Date/10000)!=parseInt(startDate/10000))
1427
- {
1428
- isNewData=true;
1429
- startDate=dayData.Date;
1430
- }
1431
- break;
1432
- }
1433
-
1434
- if (isNewData)
1435
- {
1436
- newData=new SingleData();
1437
- newData.Date=dayData.Date;
1438
- newData.Value=dayData.Value;
1439
- result.push(newData);
1440
- }
1441
- else
1442
- {
1443
- if (newData==null) continue;
1444
- if (dayData.Value==null || isNaN(dayData.Value)) continue;
1445
- if (newData.Value==null || isNaN(newData.Value)) newData.Value=dayData.Value;
1446
- }
1447
- }
1448
-
1449
- return result;
1450
- }
1451
-
1452
- /*
1453
- 分钟数据方法
1454
- this.GetClose() 每分钟价格
1455
- this.GetVol() 每分钟成交量
1456
- */
1457
-
1458
- //分钟均线
1459
- this.GetMinuteAvPrice=function()
1460
- {
1461
- var result=new Array();
1462
- for(var i in this.Data)
1463
- {
1464
- result[i]=this.Data[i].AvPrice;
1465
- }
1466
-
1467
- return result;
1468
- }
1469
-
1470
- this.MergeMinuteData = function (data) //合并数据
1471
- {
1472
- if (!this.Data || this.Data.length<=0)
1473
- {
1474
- this.Data=data;
1475
- return true;
1476
- }
1477
-
1478
- var sourceFirstItem = this.Data[0];
1479
- var firstItemID = 0;
1480
- var firstItem = null;
1481
- for (var i = 0; i < data.length; ++i) //查找比原始数据起始位置大的数据位置
1482
- {
1483
- var item = data[i];
1484
- if (item.Date >sourceFirstItem.Date)
1485
- {
1486
- firstItemID = i;
1487
- firstItem = item;
1488
- break;
1489
- }
1490
-
1491
- if (item.Date == sourceFirstItem.Date && item.Time >= sourceFirstItem.Time)
1492
- {
1493
- firstItemID = i;
1494
- firstItem = item;
1495
- break;
1496
- }
1497
- }
1498
- if (firstItem == null) return false;
1499
-
1500
- var index = null;
1501
- var bFind = false; //第1个数据是否完全匹配
1502
- for (var i = this.Data.length - 1; i >= 0; --i)
1503
- {
1504
- var date = this.Data[i].Date;
1505
- var time = this.Data[i].Time;
1506
-
1507
- if (firstItem.Date > date || (firstItem.Date == date && firstItem.Time >= time) )
1508
- {
1509
- index = i;
1510
- if (firstItem.Date == date && firstItem.Time == time) bFind = true;
1511
- break;
1512
- }
1513
- }
1514
-
1515
- if (index == null) return false;
1516
- var j = index;
1517
- var i = firstItemID;
1518
- if (bFind == true) //第1个数据匹配,覆盖
1519
- {
1520
- var item = data[i];
1521
- if (j - 1 > 0 && !item.YClose) item.YClose = this.Data[j - 1].Close; //前收盘如果没有就是上一记录的收盘
1522
- var newItem = HistoryData.Copy(item);
1523
- this.Data[j] = newItem;
1524
- ++j;
1525
- ++i;
1526
- }
1527
- else
1528
- {
1529
- ++j;
1530
- }
1531
-
1532
- for (; i < data.length;)
1533
- {
1534
- var item = data[i];
1535
- if (j >= this.Data.length - 1)
1536
- {
1537
- if (j - 1 > 0 && !item.YClose) item.YClose = this.Data[j - 1].YClose; //前收盘如果没有就是上一记录的收盘
1538
- var newItem = HistoryData.Copy(item);
1539
- this.Data[j] = newItem;
1540
- ++j;
1541
- ++i;
1542
- }
1543
- else
1544
- {
1545
- var oldItem = this.Data[j];
1546
- if (oldItem.Date == item.Date && oldItem.Time == item.Time) //更新数据
1547
- {
1548
- HistoryData.CopyTo(oldItem, item);
1549
- ++j;
1550
- ++i;
1551
- }
1552
- else
1553
- {
1554
- ++j;
1555
- }
1556
- }
1557
- }
1558
-
1559
- //console.log('[ChartData::MergeMinuteData] ', this.Data, data);
1560
- return true;
1561
- }
1562
-
1563
- //拟合其他K线数据指标
1564
- this.FitKLineIndex=function(kLineData, outVar, peirod, indexPeriod)
1565
- {
1566
- var count=this.Data.length; //原始K线数据
1567
- var indexCount=kLineData.length; //拟合K线数据
1568
- var isMinutePeriod=[ChartData.IsMinutePeriod(peirod,true), ChartData.IsMinutePeriod(indexPeriod,true) ]; //0=原始K线 1=需要拟合的K线
1569
- var isDayPeriod=[ChartData.IsDayPeriod(peirod,true), ChartData.IsDayPeriod(indexPeriod,true) ]; //0=原始K线 1=需要拟合的K线
1570
- var firstItem=ChartData.GetKLineDataTime(this.Data[0]);
1571
-
1572
- //计算拟合以后的数据索引
1573
- var aryFixDataID=[];
1574
- var indexStart=indexCount;
1575
- for(var i=0;i<indexCount;++i)
1576
- {
1577
- var item=ChartData.GetKLineDataTime(kLineData[i]);
1578
-
1579
- if ( (isDayPeriod[0] && isDayPeriod[1]) || (isMinutePeriod[0] && isDayPeriod[1]) ) //日线(拟合) => 日线(原始) 日线(拟合 => 分钟(原始)
1580
- {
1581
- if (item.Date>=firstItem.Date)
1582
- {
1583
- indexStart = i;
1584
- break;
1585
- }
1586
- }
1587
- else if (isMinutePeriod[0] && isMinutePeriod[1]) //分钟(拟合 => 分钟(原始)
1588
- {
1589
- if (item.Date>firstItem.Date)
1590
- {
1591
- indexStart = i;
1592
- break;
1593
- }
1594
-
1595
- if (item.Date == firstItem.Date && item.Time >= firstItem.Time )
1596
- {
1597
- indexStart = i;
1598
- break;
1599
- }
1600
- }
1601
- }
1602
-
1603
- for(var i=0, j=indexStart; i<count; )
1604
- {
1605
- var item=ChartData.GetKLineDataTime(this.Data[i]);
1606
- if (j>=indexCount)
1607
- {
1608
- var fitItem={ Date:item.Date, Time:item.Time, Index:-1 };
1609
- aryFixDataID[i]=fitItem;
1610
- ++i;
1611
- continue;
1612
- }
1613
-
1614
- var destItem=ChartData.GetKLineDataTime(kLineData[j]);
1615
- if ( (isDayPeriod[0] && isDayPeriod[1]) || (isMinutePeriod[0] && isDayPeriod[1]) ) //日线(拟合) => 日线(原始) 日线(拟合 => 分钟(原始)
1616
- {
1617
- if (destItem.Date == item.Date)
1618
- {
1619
- var fitItem={ Date:item.Date, Time:item.Time, Index:j, Data2:destItem.Date, Time2:destItem.Time };
1620
- aryFixDataID[i]=fitItem;
1621
- ++i;
1622
- }
1623
- else
1624
- {
1625
- if (j+1<indexCount)
1626
- {
1627
- var nextDestItem=ChartData.GetKLineDataTime(kLineData[j+1]);
1628
- if ( destItem.Date<=item.Date && nextDestItem.Date>item.Date )
1629
- {
1630
- var fitItem={ Date:item.Date, Time:item.Time, Index:j+1, Data2:nextDestItem.Date, Time2:nextDestItem.Time };
1631
- aryFixDataID[i]=fitItem;
1632
- ++i;
1633
- }
1634
- else if (nextDestItem.Date <= item.Date )
1635
- {
1636
- ++j;
1637
- }
1638
- else
1639
- {
1640
- var fitItem={ Date:item.Date, Time:item.Time, Index:-1 };
1641
- aryFixDataID[i]=fitItem;
1642
- ++i;
1643
- }
1644
- }
1645
- else
1646
- {
1647
- ++j;
1648
- }
1649
- }
1650
- }
1651
- else if (isMinutePeriod[0] && isMinutePeriod[1]) //分钟(拟合 => 分钟(原始)
1652
- {
1653
- if (destItem.Date == item.Date && destItem.Time == item.Time)
1654
- {
1655
- var fitItem={ Date:item.Date, Time:item.Time, Index:j, Data2:destItem.Date, Time2:destItem.Time };
1656
- aryFixDataID[i]=fitItem;
1657
- ++i;
1658
- }
1659
- else
1660
- {
1661
- if (j+1<indexCount)
1662
- {
1663
- var nextDestItem=ChartData.GetKLineDataTime(kLineData[j+1]);
1664
- if ( (destItem.Date<item.Date && nextDestItem.Date>item.Date) ||
1665
- (destItem.Date == item.Date && destItem.Time < item.Time && nextDestItem.Date == item.Date && nextDestItem.Time > item.Time) ||
1666
- (destItem.Date == item.Date && destItem.Time < item.Time && nextDestItem.Date > item.Date) ||
1667
- (destItem.Date < item.Date && nextDestItem.Date == item.Date && nextDestItem.Time > item.Time) )
1668
- {
1669
- var fitItem={ Date:item.Date, Time:item.Time, Index:j+1, Data2:nextDestItem.Date, Time2:nextDestItem.Time };
1670
- aryFixDataID[i]=fitItem;
1671
- ++i;
1672
- }
1673
- else if (nextDestItem.Date < item.Date || (nextDestItem.Date == item.Date && nextDestItem.Time <= item.Time) )
1674
- {
1675
- ++j;
1676
- }
1677
- else
1678
- {
1679
- var fitItem={ Date:item.Date, Time:item.Time, Index:-1 };
1680
- aryFixDataID[i]=fitItem;
1681
- ++i;
1682
- }
1683
- }
1684
- else
1685
- {
1686
- ++j;
1687
- }
1688
- }
1689
- }
1690
- }
1691
-
1692
- //拟合数据
1693
- var result=[];
1694
- for(var i in outVar)
1695
- {
1696
- var item=outVar[i];
1697
- if (Array.isArray(item.Data))
1698
- {
1699
- var data=[];
1700
- result[i]={ Data:data, Name:item.Name } ;
1701
- for(var j=0;j<aryFixDataID.length;++j)
1702
- {
1703
- var dataItem=aryFixDataID[j];
1704
- data[j]=null;
1705
- if ( dataItem && dataItem.Index>=0 && dataItem.Index<item.Data.length )
1706
- data[j]=item.Data[dataItem.Index];
1707
- }
1708
- }
1709
- else
1710
- {
1711
- result[i]={ Data:item.Data, Name:item.Name} ;
1712
- }
1713
- }
1714
-
1715
- return result;
1716
- }
1717
-
1718
- //日线拟合交易数据, 不做平滑处理
1719
- this.GetFittingTradeData=function(tradeData, nullValue, bExactMatch)
1720
- {
1721
- var result=[];
1722
- var bMatch=false;
1723
- for(var i=0,j=0;i<this.Data.length;)
1724
- {
1725
- var date=this.Data[i].Date;
1726
- if (j<tradeData.length)
1727
- {
1728
- if (tradeData[j].Date>date)
1729
- {
1730
- var item=new SingleData();
1731
- item.Date=date;
1732
- item.Value=nullValue;
1733
- result[i]=item;
1734
- ++i;
1735
- continue;
1736
- }
1737
- }
1738
-
1739
- if (j+1<tradeData.length)
1740
- {
1741
- if (tradeData[j].Date<date && tradeData[j+1].Date<=date)
1742
- {
1743
- ++j;
1744
- bMatch=false;
1745
- continue;
1746
- }
1747
- }
1748
-
1749
- var item=new SingleData();
1750
- item.Date=date;
1751
- item.Value=nullValue;
1752
- item.FinanceDate=null;
1753
- if (j<tradeData.length)
1754
- {
1755
- var tradeItem=tradeData[j];
1756
- if (this.Period==0 && bExactMatch===true) //日线完全匹配
1757
- {
1758
- if (tradeItem.Date==item.Date)
1759
- {
1760
- item.Value=tradeItem.Value;
1761
- item.FinanceDate=tradeItem.Date; //财务日期 调试用
1762
- bMatch=true;
1763
- }
1764
- }
1765
- else //其他日线周期
1766
- {
1767
- if (bMatch==false)
1768
- {
1769
- item.Value=tradeItem.Value;
1770
- item.FinanceDate=tradeItem.Date; //财务日期 调试用
1771
- bMatch=true;
1772
- }
1773
- }
1774
- }
1775
-
1776
- result[i]=item;
1777
- ++i;
1778
- }
1779
-
1780
- return result;
1781
- }
1782
-
1783
- this.GetMinuteFittingTradeData=function(tradeData, nullValue,bExactMatch)
1784
- {
1785
- var result=[];
1786
- var bMatch=false;
1787
-
1788
- for(var i=0,j=0;i<this.Data.length;)
1789
- {
1790
- var date=this.Data[i].Date;
1791
- var time=this.Data[i].Time;
1792
-
1793
- if (j<tradeData.length)
1794
- {
1795
- if (tradeData[j].Date>date || (tradeData[j].Date==date && tradeData[j].Time>time))
1796
- {
1797
- var item=new SingleData();
1798
- item.Date=date;
1799
- item.Time=time;
1800
- item.Value=nullValue;
1801
- result[i]=item;
1802
- ++i;
1803
- continue;
1804
- }
1805
- }
1806
-
1807
- if (j+1<tradeData.length)
1808
- {
1809
- if ( (tradeData[j].Date<date && tradeData[j+1].Date<=date) ||
1810
- (tradeData[j].Date==date && tradeData[j].Time<time && tradeData[j+1].Time<=time) )
1811
- {
1812
- ++j;
1813
- bMatch=false;
1814
- continue;
1815
- }
1816
- }
1817
-
1818
- var item=new SingleData();
1819
- item.Date=date;
1820
- item.FinanceDate=null;
1821
- item.Time=time;
1822
- item.Value=nullValue;
1823
- if (j<tradeData.length)
1824
- {
1825
- var tradeItem=tradeData[j];
1826
- if (this.Period==4 && bExactMatch===true) //1分钟线完全匹配
1827
- {
1828
- if (tradeItem.Date==item.Date && tradeItem.Time==item.Time) //完全匹配
1829
- {
1830
- item.Value=tradeItem.Value;
1831
- item.FinanceDate=tradeItem.Date; //财务日期 调试用
1832
- item.FinanceTime=tradeItem.Time;
1833
- bMatch=true;
1834
- }
1835
- }
1836
- else //其他日线周期
1837
- {
1838
- if (bMatch==false)
1839
- {
1840
- item.Value=tradeItem.Value;
1841
- item.FinanceDate=tradeItem.Date; //财务日期 调试用
1842
- item.FinanceTime=tradeItem.Time;
1843
- bMatch=true;
1844
- }
1845
- }
1846
- }
1847
-
1848
- result[i]=item;
1849
- ++i;
1850
- }
1851
-
1852
- return result;
1853
- }
1854
-
1855
- }
1856
-
1857
- ChartData.IsNumber=function(value)
1858
- {
1859
- if (value==null) return false;
1860
- if (isNaN(value)) return false;
1861
-
1862
- return true;
1863
- }
1864
-
1865
- ChartData.DateTimeToNumber=function(kItem)
1866
- {
1867
- return kItem.Date*10000+kItem.Time;
1868
- }
1869
-
1870
- ChartData.GetKLineDataTime=function(kLineItem) //获取K线的 日期和时间 如果时间没有就用0
1871
- {
1872
- var result={ Date:kLineItem.Date, Time:0 };
1873
- if (ChartData.IsNumber(kLineItem.Time)) result.Time=kLineItem.Time;
1874
-
1875
- return result;
1876
- }
1877
-
1878
- ChartData.GetFirday=function(value)
1879
- {
1880
- var date=new Date(parseInt(value/10000),(value/100%100-1),value%100);
1881
- var day=date.getDay();
1882
- if (day==5) return value;
1883
-
1884
- var timestamp=date.getTime();
1885
- if (day<5)
1886
- {
1887
- var prevTimestamp=(24*60*60*1000)*(5-day);
1888
- timestamp+=prevTimestamp;
1889
- }
1890
- else
1891
- {
1892
- var prevTimestamp=(24*60*60*1000)*(day-5);
1893
- timestamp-=prevTimestamp;
1894
- }
1895
-
1896
- date.setTime(timestamp);
1897
- var fridayDate= date.getFullYear()*10000+(date.getMonth()+1)*100+date.getDate();
1898
- var week=date.getDay();
1899
- return fridayDate;
1900
- }
1901
-
1902
- ChartData.GetSunday = function (value)
1903
- {
1904
- var date = new Date(parseInt(value / 10000), (value / 100 % 100 - 1), value % 100);
1905
- var day = date.getDay();
1906
- if (day == 0) return value;
1907
-
1908
- var timestamp = date.getTime();
1909
- if (day > 0)
1910
- {
1911
- var prevTimestamp = (24 * 60 * 60 * 1000) * (7 - day);
1912
- timestamp += prevTimestamp;
1913
- }
1914
-
1915
- date.setTime(timestamp);
1916
- var sundayDate = date.getFullYear() * 10000 + (date.getMonth() + 1) * 100 + date.getDate();
1917
- var week = date.getDay();
1918
- return sundayDate;
1919
- }
1920
-
1921
- ChartData.GetQuarter = function (value)
1922
- {
1923
- var month = parseInt(value % 10000 / 100);
1924
- if (month == 1 || month == 2 || month == 3) return 1;
1925
- else if (month == 4 || month == 5 || month == 6) return 2;
1926
- else if (month == 7 || month == 8 || month == 9) return 3;
1927
- else if (month == 10 || month == 11 || month == 12) return 4;
1928
- else return 0;
1929
- }
1930
-
1931
- //是否是日线周期 0=日线 1=周线 2=月线 3=年线 9=季线 21=双周 [40001-50000) 自定义日线 (isIncludeBase 是否包含基础日线周期)
1932
- var CUSTOM_DAY_PERIOD_START = 40000, CUSTOM_DAY_PERIOD_END = 49999;
1933
- ChartData.IsDayPeriod = function (period, isIncludeBase)
1934
- {
1935
- if (period == 1 || period == 2 || period == 3 || period == 9 || period==21 ) return true;
1936
- if (period > CUSTOM_DAY_PERIOD_START && period <= CUSTOM_DAY_PERIOD_END) return true;
1937
- if (period == 0 && isIncludeBase == true) return true;
1938
-
1939
- return false;
1940
- }
1941
-
1942
- //是否是分钟周期 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟 11=2h 12=4h[20001-30000) 自定义分钟 (isIncludeBase 是否包含基础1分钟周期)
1943
- var CUSTOM_MINUTE_PERIOD_START = 20000, CUSTOM_MINUTE_PERIOD_END = 29999;
1944
- ChartData.IsMinutePeriod = function (period, isIncludeBase)
1945
- {
1946
- if (period == 5 || period == 6 || period == 7 || period == 8 || period == 11 || period == 12) return true;
1947
- if (period > CUSTOM_MINUTE_PERIOD_START && period <= CUSTOM_MINUTE_PERIOD_END) return true;
1948
- if (period == 4 && isIncludeBase == true) return true;
1949
-
1950
- return false;
1951
- }
1952
-
1953
- //是否是秒周期 [30001-32000)
1954
- var CUSTOM_SECOND_PERIOD_START = 30000, CUSTOM_SECOND_PERIOD_END = 32000;
1955
- ChartData.IsSecondPeriod = function (period)
1956
- {
1957
- if (period > CUSTOM_SECOND_PERIOD_START && period <= CUSTOM_SECOND_PERIOD_END) return true;
1958
- return false;
1959
- }
1960
-
1961
-
1962
- //是否是分笔图
1963
- ChartData.IsTickPeriod = function (period)
1964
- {
1965
- return period == 10;
1966
- }
1967
-
1968
- //获取周期名字
1969
- ChartData.GetPeriodName = function (period)
1970
- {
1971
- var mapName = new Map(
1972
- [
1973
- [0, '日线'], [1, '周线'], [2, '月线'], [3, '年线'], [9, '季线'], [21, '双周'],
1974
- [4, '1分'], [5, '5分'], [6, '15分'], [7, '30分'], [8, '60分'], [11, '2小时'], [12, '4小时'],
1975
- [10, '分笔']
1976
- ]);
1977
-
1978
- if (mapName.has(period)) return mapName.get(period);
1979
-
1980
- return '';
1981
- }
1982
-
1983
- function Rect(x, y, width, height)
1984
- {
1985
- this.Left = x,
1986
- this.Top = y;
1987
- this.Right = x + width;
1988
- this.Bottom = y + height;
1989
-
1990
- this.IsPointIn = function (x, y)
1991
- {
1992
- if (x >= this.Left && x <= this.Right && y >= this.Top && y <= this.Bottom) return true;
1993
- return false;
1994
- }
1995
- }
1996
-
1997
- //修正线段有毛刺
1998
- function ToFixedPoint(value)
1999
- {
2000
- //return value;
2001
- return parseInt(value) + 0.5;
2002
- }
2003
-
2004
- function ToFixedRect(value)
2005
- {
2006
- var rounded;
2007
- return rounded = (0.5 + value) << 0;
2008
- }
2009
-
2010
- var JSCHART_EVENT_ID =
2011
- {
2012
- RECV_INDEX_DATA: 2, //接收指标数据
2013
- RECV_HISTROY_DATA: 3,//接收到历史数据
2014
- RECV_TRAIN_MOVE_STEP: 4, //接收K线训练,移动一次K线
2015
- CHART_STATUS: 5, //每次Draw() 以后会调用
2016
- BARRAGE_PLAY_END: 6, //单个弹幕播放完成
2017
- RECV_OVERLAY_INDEX_DATA:7, //接收叠加指标数据
2018
- RECV_START_AUTOUPDATE: 9, //开始自动更新
2019
- RECV_STOP_AUTOUPDATE: 10, //停止自动更新
2020
- ON_TITLE_DRAW: 12, //标题信息绘制事件
2021
- RECV_MINUTE_DATA: 14, //分时图数据到达
2022
- ON_CLICK_INDEXTITLE:15, //点击指标标题事件
2023
- RECV_KLINE_UPDATE_DATA: 16, //K线日,分钟更新数据到达
2024
- ON_INDEXTITLE_DRAW: 19, //指标标题重绘事件
2025
- ON_CUSTOM_VERTICAL_DRAW: 20, //自定义X轴绘制事件
2026
- ON_ENABLE_SPLASH_DRAW:22, //开启/关闭过场动画事件
2027
-
2028
- ON_DRAW_DEPTH_TOOLTIP:25, //绘制深度图tooltip事件
2029
- ON_PHONE_TOUCH:27, //手势点击事件 包含 TouchStart 和 TouchEnd
2030
-
2031
- ON_SPLIT_YCOORDINATE:29, //分割Y轴及格式化刻度文字
2032
- ON_SPLIT_XCOORDINATE:31, //分割X轴及格式化刻度文字
2033
-
2034
- ON_DRAW_KLINE_LAST_POINT:35, //K线图绘制回调事件,返回最后一个点的坐标
2035
-
2036
- ON_DRAW_COUNTDOWN:41, //K线倒计时
2037
- ON_BIND_DRAWICON:42, //绑定DRAWICON回调
2038
-
2039
- ON_DRAW_DEAL_VOL_COLOR:43, //成交明细 成交量颜色 (h5)
2040
- ON_DRAW_DEAL_TEXT:44, //成交明细 自定义字段 (h5)
2041
- ON_FILTER_DEAL_DATA:45, //成交明细 数据过滤回调 (h5)
2042
-
2043
- ON_FILTER_REPORT_DATA:46, //报价列表 数据过滤回调
2044
- ON_CLICK_REPORT_ROW:47, //点击报价列表
2045
- ON_REPORT_MARKET_STATUS:48, //报价列表交易状态
2046
- ON_DBCLICK_REPORT_ROW:49, //双击报价列表 (h5)
2047
- ON_RCLICK_REPORT_ROW:50, //右键点击列表
2048
- ON_CLICK_REPORT_HEADER:51, //单击表头
2049
- ON_RCLICK_REPORT_HEADER:52, //右键点击表头
2050
- ON_REPORT_LOCAL_SORT:53, //报价列表本地排序
2051
- ON_DRAW_REPORT_NAME_COLOR:54, //报价列表股票名称列颜色
2052
- ON_DRAW_CUSTOM_TEXT:55, //报价列表自定义列
2053
- ON_CLICK_REPORT_TAB:56, //报价列表标签点击 (h5)
2054
- ON_CLICK_REPORT_TABMENU:57, //报价列表标签菜单点击 (h5)
2055
- ON_DRAW_REPORT_FIXEDROW_TEXT:58, //报价列表固定行绘制
2056
- ON_CLICK_REPORT_FIXEDROW:59, //点击报价列表点击固定行
2057
- ON_RCLICK_REPORT_FIXEDROW:60, //点击报价列表右键点击固定行
2058
-
2059
- ON_FORMAT_CORSSCURSOR_Y_TEXT:75, //格式化十字光标Y轴文字
2060
- ON_FORMAT_INDEX_OUT_TEXT:76, //格式化指标标题文字
2061
- ON_FORMAT_CORSSCURSOR_X_TEXT:77, //格式化十字光标X轴文字
2062
-
2063
-
2064
- ON_CUSTOM_UNCHANGE_KLINE_COLOR:95, //定制平盘K线颜色
2065
-
2066
- ON_CHANGE_KLINE_PERIOD:101, //切换周期
2067
- ON_MINUTE_TOUCH_ZOOM:102, //分时图手势缩放
2068
-
2069
- ON_RELOAD_INDEX_CHART_RESOURCE:103, //加载指标图形额外资源
2070
- ON_RELOAD_OVERLAY_INDEX_CHART_RESOURCE:104, //加载叠加指标图形额外资源
2071
-
2072
- ON_CREATE_FRAME:105,
2073
- ON_DELETE_FRAME:106,
2074
- ON_SIZE_FRAME:107,
2075
-
2076
- ON_TOUCH_SCROLL_UP_DOWN:108,
2077
- }
2078
-
2079
- var JSCHART_DATA_FIELD_ID=
2080
- {
2081
- MINUTE_MULTI_DAY_EXTENDDATA:21, //多日分时图扩展数据序号
2082
- MINUTE_DAY_EXTENDDATA:21,
2083
- MINUTE_BEFOREOPEN_EXTENDDATA:21,
2084
- MINUTE_AFTERCLOSE_EXTENDDATA:21,
2085
-
2086
- KLINE_COLOR_DATA:66, //K线自定义颜色数据
2087
- KLINE_DAY_EXTENDDATA:25,
2088
- KLINE_MINUTE_EXTENDDATA:25,
2089
- }
2090
-
2091
- var HQ_DATA_TYPE=
2092
- {
2093
- KLINE_ID:0, //K线
2094
- MINUTE_ID:2, //当日走势图
2095
- HISTORY_MINUTE_ID:3,//历史分钟走势图
2096
- MULTIDAY_MINUTE_ID:4,//多日走势图
2097
- };
2098
-
2099
- //K线叠加 支持横屏
2100
- var OVERLAY_STATUS_ID=
2101
- {
2102
- STATUS_NONE_ID:0, //空闲状态
2103
- STATUS_REQUESTDATA_ID:1, //请求数据
2104
- STATUS_RECVDATA_ID:2, //接收到数据
2105
- STATUS_FINISHED_ID:3, //数据下载完成
2106
- };
2107
-
2108
- function PhoneDBClick()
2109
- {
2110
- this.Start=[];
2111
-
2112
- this.Clear=function()
2113
- {
2114
- this.Start=[];
2115
- }
2116
-
2117
- this.AddTouchStart=function(x, y, time)
2118
- {
2119
- if (this.Start.length>0)
2120
- {
2121
- var item=this.Start[this.Start.length-1];
2122
- var spanTime=time-item.Time;
2123
- if (spanTime>0 && spanTime<300)
2124
- {
2125
- this.Start.push({ X:x, Y:y, Time:time });
2126
- }
2127
- else
2128
- {
2129
- this.Start=[];
2130
- }
2131
- }
2132
- else
2133
- {
2134
- this.Start.push({ X:x, Y:y, Time:time });
2135
- }
2136
- }
2137
-
2138
- this.IsVaildDBClick=function()
2139
- {
2140
- if (this.Start.length==2) return true;
2141
-
2142
- return false;
2143
- }
2144
-
2145
- this.AddTouchEnd=function(time)
2146
- {
2147
- if (this.Start.length<=0) return;
2148
-
2149
- var item=this.Start[this.Start.length-1];
2150
- var spanTime=time-item.Time;
2151
- if (spanTime>=0 && spanTime<150)
2152
- {
2153
-
2154
- }
2155
- else
2156
- {
2157
- this.Start=[];
2158
- }
2159
- }
2160
- }
2161
-
2162
- //导出统一使用JSCommon命名空间名
2163
- var JSCommonData=
2164
- {
2165
- HistoryData: HistoryData,
2166
- ChartData: ChartData,
2167
- SingleData: SingleData,
2168
- MinuteData: MinuteData,
2169
- Rect: Rect,
2170
- DataPlus: DataPlus,
2171
- g_DataPlus:g_DataPlus,
2172
- JSCHART_EVENT_ID:JSCHART_EVENT_ID,
2173
- PhoneDBClick:PhoneDBClick,
2174
- HQ_DATA_TYPE:HQ_DATA_TYPE,
2175
- OVERLAY_STATUS_ID:OVERLAY_STATUS_ID,
2176
- };
2177
-
2178
- export
2179
- {
2180
- JSCommonData,
2181
-
2182
- ChartData,
2183
- HistoryData,
2184
- SingleData,
2185
- MinuteData,
2186
- CUSTOM_DAY_PERIOD_START,
2187
- CUSTOM_DAY_PERIOD_END,
2188
- CUSTOM_MINUTE_PERIOD_START,
2189
- CUSTOM_MINUTE_PERIOD_END,
2190
- CUSTOM_SECOND_PERIOD_START,
2191
- CUSTOM_SECOND_PERIOD_END,
2192
- Rect,
2193
- DataPlus,
2194
- g_DataPlus,
2195
- Guid,
2196
- ToFixedPoint,
2197
- ToFixedRect,
2198
- JSCHART_EVENT_ID,
2199
- JSCHART_DATA_FIELD_ID,
2200
- PhoneDBClick,
2201
- HQ_DATA_TYPE,
2202
- OVERLAY_STATUS_ID
2203
- };
2204
-
2205
- /*
2206
- module.exports =
2207
- {
2208
- JSCommonData:
2209
- {
2210
- HistoryData: HistoryData,
2211
- ChartData: ChartData,
2212
- SingleData: SingleData,
2213
- MinuteData: MinuteData,
2214
- Rect: Rect,
2215
- DataPlus: DataPlus,
2216
- JSCHART_EVENT_ID:JSCHART_EVENT_ID,
2217
- PhoneDBClick:PhoneDBClick,
2218
- HQ_DATA_TYPE:HQ_DATA_TYPE,
2219
- OVERLAY_STATUS_ID:OVERLAY_STATUS_ID,
2220
- },
2221
-
2222
- //单个类导出
2223
- JSCommon_ChartData: ChartData,
2224
- JSCommon_HistoryData: HistoryData,
2225
- JSCommon_SingleData: SingleData,
2226
- JSCommon_MinuteData: MinuteData,
2227
- JSCommon_CUSTOM_DAY_PERIOD_START: CUSTOM_DAY_PERIOD_START,
2228
- JSCommon_CUSTOM_DAY_PERIOD_END: CUSTOM_DAY_PERIOD_END,
2229
- JSCommon_CUSTOM_MINUTE_PERIOD_START: CUSTOM_MINUTE_PERIOD_START,
2230
- JSCommon_CUSTOM_MINUTE_PERIOD_END: CUSTOM_MINUTE_PERIOD_END,
2231
- JSCommon_CUSTOM_SECOND_PERIOD_START: CUSTOM_SECOND_PERIOD_START,
2232
- JSCommon_CUSTOM_SECOND_PERIOD_END: CUSTOM_SECOND_PERIOD_END,
2233
- JSCommon_Rect: Rect,
2234
- JSCommon_DataPlus: DataPlus,
2235
- JSCommon_Guid: Guid,
2236
- JSCommon_ToFixedPoint: ToFixedPoint,
2237
- JSCommon_ToFixedRect: ToFixedRect,
2238
- JSCommon_JSCHART_EVENT_ID:JSCHART_EVENT_ID,
2239
- JSCommon_PhoneDBClick:PhoneDBClick,
2240
- JSCommon_HQ_DATA_TYPE:HQ_DATA_TYPE,
2241
- JSCommon_OVERLAY_STATUS_ID:OVERLAY_STATUS_ID,
2242
- };
2243
- */