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,1077 +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 { JSConsole } from "./umychart.console.wechat.js"
14
-
15
- import {
16
- ErrorHandler,
17
- JSComplier,
18
- JSParser,
19
- Syntax,
20
- JS_EXECUTE_JOB_ID,
21
- g_JSComplierResource,
22
- } from "./umychart.complier.wechat";
23
-
24
- import
25
- {
26
- IFrameSplitOperator,
27
- } from './umychart.framesplit.wechat.js'
28
-
29
-
30
- //脚本说明
31
- function JSExplainer(ast,option)
32
- {
33
- this.AST=ast;
34
- this.ErrorHandler=new ErrorHandler();
35
- this.ErrorCallback; //执行错误回调
36
- this.UpdateUICallback;
37
- this.CallbackParam;
38
- this.JobList=[]; //执行的任务队列
39
- this.VarTable=new Map(); //变量表
40
- this.OutVarTable=[]; //输出变量
41
-
42
- //脚本自动变量表, 只读
43
- this.ConstVarTable=new Map(
44
- [
45
- //个股数据
46
- ['CLOSE',"收盘价"],['VOL',"成交量"],['OPEN',"开盘价"],['HIGH',"最高价"],['LOW',"最低价"],['AMOUNT',"成交量"],
47
- ['C',"收盘价"],['V',"成交量"],['O',"开盘价"],['H',"最高价"],['L',"最低价"],['AMO',"成交量"],
48
- ['VOLR',"量比"], ['VOLINSTK',"持仓量"], ["OPI","持仓量"], ["ZSTJJ","均价"], ["QHJSJ","结算价"], ["SETTLE", "结算价"],
49
-
50
- //日期类
51
- ['DATE',"日期"],['YEAR',"年份"],['MONTH',"月份"],['PERIOD', "周期"],['WEEK',"星期"],["TIME","时间"],
52
-
53
- //大盘数据
54
- ['INDEXA',"大盘成交额"],['INDEXC',"大盘收盘价"],['INDEXH',"大盘最高价"],['INDEXL',"大盘最低价"],['INDEXO',"大盘开盘价"],['INDEXV',"大盘成交量"],
55
- ['INDEXADV',"大盘上涨家数"],['INDEXDEC',"´大盘下跌家数"],
56
-
57
- ["ADVANCE","上涨家数"], ['DECLINE', "下跌家数"],
58
-
59
- ['FROMOPEN',"当前离开盘分钟数"],
60
- ['TOTALFZNUM', "总分钟数"],
61
-
62
- ['CURRBARSCOUNT',"到最后交易的周期"], //到最后交易日的周期数
63
- ['TOTALBARSCOUNT',"总的周期数"],
64
- ['ISLASTBAR',"是否是最后一个周期"], //判断是否为最后一个周期
65
- ['BARSTATUS',"数据位置状态"], //BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
66
-
67
- ['CAPITAL',"当前流通股本(手)"], ["TOTALCAPITAL","当前总股本(手)"],
68
- ['EXCHANGE',"换手率"], //换手率
69
- ['SETCODE', "市场类型"], //市场类型
70
- ['CODE',"品种代码"], //品种代码
71
- ['STKNAME',"品种名称"], //品种名称
72
- ["TQFLAG","当前复权状态"], //TQFLAG 当前的复权状态,0:无复权 1:前复权 2:后复权
73
-
74
- ['HYBLOCK',"所属行业"], //所属行业板块
75
- ['DYBLOCK',"所属地域"], //所属地域板块
76
- ['GNBLOCK',"所属概念"], //所属概念
77
- ["FGBLOCK","所属风格板块"],
78
- ["ZSBLOCK","所属指数板块"],
79
- ["ZHBLOCK",'所属组合板块'],
80
- ["ZDBLOCK",'所属自定义板块'],
81
- ["HYZSCODE","所属行业的板块指数代码"],
82
-
83
- ["GNBLOCKNUM","所属概念板块的个数"],
84
- ["FGBLOCKNUM","所属风格板块的个数"],
85
- ["ZSBLOCKNUM","所属指数板块的个数"],
86
- ["ZHBLOCKNUM","所属组合板块的个数"],
87
- ["ZDBLOCKNUM","所属自定义板块的个数"],
88
-
89
- ["HYSYL","指数市盈率或个股所属行业的市盈率"],
90
- ["HYSJL","指数市净率或个股所属行业的市净率"],
91
-
92
- ['DRAWNULL',"无效数据"]
93
-
94
- ]);
95
-
96
- if (option)
97
- {
98
- if (option.Callback) this.UpdateUICallback=option.Callback;
99
- if (option.CallbackParam) this.CallbackParam=option.CallbackParam;
100
- if (option.Arguments) this.Arguments=option.Arguments;
101
- }
102
-
103
- this.Run=function()
104
- {
105
- try
106
- {
107
- this.OutVarTable=[];
108
- this.VarTable=new Map();
109
- JSConsole.Complier.Log('[JSExecute::JSExplainer] Load Arguments', this.Arguments);
110
- for(let i in this.Arguments) //预定义的变量
111
- {
112
- let item =this.Arguments[i];
113
- this.VarTable.set(item.Name,item.Value);
114
- }
115
-
116
- let data=this.RunAST();//执行脚本
117
- JSConsole.Complier.Log('[JSExplainer.Run] explain finish', data);
118
- if (this.UpdateUICallback) //回调发送结果, 可以支持异步
119
- {
120
- JSConsole.Complier.Log('[JSExplainer.Run] invoke UpdateUICallback.');
121
- this.UpdateUICallback(data);
122
- }
123
- }
124
- catch(error)
125
- {
126
- JSConsole.Complier.Log('[JSExplainer.Run] throw error ', error);
127
- if (this.ErrorCallback)
128
- {
129
- this.ErrorCallback(error, this.OutVarTable);
130
- }
131
- }
132
- }
133
-
134
-
135
- this.RunAST=function()
136
- {
137
- if (!this.AST) this.ThrowError();
138
- if (!this.AST.Body) this.ThrowError();
139
-
140
- for(let i in this.AST.Body)
141
- {
142
- let item =this.AST.Body[i];
143
- this.VisitNode(item);
144
-
145
- //输出变量
146
- if (item.Type==Syntax.ExpressionStatement && item.Expression)
147
- {
148
- if (item.Expression.Type==Syntax.AssignmentExpression)
149
- {
150
- if (item.Expression.Operator==':' && item.Expression.Left)
151
- {
152
- let assignmentItem=item.Expression;
153
- let varName=assignmentItem.Left.Name;
154
- let outVar=`输出${varName}: ${this.VarTable.get(varName)}`;
155
- this.OutVarTable.push({ Name:varName, Data:outVar,Type:0});
156
- }
157
- else if (item.Expression.Operator==':=' && item.Expression.Left)
158
- {
159
- let assignmentItem=item.Expression;
160
- let varName=assignmentItem.Left.Name;
161
- let outVar=`赋值${varName}: ${this.VarTable.get(varName)}`;
162
- this.OutVarTable.push({ Name:varName, Data:outVar,Type:0, IsOut:false });
163
- }
164
- }
165
- else if (item.Expression.Type==Syntax.CallExpression)
166
- {
167
- let callItem=item.Expression;
168
- if (this.IsDrawFunction(callItem.Callee.Name))
169
- {
170
- let outVar=callItem.Out;
171
- var drawName=callItem.Callee.Name;
172
- this.OutVarTable.push({Name:drawName, Draw:`输出: ${outVar}`, Type:1});
173
- }
174
- else
175
- {
176
- let outVar=callItem.Out;
177
- varName=`__temp_c_${callItem.Callee.Name}_${i}__`;
178
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`,Type:0, NoneName:true});
179
- }
180
- }
181
- else if (item.Expression.Type==Syntax.Identifier)
182
- {
183
- let varName=item.Expression.Name;
184
- let outVar=this.ReadVariable(varName,item.Expression);
185
- varName="__temp_i_"+i+"__";
186
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`, Type:0, NoneName:true});
187
- }
188
- else if (item.Expression.Type==Syntax.Literal) //常量
189
- {
190
- let outVar=item.Expression.Value;
191
- if (IFrameSplitOperator.IsString(outVar) && outVar.indexOf("$")>0)
192
- outVar=this.GetOtherSymbolExplain({ Literal:outVar }, item);
193
- varName="__temp_li_"+i+"__";
194
- var type=0;
195
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`, Type:0, NoneName:true});
196
- }
197
- else if (item.Expression.Type==Syntax.BinaryExpression) // CLOSE+OPEN;
198
- {
199
- var varName="__temp_b_"+i+"__";
200
- let outVar=item.Expression.Out;
201
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`,Type:0, NoneName:true});
202
- }
203
- else if (item.Expression.Type==Syntax.LogicalExpression) //逻辑语句 如 T1 AND T2
204
- {
205
- var varName="__temp_l_"+i+"__";
206
- let outVar=item.Expression.Out;
207
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`,Type:0, NoneName:true});
208
- }
209
- else if (item.Expression.Type==Syntax.SequenceExpression)
210
- {
211
- let varName;
212
- let drawName;
213
- let draw;
214
- let color;
215
- let lineWidth;
216
- let colorStick=false;
217
- let pointDot=false;
218
- let circleDot=false;
219
- let lineStick=false;
220
- let stick=false;
221
- let volStick=false;
222
- let isShow=true;
223
- let isExData=false;
224
- let isDotLine=false;
225
- let isOverlayLine=false; //叠加线
226
- var isNoneName=false;
227
- //显示在位置之上,对于DRAWTEXT和DRAWNUMBER等函数有用,放在语句的最后面(不能与LINETHICK等函数共用),比如:
228
- //DRAWNUMBER(CLOSE>OPEN,HIGH,CLOSE),DRAWABOVE;
229
- var isDrawAbove=false;
230
- for(let j in item.Expression.Expression)
231
- {
232
- let itemExpression=item.Expression.Expression[j];
233
- if (itemExpression.Type==Syntax.AssignmentExpression && itemExpression.Operator==':' && itemExpression.Left)
234
- {
235
- varName=itemExpression.Left.Name;
236
- let varValue=this.VarTable.get(varName);
237
- this.VarTable.set(varName,varValue); //把常量放到变量表里
238
- }
239
- else if (itemExpression.Type==Syntax.Identifier)
240
- {
241
- let value=itemExpression.Name;
242
- if (value==='COLORSTICK') colorStick=true;
243
- else if (value==='POINTDOT') pointDot=true;
244
- else if (value==='CIRCLEDOT') circleDot=true;
245
- else if (value==='DOTLINE') isDotLine=true;
246
- else if (value==='LINESTICK') lineStick=true;
247
- else if (value==='STICK') stick=true;
248
- else if (value==='VOLSTICK') volStick=true;
249
- else if (value==="DRAWABOVE") isDrawAbove=true;
250
- else if (value.indexOf('COLOR')==0) color=value;
251
- else if (value.indexOf('LINETHICK')==0) lineWidth=value;
252
- else if (value.indexOf('NODRAW')==0) isShow=false;
253
- else if (value.indexOf('EXDATA')==0) isExData=true; //扩展数据, 不显示再图形里面
254
- else if (value.indexOf('LINEOVERLAY')==0) isOverlayLine=true;
255
- else
256
- {
257
- varName=itemExpression.Name;
258
- let varValue=this.ReadVariable(varName,itemExpression);
259
- varName="__temp_si_"+i+"__";
260
- isNoneName=true;
261
- this.VarTable.set(varName,varValue); //放到变量表里
262
- }
263
- }
264
- else if(itemExpression.Type==Syntax.Literal) //常量
265
- {
266
- let aryValue=itemExpression.Value;
267
- varName=itemExpression.Value.toString();
268
- isNoneName=true;
269
- this.VarTable.set(varName,aryValue); //把常量放到变量表里
270
- }
271
- else if (itemExpression.Type==Syntax.CallExpression)
272
- {
273
- if (this.IsDrawFunction(itemExpression.Callee.Name))
274
- {
275
- draw=itemExpression.Out;
276
- drawName=itemExpression.Callee.Name;
277
- }
278
- else
279
- {
280
- let varValue=itemExpression.Out;
281
- varName=`__temp_sc_${itemExpression.Callee.Name}_${i}__`;
282
- isNoneName=true;
283
- this.VarTable.set(varName,varValue);
284
- }
285
- }
286
- else if (itemExpression.Type==Syntax.BinaryExpression)
287
- {
288
- varName="__temp_sb_"+i+"__";
289
- let aryValue=itemExpression.Out;
290
- isNoneName=true;
291
- this.VarTable.set(varName,aryValue);
292
- }
293
- }
294
-
295
- var outValue;
296
- if (draw) outValue=`输出: ${draw}`;
297
- else if (isNoneName) outValue=`输出: ${this.VarTable.get(varName)}`;
298
- else outValue=`输出${varName}: ${this.VarTable.get(varName)}`;
299
-
300
- if (color) outValue+=`,颜色${this.GetColorExplain(color)}`;
301
- if (lineWidth) outValue+=`,线段粗细${this.GetLineWidthExplain(lineWidth)}`;
302
- if (isShow==false) outValue+=",不显示";
303
- if (isDotLine==true) outValue+=",画虚线";
304
- if (isDrawAbove==true) outValue+=',显示在位置之上';
305
-
306
- if (pointDot && varName) //圆点
307
- {
308
- outValue+=",画小圆点线";
309
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.POINTDOT.Radius, Type:3};
310
- this.OutVarTable.push(value);
311
- }
312
- else if (circleDot && varName) //圆点
313
- {
314
- outValue+=",画小圆圈线";
315
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.CIRCLEDOT.Radius, Type:3};
316
- this.OutVarTable.push(value);
317
- }
318
- else if (lineStick && varName) //LINESTICK 同时画出柱状线和指标线
319
- {
320
- outValue+=",画出柱状线和指标线";
321
- let value={Name:varName, Data:outValue, Type:4};
322
- this.OutVarTable.push(value);
323
- }
324
- else if (stick && varName) //STICK 画柱状线
325
- {
326
- outValue+=",画柱状线";
327
- let value={Name:varName, Data:outValue, Type:5};
328
- this.OutVarTable.push(value);
329
- }
330
- else if (volStick && varName) //VOLSTICK 画彩色柱状线
331
- {
332
- outValue+=",画成交量柱状线";
333
- let value={Name:varName, Data:outValue, Type:6};
334
- this.OutVarTable.push(value);
335
- }
336
- else if (varName && color)
337
- {
338
- let value={Name:varName, Data:outValue, Color:color, Type:0};
339
- this.OutVarTable.push(value);
340
- }
341
- else if (draw) //画图函数
342
- {
343
- var outVar={ Name:drawName, Data:outValue, Type:1 };
344
- this.OutVarTable.push(outVar);
345
- }
346
- else if (colorStick && varName) //CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
347
- {
348
- outValue+=",画彩色柱状线";
349
- let value={Name:varName, Data:outValue, Color:color, Type:2};
350
- this.OutVarTable.push(value);
351
- }
352
- else if (varName)
353
- {
354
- let value={Name:varName, Data:outValue,Type:0};
355
- this.OutVarTable.push(value);
356
- }
357
- }
358
- }
359
- }
360
-
361
- JSConsole.Complier.Log('[JSExplainer::Run]', this.VarTable);
362
- return this.OutVarTable;
363
- }
364
-
365
- this.VisitNode=function(node)
366
- {
367
- switch(node.Type)
368
- {
369
- case Syntax.SequenceExpression:
370
- this.VisitSequenceExpression(node);
371
- break;
372
- case Syntax.ExpressionStatement:
373
- this.VisitNode(node.Expression);
374
- break;
375
- case Syntax.AssignmentExpression:
376
- this.VisitAssignmentExpression(node);
377
- break;
378
- case Syntax.BinaryExpression:
379
- case Syntax.LogicalExpression:
380
- this.VisitBinaryExpression(node);
381
- break;
382
- case Syntax.CallExpression:
383
- this.VisitCallExpression(node);
384
- break;
385
- }
386
- }
387
-
388
- this.VisitSequenceExpression=function(node)
389
- {
390
- for(let i in node.Expression)
391
- {
392
- let item =node.Expression[i];
393
- this.VisitNode(item);
394
- }
395
- }
396
-
397
- //函数调用
398
- this.VisitCallExpression=function(node)
399
- {
400
- let funcName=node.Callee.Name;
401
- let args=[];
402
- for(let i in node.Arguments)
403
- {
404
- let item=node.Arguments[i];
405
- let value;
406
- if (item.Type==Syntax.BinaryExpression || item.Type==Syntax.LogicalExpression)
407
- value=this.VisitBinaryExpression(item);
408
- else if (item.Type==Syntax.CallExpression)
409
- value=this.VisitCallExpression(item);
410
- else
411
- value=this.GetNodeValue(item);
412
- args.push(value);
413
- }
414
-
415
- JSConsole.Complier.Log('[JSExplainer::VisitCallExpression]' , funcName, '(', args.toString() ,')');
416
-
417
- if (g_JSComplierResource.IsCustomFunction(funcName))
418
- {
419
- var data=this.Algorithm.CallCustomFunction(funcName, args, this.SymbolData, node);
420
- node.Out=[];
421
- node.Draw=null;
422
-
423
- if (data)
424
- {
425
- if (data.Out) node.Out=data.Out;
426
- if (data.Draw) node.Draw=data.Draw;
427
- }
428
-
429
- return node.Out;
430
- }
431
-
432
- node.Out=this.CallFunctionExplain(funcName, args, node);
433
- return node.Out;
434
- }
435
-
436
- this.FUNCTION_INFO_LIST=new Map(
437
- [
438
- ["REF", { Name:"REF", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日前的${args[0]}`; } } ],
439
- ["REFX", { Name:"REFX", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日后的${args[0]}`; } } ],
440
- ["REFV", { Name:"REFV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日前的(未作平滑处理)${args[0]}`; } } ],
441
- ["REFXV", { Name:"REFXV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日后的(未作平滑处理)${args[0]}`; } } ],
442
-
443
- ["REFDATE", { Name:"REFDATE", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日${args[0]}`; } } ],
444
- ["COUNT", { Name:"COUNT", Param:{ Count:2 }, ToString:function(args) { return `统计${args[1]}日中满足${args[0]}的天数`; } } ],
445
- ["BARSLASTCOUNT", { Name:"BARSLASTCOUNT", Param:{ Count:1 }, ToString:function(args) { return `条件${args[0]}连续成立次数`; } } ],
446
- ["BARSCOUNT", { Name:"BARSCOUNT", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}有效数据周期数`; } } ],
447
- ["BARSLAST", { Name:"BARSLAST", Param:{ Count:1 }, ToString:function(args) { return `上次${args[0]}不为0距今天数`; } } ],
448
- ["BARSNEXT", { Name:"BARSNEXT", Param:{ Count:1 }, ToString:function(args) { return `下次${args[0]}不为0距今天数`; } } ],
449
- ["BARSSINCEN", { Name:"BARSSINCEN", Param:{ Count:2 }, ToString:function(args) { return `在${args[1]}周期内首次${args[0]}距今天数`; } } ],
450
- ["BARSSINCE", { Name:"BARSSINCE", Param:{ Count:1 }, ToString:function(args) { return `首次${args[0]}距今天数`; } } ],
451
- ["HHV", { Name:"HHV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的最高值`; } } ],
452
- ["LLV", { Name:"LLV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的最低值`; } } ],
453
- ["ZTPRICE", { Name:"ZTPRICE", Param:{ Count:2 }, ToString:function(args) { return '计算涨停价'; } } ],
454
- ["DTPRICE", { Name:"DTPRICE", Param:{ Count:2 }, ToString:function(args) { return '计算跌停价'; } } ],
455
- ["BACKSET", { Name:"BACKSET", Param:{ Count:2 }, ToString:function(args) { return `若${args[0]}则将最近${args[1]}周期置为1`; } } ],
456
-
457
- ["HOD", { Name:"HOD", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的高值名次`; } } ],
458
- ["LOD", { Name:"LOD", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的低值名次`; } } ],
459
- ["REVERSE", { Name:"REVERSE", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的相反数`; } } ],
460
- ["FILTER", { Name:"FILTER", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日过滤`; } } ],
461
- ["FILTERX", { Name:"FILTERX", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日反向过滤`; } } ],
462
- ["TFILTER", { Name:"TFILTER", Param:{Count:3}, ToString:function(args) { return `信号过滤(多头)`; } }],
463
- ["SUMBARS", { Name:"SUMBARS", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}累加至${args[1]}的天数`; } } ],
464
- ["MA", { Name:"MA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日简单移动平均`; } } ],
465
- ["SMA", { Name:"SMA", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}的${args[1]}日[${args[2]}日权重]移动平均`; } } ],
466
- ["MEMA", { Name:"MEMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日平滑移动平均`; } } ],
467
- ["EMA", { Name:"EMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日指数移动平均`; } } ],
468
- ["EXPMA", { Name:"EXPMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日指数移动平均`; } } ],
469
- ["WMA", { Name:"WMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日加权移动平均`; } } ],
470
- ["DMA", { Name:"DMA", Param:{ Count:2 }, ToString:function(args) { return `以${args[1]}为权重${args[0]}的动态移动平均`; } } ],
471
- ["XMA", { Name:"XMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日偏移移动平均`; } } ],
472
-
473
- ["RANGE", { Name:"RANGE", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}位于${args[1]}和${args[2]}之间`; } } ],
474
- ["CONST", { Name:"CONST", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的最后一日值`; } } ],
475
- ["TOPRANGE", { Name:"TOPRANGE", Param:{ Count:1 }, ToString:function(args) { return `当前值是近${args[0]}周期的最大值`; } } ],
476
- ["LOWRANGE", { Name:"LOWRANGE", Param:{ Count:1 }, ToString:function(args) { return `当前值是近${args[0]}周期的最小值`; } } ],
477
- ["FINDHIGH", { Name:"FINDHIGH", Param:{ Count:4 }, ToString:function(args) { return `${args[0]}在${args[1]}日前的${args[2]}天内第${args[3]}个最高价`; } } ],
478
- ["FINDHIGHBARS", { Name:"FINDHIGHBARS", Param:{ Count:4 }, ToString:function(args) { return `${args[0]}在${args[1]}日前的${args[2]}天内第${args[3]}个最高价到当前周期的周期数`; } } ],
479
- ["FINDLOW", { Name:"FINDLOW", Param:{ Count:4 }, ToString:function(args) { return `${args[0]}在${args[1]}日前的${args[2]}天内第${args[3]}个最低价`; } } ],
480
- ["FINDLOWBARS", { Name:"FINDLOWBARS", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}在${args[1]}日前的${args[2]}天内第${args[3]}个最低价到当前周期的周期数`; } } ],
481
- ["SUM", { Name:"SUM", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}${args[1]}日累加`; } } ],
482
- ["MULAR", { Name:"MULAR", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}和${args[1]}日累乘`; } } ],
483
- ["AMA", { Name:"AMA", Param:{ Count:2 }, ToString:function(args) { return `以${args[1]}为权重${args[0]}的自适应均线`; } } ],
484
- ["TMA", { Name:"TMA", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}的${args[1]}日[${args[2]}日权重]移动平均`; } } ],
485
- ["CROSS", { Name:"CROSS", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}上穿${args[1]}`; } } ],
486
- ["LONGCROSS", { Name:"LONGCROSS", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}小于${args[1]}保持${args[2]}个交易日后交叉上穿`; } } ],
487
- ["UPNDAY", { Name:"UPNDAY", Param:{ Count:2 }, ToString:function(args) { return `最近${args[1]}日${args[0]}连涨`; } } ],
488
- ["DOWNNDAY", { Name:"DOWNNDAY", Param:{ Count:2 }, ToString:function(args) { return `最近${args[1]}日${args[0]}连跌`; } } ],
489
- ["NDAY", { Name:"NDAY", Param:{ Count:3 }, ToString:function(args) { return `最近${args[2]}日${args[0]}一直大于${args[1]}`; } } ],
490
- ["EXIST", { Name:"EXIST", Param:{ Count:2 }, ToString:function(args) { return `最近${args[1]}日存在${args[0]}`; } } ],
491
- ["EXISTR", { Name:"EXISTR", Param:{ Count:3 }, ToString:function(args) { return `从前${args[1]}日到前${args[2]}日存在${args[0]}`; } } ],
492
- ["EVERY", { Name:"EVERY", Param:{ Count:2 }, ToString:function(args) { return `最近${args[1]}日一直存在${args[0]}`; } } ],
493
- ["LAST", { Name:"LAST", Param:{ Count:3 }, ToString:function(args) { return `从前${args[1]}日到前${args[2]}日持续${args[0]}`; } } ],
494
- ["NOT", { Name:"NOT", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}取反`; } } ],
495
- ["IF", { Name:"IF", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
496
- ["IFF", { Name:"IFF", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
497
- ["IFN", { Name:"IFN", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
498
- ["IFC", { Name:"IFC", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
499
- ["TESTSKIP", { Name:"TESTSKIP", Param:{ Count:1 }, ToString:function(args) { return `如果满足条件${args[0]},公式返回`; } } ],
500
- ["VALUEWHEN", { Name:"VALUEWHEN", Param:{ Count:2 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回上个输出值 `; } } ],
501
-
502
- ["MAX", { Name:"MAX", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}和${args[1]}的较大值`; } } ],
503
- ["MIN", { Name:"MIN", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}和${args[1]}的较小值`; } } ],
504
- ["ACOS", { Name:"ACOS", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的反余弦`; } } ],
505
- ["ASIN", { Name:"ASIN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的反正弦`; } } ],
506
- ["ATAN", { Name:"ATAN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的反正切`; } } ],
507
- ["COS", { Name:"COS", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的余弦`; } } ],
508
- ["SIN", { Name:"SIN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的正弦`; } } ],
509
- ["TAN", { Name:"TAN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的正切`; } } ],
510
- ["EXP", { Name:"EXP", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的指数`; } } ],
511
- ["LN", { Name:"LN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的自然对数`; } } ],
512
- ["LOG", { Name:"LOG", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的对数`; } } ],
513
- ["SQRT", { Name:"SQRT", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的开方`; } } ],
514
- ["ABS", { Name:"ABS", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的绝对值`; } } ],
515
- ["POW", { Name:"POW", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}乘幂`; } } ],
516
- ["CEILING", { Name:"CEILING", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的向上舍入`; } } ],
517
- ["FLOOR", { Name:"FLOOR", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的向上舍入`; } } ],
518
- ["INTPART", { Name:"INTPART", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的整数部分`; } } ],
519
- ["BETWEEN", { Name:"BETWEEN", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}位于${args[1]}和${args[2]}之间`; } } ],
520
- ["FRACPART", { Name:"FRACPART", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的小数部分`; } } ],
521
- ["ROUND", { Name:"ROUND", Param:{ Count:1 }, ToString:function(args) { return `对${args[0]}(进行)四舍五入`; } } ],
522
- ["ROUND2", { Name:"ROUND2", Param:{ Count:2 }, ToString:function(args) { return `对${args[0]}(进行)四舍五入`; } } ],
523
- ["SIGN", { Name:"SIGN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的符号`; } } ],
524
- ["MOD", { Name:"MOD", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}关于${args[1]}的模`; } } ],
525
- ["RAND", { Name:"RAND", Param:{ Count:1 }, ToString:function(args) { return `随机正整数`; } } ],
526
-
527
- ["AVEDEV", { Name:"AVEDEV", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日平均绝对偏差`; } } ],
528
- ["DEVSQ", { Name:"DEVSQ", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日数据偏差平方和`; } } ],
529
- ["FORCAST", { Name:"FORCAST", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日线性回归预测值`; } } ],
530
- ["TSMA", { Name:"TSMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}在${args[1]}个周期内的时间序列三角移动平均`; } } ],
531
- ["SLOPE", { Name:"SLOPE", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日线性回归斜率`; } } ],
532
- ["STD", { Name:"STD", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日估算标准差`; } } ],
533
- ["STDP", { Name:"STDP", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日总体标准差`; } } ],
534
- ["STDDEV", { Name:"STDDEV", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日标准偏差`; } } ],
535
- ["VAR", { Name:"VAR", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日估算样本方差`; } } ],
536
- ["VARP", { Name:"VARP", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日总体样本方差`; } } ],
537
- ["COVAR", { Name:"COVAR", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}和${args[1]}的${args[2]}周期的协方差`; } } ],
538
- ["RELATE", { Name:"RELATE", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}和${args[1]}的${args[0]}周期的相关系数`; } } ],
539
- ["BETA", { Name:"BETA", Param:{ Count:1 }, ToString:function(args) { return `β(Beta)系数`; } } ],
540
- ["BETAEX", { Name:"BETAEX", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}和${args[1]}的${args[2]}周期的相关放大系数`; } } ],
541
-
542
- ["COST", { Name:"COST", Param:{ Count:1 }, ToString:function(args) { return `获利盘为${args[0]}%的成本分布`; } } ],
543
- ["WINNER", { Name:"WINNER", Param:{ Count:1 }, ToString:function(args) { return `以${args[0]}计算的获利盘比例`; } } ],
544
- ["LWINNER", { Name:"LWINNER", Param:{ Count:2 }, ToString:function(args) { return `最近${args[0]}日那部分成本以${args[1]}价格卖出的获利盘比例`; } } ],
545
- ["PWINNER", { Name:"PWINNER", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}日前那部分成本以${args[1]}价格卖出的获利盘比例`; } } ],
546
- ["COSTEX", { Name:"COSTEX", Param:{ Count:2 }, ToString:function(args) { return `位于价格${args[0]}和${args[1]}间的成本`; } } ],
547
- ["PPART", { Name:"PPART", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}日前那部分成本占总成本的比例`; } } ],
548
-
549
- ["SAR", { Name:"SAR", Param:{ Count:3 }, ToString:function(args) { return `步长为${args[1]}极限值为${args[0]}的${args[2]}日抛物转向`; } } ],
550
- ["SARTURN", { Name:"SARTURN", Param:{ Count:3 }, ToString:function(args) { return `步长为${args[1]}极限值为${args[0]}的${args[2]}日抛物转向点`; } } ],
551
-
552
- //字符串函数
553
- ["CON2STR", { Name:"CON2STR", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}转为字符串`; } } ],
554
- ["VAR2STR", { Name:"VAR2STR", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}转为字符串`; } } ],
555
- ["STR2CON", { Name:"STR2CON", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}转为数字`; } } ],
556
- ["STRLEN", { Name:"STRLEN", Param:{ Count:1 }, ToString:function(args) { return `得到${args[0]}字符串长度`; } } ],
557
- ["STRCAT", { Name:"STRCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
558
- ["VARCAT", { Name:"VARCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
559
- ["STRSPACE", { Name:"STRSPACE", Param:{ Count:1 }, ToString:function(args) { return `字符串${args[0]}加一空格`; } } ],
560
- ["SUBSTR", { Name:"SUBSTR", Param:{ Count:3 }, ToString:function(args) { return `字符串${args[0]}中取一部分`; } } ],
561
- ["STRCMP", { Name:"STRCMP", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}和字符串${args[1]}比较`; } } ],
562
- ["FINDSTR", { Name:"FINDSTR", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}中查找字符串${args[1]}`; } } ],
563
- ["NAMEINCLUD", { Name:"NAMEINCLUD", Param:{ Count:1 }, ToString:function(args) { return `查找品种名称中包含${args[0]}`; } } ],
564
- ["CODELIKE", { Name:"CODELIKE", Param:{ Count:1 }, ToString:function(args) { return `查找品种名称中包含${args[0]}`; } } ],
565
- ["INBLOCK", { Name:"AVEDEV", Param:{ Count:1 }, ToString:function(args) { return `属于${args[0]}板块`; } } ],
566
-
567
- ["STKINDI",{ Name:"STKINDI", Param:{ Dynamic:true }, ToString:function(args) { return "指标引用"; } }],
568
-
569
-
570
- [
571
- "HHVBARS",
572
- {
573
- Name:"HHVBARS", Param:{ Count:2 },
574
- ToString:function(args)
575
- {
576
- if (args[1]==0) return `历史${args[0]}新高距今天数`;
577
- return `${args[1]}日内${args[0]}新高距今天数`;
578
- }
579
- }
580
- ],
581
-
582
- [
583
- "LLVBARS",
584
- {
585
- Name:"LLVBARS", Param:{ Count:2 },
586
- ToString:function(args)
587
- {
588
- if (args[1]==0) return `历史${args[0]}新低距今天数`;
589
- return `${args[1]}日内${args[0]}新低距今天数`;
590
- }
591
- }
592
- ]
593
- ]
594
- );
595
-
596
- this.CallFunctionExplain=function(funcName, args, node)
597
- {
598
- if (this.FUNCTION_INFO_LIST.has(funcName))
599
- {
600
- var item=this.FUNCTION_INFO_LIST.get(funcName);
601
- if (item.Param.Dynamic===true) //动态参数
602
- {
603
-
604
- }
605
- else
606
- {
607
- if (item.Param.Count!=args.length)
608
- this.ThrowUnexpectedNode(node,`函数${funcName}参数个数不正确. 需要${item.Param.Count}个参数`);
609
- }
610
- return item.ToString(args);
611
- }
612
-
613
- switch(funcName)
614
- {
615
- case "CALCSTOCKINDEX":
616
- return `引用${args[0]}的${args[1]}指标第${args[2]}个输出值`;
617
-
618
- case "PEAK":
619
- case "PEAKBARS":
620
- case "ZIG":
621
- case "ZIGA":
622
- case "TROUGH":
623
- case "TROUGHBARS":
624
- return this.GetZIGExplain(funcName,args);
625
-
626
- case "FINANCE":
627
- return this.GetFinanceExplain(args);
628
- case "DYNAINFO":
629
- return this.GetDynainfoExplain(args);
630
-
631
- case 'CLOSE':
632
- case 'C':
633
- case 'VOL':
634
- case 'V':
635
- case 'OPEN':
636
- case 'O':
637
- case 'HIGH':
638
- case 'H':
639
- case 'LOW':
640
- case 'L':
641
- case 'AMOUNT':
642
- case 'AMO':
643
- return this.GetOtherSymbolExplain( {FunctionName:funcName, Args:args} ,node);
644
-
645
- //绘图函数
646
- case "PLOYLINE":
647
- return `当满足条件${args[0]}时以${args[1]}位置为顶点画折线连接`;
648
- case "DRAWLINE":
649
- return `当满足条件${args[0]}时,在${args[1]}位置画直线起点,当满足条件${args[2]}时,在${args[3]}位置画直线终点,${args[4]}表示是否延长`;
650
- case "DRAWSL":
651
- return `当满足条件${args[0]}时,在${args[1]}位置画斜线线性回归,${args[2]}斜率,${args[3]}长度,${args[4]}方向`;
652
- case "DRAWKLINE":
653
- return 'K线';
654
- case "DRAWICON":
655
- return `当满足条件${args[0]}时,在${args[1]}位置画${args[2]}号图标`;
656
- case "DRAWTEXT":
657
- return `当满足条件${args[0]}时,在${args[1]}位置书写文字`;
658
- case "DRAWTEXT_FIX":
659
- return `当满足条件${args[0]}时,在横轴${args[1]}纵轴${args[2]}位置书写文字`;
660
- case "DRAWNUMBER":
661
- return `当满足条件${args[0]}时,在${args[1]}位置书写数字`;
662
- case "DRAWNUMBER_FIX":
663
- return `当满足条件${args[0]}时,在横轴${args[1]}纵轴${args[2]}位置书写数字`;
664
- case "RGB":
665
- return `自定色[${args[0]},${args[1]},${args[2]}]`;
666
- case "DRAWBAND":
667
- return '画带状线';
668
- case "DRAWRECTREL":
669
- return "相对位置上画矩形.";
670
- case "DRAWGBK":
671
- return "填充背景";
672
- case "STICKLINE":
673
- var barType="";
674
- if (args[4]==-1) barType="虚线空心柱";
675
- else if (args[4]==0) barType="实心柱";
676
- else barType="实线空心柱";
677
- return `当满足条件${args[0]}时, 在${args[1]}和${args[2]}位置之间画柱状线,宽度为${args[3]},${barType}`;
678
-
679
- default:
680
- this.ThrowUnexpectedNode(node,`函数${funcName}不存在`);
681
- }
682
- }
683
-
684
- this.GetDynainfoExplain=function(args)
685
- {
686
- const DATA_NAME_MAP=new Map(
687
- [
688
- [3,"前收盘价"], [4,"开盘价"], [5,"最高价"], [6,"最低价"], [7,"现价"], [8,'总量'], [9,"现量"],
689
- [10,"总金额"], [11,"均价"], [12,"日涨跌"], [13,"振幅"], [14,"涨幅"], [15,"开盘时的成交金额"],
690
- [16,"前5日每分钟均量"], [17,"量比"], [18,"上涨家数"], [19,"下跌家数"]
691
- ]);
692
-
693
- var id=args[0];
694
- if (DATA_NAME_MAP.has(id)) return DATA_NAME_MAP.get(id);
695
-
696
- return `即时行情[${id}]`;
697
- }
698
-
699
- this.GetFinanceExplain=function(args)
700
- {
701
- const DATA_NAME_MAP=new Map(
702
- [
703
- [1,"总股本"], [2,"市场类型"], [3,"沪深品种类型"], [4,"沪深行业代码"], [5,"B股"], [6,"H股"], [7,"流通股本[股]"], [8,"股东人数[户]"], [9,"资产负债率%"],
704
- [10,"总资产"], [11,"流动资产"], [12,"固定资产"], [13,"无形资产"], [15,"流动负债"], [16,"少数股东权益"]
705
-
706
- ]);
707
- var id=args[0];
708
-
709
- if (DATA_NAME_MAP.has(id)) return DATA_NAME_MAP.get(id);
710
-
711
- return `财务数据[${id}]`;
712
- }
713
-
714
- this.GetZIGExplain=function(funcName,args)
715
- {
716
- var value=args[0];
717
- if (value==0) value="开盘价";
718
- else if (value==1) value="最高价";
719
- else if (value==2) value="最低价";
720
- else if (value==3) value="收盘价";
721
-
722
- switch(funcName)
723
- {
724
- case "PEAK":
725
- return `${value}的${args[1]}%之字转向的前${args[2]}个波峰值`;
726
- case "PEAKBARS":
727
- return `${value}的${args[1]}5%之字转向的前${args[2]}个波峰位置`;
728
- case "ZIG":
729
- return `${value}的${args[1]}的之字转向`;
730
- case "ZIGA":
731
- return `${value}变化${args[1]}的之字转向`;
732
- case "TROUGH":
733
- return `${value}的${args[1]}%之字转向的前${args[2]}个波谷值`;
734
- case "TROUGHBARS":
735
- return `${value}的${args[1]}%之字转向的前${args[2]}个波谷位置`;
736
- }
737
- }
738
-
739
- this.GetColorExplain=function(colorName)
740
- {
741
- const COLOR_MAP=new Map(
742
- [
743
- ['COLORBLACK','黑色'],['COLORBLUE','蓝色'],['COLORGREEN','绿色'],['COLORCYAN','青色'],['COLORRED','红色'],
744
- ['COLORMAGENTA','洋红色'],['COLORBROWN','棕色'],['COLORLIGRAY','淡灰色'],['COLORGRAY','深灰色'],['COLORLIBLUE','淡蓝色'],
745
- ['COLORLIGREEN','淡绿色'],['COLORLICYAN','淡青色'],['COLORLIRED','淡红色'],['COLORLIMAGENTA','淡洋红色'],['COLORWHITE','白色'],['COLORYELLOW','黄色']
746
- ]);
747
-
748
- if (COLOR_MAP.has(colorName)) return COLOR_MAP.get(colorName);
749
-
750
- //COLOR 自定义色
751
- //格式为COLOR+“RRGGBB”:RR、GG、BB表示红色、绿色和蓝色的分量,每种颜色的取值范围是00-FF,采用了16进制。
752
- //例如:MA5:MA(CLOSE,5),COLOR00FFFF 表示纯红色与纯绿色的混合色:COLOR808000表示淡蓝色和淡绿色的混合色。
753
- if (colorName.indexOf('COLOR')==0) return '#'+colorName.substr(5);
754
-
755
- return 'rgb(30,144,255)';
756
- }
757
-
758
- this.GetLineWidthExplain=function(lineWidth)
759
- {
760
- var width=parseInt(lineWidth.replace("LINETHICK",""));
761
- if (IFrameSplitOperator.IsPlusNumber(width)) return width;
762
- return 1;
763
- }
764
-
765
- this.SymbolPeriodExplain=function(valueName,period)
766
- {
767
- const mapStockDataName=new Map(
768
- [
769
- ['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"], ['OPEN',"开盘价"], ['O',"开盘价"],
770
- ['HIGH',"最高价"],['H',"最高价"], ['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],
771
- ['VOLINSTK',"持仓量"]
772
- ]);
773
- //MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH,SEASON,YEAR
774
- const mapPeriodName=new Map(
775
- [
776
- ["MIN1","1分钟"], ["MIN5", "5分钟"], ["MIN15", "15分钟"], ["MIN30","30分钟"],["MIN60","60分钟"],
777
- ["DAY","日"],["WEEK","周"], ["MONTH", "月"], ['SEASON',"季"], ["YEAR", "年"],["WEEK2","双周"], ["HALFYEAR", "半年"]
778
- ]);
779
-
780
- var dataName=valueName;
781
- if (mapStockDataName.has(valueName)) dataName=mapStockDataName.get(valueName);
782
-
783
- var periodName=period;
784
- if (mapPeriodName.has(period)) periodName=mapPeriodName.get(period);
785
-
786
- return `${dataName}[取${periodName}数据]`;
787
- }
788
-
789
- this.GetOtherSymbolExplain=function(obj, node)
790
- {
791
- const mapStockDataName=new Map(
792
- [
793
- ['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"], ['OPEN',"开盘价"], ['O',"开盘价"],
794
- ['HIGH',"最高价"],['H',"最高价"], ['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],
795
- ['VOLINSTK',"持仓量"]
796
- ]);
797
-
798
- if (obj.FunctionName)
799
- {
800
- var args=obj.Args;
801
- var dataName=mapStockDataName.get(obj.FunctionName);
802
- return `[${args[0]}]${dataName}`;
803
- }
804
- else if (obj.Literal)
805
- {
806
- var value=obj.Literal.toUpperCase();
807
- var args=value.split("$");
808
- if (!mapStockDataName.has(args[1])) return "";
809
- var symbol=args[0];
810
- var dataName=mapStockDataName.get(args[1]);
811
- return `[${symbol}]${dataName}`;
812
- }
813
- }
814
-
815
- this.IsDrawFunction=function(name)
816
- {
817
- let setFunctionName=new Set(
818
- [
819
- "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE','DRAWKLINE_IF','PLOYLINE',
820
- 'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",
821
- 'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2"
822
- ]);
823
- if (setFunctionName.has(name)) return true;
824
-
825
- return false;
826
- }
827
-
828
- //赋值
829
- this.VisitAssignmentExpression=function(node)
830
- {
831
- let left=node.Left;
832
- if (left.Type!=Syntax.Identifier) this.ThrowUnexpectedNode(node);
833
-
834
- let varName=left.Name;
835
-
836
- let right=node.Right;
837
- let value=null;
838
- if (right.Type==Syntax.BinaryExpression || right.Type==Syntax.LogicalExpression)
839
- value=this.VisitBinaryExpression(right);
840
- else if (right.Type==Syntax.CallExpression)
841
- value=this.VisitCallExpression(right);
842
- else if (right.Type==Syntax.Literal)
843
- {
844
- value=right.Value;
845
- if (IFrameSplitOperator.IsString(value) && right.Value.indexOf("$")>0)
846
- value=this.GetOtherSymbolExplain({ Literal:value }, node);
847
- }
848
- else if (right.Type==Syntax.Identifier) //右值是变量
849
- value=this.ReadVariable(right.Name,right);
850
- else if (right.Type==Syntax.MemberExpression)
851
- value=this.ReadMemberVariable(right);
852
- else if (right.Type==Syntax.UnaryExpression)
853
- {
854
- if (right.Operator=='-')
855
- {
856
- var tempValue=this.GetNodeValue(right.Argument);
857
- value='-'+tempValue;
858
- }
859
- else
860
- {
861
- value=right.Argument.Value;
862
- }
863
- }
864
-
865
- JSConsole.Complier.Log('[JSExplainer::VisitAssignmentExpression]' , varName, ' = ',value);
866
- this.VarTable.set(varName,value);
867
- }
868
-
869
- this.ReadMemberVariable=function(node)
870
- {
871
- var obj=node.Object;
872
- var member=node.Property;
873
-
874
- let maiObj;
875
- if (obj.Type==Syntax.BinaryExpression || obj.Type==Syntax.LogicalExpression )
876
- maiObj=this.VisitBinaryExpression(obj);
877
- else if (obj.Type==Syntax.CallExpression)
878
- maiObj=this.VisitCallExpression(obj);
879
- else
880
- {
881
- if (member.Name.indexOf('#')>0)
882
- {
883
- var aryValue=member.Name.split("#");
884
- var value=`${obj.Name}的${aryValue[0]}[周期${aryValue[1]}]`;
885
- }
886
- else
887
- {
888
- var value=`${obj.Name}的${member.Name}`;
889
- }
890
- return value;
891
- }
892
-
893
- if (!maiObj) return null;
894
- var value=maiObj[member.Name];
895
- if (value) return value;
896
-
897
- return null;
898
- }
899
-
900
- //逻辑运算
901
- this.VisitBinaryExpression=function(node)
902
- {
903
- let stack=[];
904
- stack.push(node);
905
- let temp=null;
906
-
907
- while(stack.length!=0)
908
- {
909
- temp=stack[stack.length-1];
910
- if (temp.Left && node!=temp.Left && node!=temp.Right)
911
- {
912
- stack.push(temp.Left);
913
- }
914
- else if (temp.Right && node!=temp.Right)
915
- {
916
- stack.push(temp.Right);
917
- }
918
- else
919
- {
920
- let value=stack.pop();
921
- if (value.Type==Syntax.BinaryExpression) //只遍历操作符就可以
922
- {
923
- let leftValue=this.GetNodeValue(value.Left);
924
- let rightValue=this.GetNodeValue(value.Right);
925
-
926
- JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] BinaryExpression',value , leftValue, rightValue);
927
- value.Out=null; //保存中间值
928
-
929
- value.Out=`(${leftValue} ${value.Operator} ${rightValue})`;
930
- if (leftValue=="收盘价" && rightValue=="开盘价")
931
- {
932
- if (value.Operator==">") value.Out='(收阳线)';
933
- else if (value.Operator=="<") value.Out='(收阴线)';
934
- else if (value.Operator=="=") value.Out='(平盘)';
935
- }
936
- else if (leftValue=="开盘价" && rightValue=="收盘价")
937
- {
938
- if (value.Operator=="<") value.Out='(收阳线)';
939
- else if (value.Operator==">") value.Out='(收阴线)';
940
- else if (value.Operator=="=") value.Out='(平盘)';
941
- }
942
-
943
- JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] BinaryExpression',value);
944
- }
945
- else if (value.Type==Syntax.LogicalExpression)
946
- {
947
- let leftValue=this.GetNodeValue(value.Left);
948
- let rightValue=this.GetNodeValue(value.Right);
949
-
950
- JSConsole.Complier.Log('[JSExecute::VisitBinaryExpression] LogicalExpression',value , leftValue, rightValue);
951
- value.Out=null; //保存中间值
952
-
953
- switch(value.Operator)
954
- {
955
- case '&&':
956
- case 'AND':
957
- value.Out=`(${leftValue} 并且 ${rightValue})`;
958
- break;
959
- case '||':
960
- case 'OR':
961
- value.Out=`(${leftValue} 或者 ${rightValue})`;
962
- break;
963
- }
964
-
965
- JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] LogicalExpression',value);
966
- }
967
-
968
- node=temp;
969
- }
970
- }
971
-
972
- return node.Out;
973
-
974
- }
975
-
976
- this.GetNodeValue=function(node)
977
- {
978
- switch(node.Type)
979
- {
980
- case Syntax.Literal: //数字
981
- return node.Value;
982
- case Syntax.UnaryExpression:
983
- if (node.Operator=='-')
984
- {
985
- let value=this.GetNodeValue(node.Argument);
986
- return '-'+value;
987
- }
988
- return node.Argument.Value;
989
- case Syntax.Identifier:
990
- let value=this.ReadVariable(node.Name,node);
991
- return value;
992
- case Syntax.BinaryExpression:
993
- case Syntax.LogicalExpression:
994
- return node.Out;
995
- case Syntax.CallExpression:
996
- return this.VisitCallExpression(node);
997
- default:
998
- this.ThrowUnexpectedNode(node);
999
- }
1000
- }
1001
-
1002
- //读取变量
1003
- this.ReadVariable=function(name,node)
1004
- {
1005
- if (this.ConstVarTable.has(name))
1006
- {
1007
- let data=this.ConstVarTable.get(name);
1008
- return data;
1009
- }
1010
-
1011
- if (g_JSComplierResource.IsCustomVariant(name)) return this.ReadCustomVariant(name,node); //读取自定义变量
1012
-
1013
- if (this.VarTable.has(name)) return this.VarTable.get(name);
1014
-
1015
- if (name.indexOf('#')>0)
1016
- {
1017
- var aryPeriod=name.split('#');
1018
- return this.SymbolPeriodExplain(aryPeriod[0],aryPeriod[1]);
1019
- }
1020
-
1021
- this.ThrowUnexpectedNode(node, '变量'+name+'不存在');
1022
- return name;
1023
- }
1024
-
1025
- this.ThrowUnexpectedNode=function(node,message)
1026
- {
1027
- let marker=node.Marker;
1028
- let msg=message || "执行异常";
1029
-
1030
- return this.ErrorHandler.ThrowError(marker.Index,marker.Line,marker.Column,msg);
1031
-
1032
- }
1033
-
1034
- this.ThrowError=function()
1035
- {
1036
-
1037
- }
1038
- }
1039
-
1040
-
1041
- JSComplier.Explain=function(code,option, errorCallback)
1042
- {
1043
- //异步调用
1044
- //var asyncExecute= async function() es5不能执行 去掉异步
1045
- var asyncExplain= function()
1046
- {
1047
- try
1048
- {
1049
- JSConsole.Complier.Log('[JSComplier.Explain]',code,option);
1050
-
1051
- JSConsole.Complier.Log('[JSComplier.Explain] parser .....');
1052
- let parser=new JSParser(code);
1053
- parser.Initialize();
1054
- let program=parser.ParseScript();
1055
-
1056
- let ast=program;
1057
- JSConsole.Complier.Log('[JSComplier.Explain] parser finish.', ast);
1058
-
1059
- JSConsole.Complier.Log('[JSComplier.Explain] explain .....');
1060
- let execute=new JSExplainer(ast,option);
1061
- execute.ErrorCallback=errorCallback; //执行错误回调
1062
- execute.JobList=parser.Node.GetDataJobList();
1063
- execute.JobList.push({ID:JS_EXECUTE_JOB_ID.JOB_RUN_SCRIPT});
1064
- let result=execute.Run();
1065
-
1066
- }catch(error)
1067
- {
1068
- JSConsole.Complier.Log(error);
1069
-
1070
- if (errorCallback) errorCallback(error, option.CallbackParam);
1071
- }
1072
- }
1073
-
1074
- asyncExplain();
1075
-
1076
- JSConsole.Complier.Log('[JSComplier.Explain] async explain.');
1077
- }