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,177 +0,0 @@
1
- # Copyright (c) 2018 jones
2
- #
3
- # http://www.apache.org/licenses/LICENSE-2.0
4
- #
5
- # 开源项目 https://github.com/jones2000/HQChart
6
- #
7
- # jones_2000@163.com
8
-
9
-
10
- import sys
11
- import json
12
- from umychart_complier_scanner import Error
13
- from umychart_complier_jsparser import JSParser, Tokenizer
14
- from umychart_complier_jssymboldata import g_JSComplierResource
15
- from umychart_complier_jsexecute import JSExecute , ArgumentItem
16
- from umychart_complier_job import SymbolOption ,RequestOption ,HQ_DATA_TYPE
17
- from umychart_complier_help import Variant
18
- #################################################################################################
19
- #
20
- #
21
- #
22
- ##################################################################################################
23
-
24
-
25
-
26
- class JSComplier:
27
- @staticmethod # 词法分析
28
- def Tokenize(code):
29
- print ('[JSComplier::Tokenize] ', code)
30
- tokenizer=Tokenizer(code)
31
- tokens=[]
32
- try:
33
- while True :
34
- token=tokenizer.GetNextToken()
35
- if not token:
36
- break
37
-
38
- tokens.append(token)
39
- except Error as e:
40
- print ('[JSComplier::Tokenize] Error', e)
41
-
42
- return tokens
43
-
44
- @staticmethod #语法解析 生成抽象语法树(Abstract Syntax Tree)
45
- def Parse(code):
46
- print('[JSComplier::Parse]', code)
47
-
48
- parser=JSParser(code)
49
- parser.Initialize()
50
- program=parser.ParseScript()
51
- ast=program
52
- return ast
53
-
54
- @staticmethod #执行器
55
- def Execute(code,option=SymbolOption()) :
56
- print('[JSComplier::Execute] ', code)
57
- parser=JSParser(code)
58
- parser.Initialize()
59
- program=parser.ParseScript()
60
- ast=program
61
- print('[JSComplier.Execute] parser finish.')
62
-
63
- execute=JSExecute(ast,option)
64
- execute.JobList=parser.Node.GetDataJobList()
65
- result=execute.Execute()
66
-
67
- print('[JSComplier.Execute] execute finish.')
68
- return result
69
-
70
- @staticmethod # 修改API地址
71
- def SetDomain(domain=None, cacheDomain=None) :
72
- if domain:
73
- g_JSComplierResource.Domain = domain
74
- if cacheDomain:
75
- g_JSComplierResource.CacheDomain = cacheDomain
76
-
77
-
78
- # 指标信息
79
- class ScriptIndexItem:
80
- def __init__(self, name, id, script, args=[]) :
81
- self.Name=name #指标名字 ,
82
- self.ID=id #指标ID
83
- self.Script=script #指标脚本
84
- self.Arguments=args #指标参数 ArgumentItem 数组
85
-
86
- class StockInfo :
87
- def __init__(self, name=None, symbol=None) :
88
- self.Name=name
89
- self.Symbol=symbol
90
-
91
- class IndexResult:
92
- def __init__(self, error=None, outVar=None) :
93
- self.Error=error
94
- self.OutVar=outVar
95
- self.Stock=None
96
- self.Date=None
97
- self.Time=None
98
-
99
- # 把返回的结果转换成json格式
100
- def ToJson(self) :
101
- try :
102
- jsonData=json.dumps(self, default=lambda obj:obj.__dict__) # ScriptIndexConsole.Serializable)
103
- return jsonData
104
- # with open('data.txt','w') as file:
105
- # file.write(jsonData)
106
- except BaseException as error :
107
- print(error)
108
-
109
- class ScriptIndexConsole:
110
- def __init__(self, obj) : # obj = ScriptIndexItem()
111
- self.Script=obj.Script
112
- self.ID=obj.ID
113
- self.Arguments=obj.Arguments # 指标默认参数
114
- self.Name=obj.Name
115
- self.OutVar=None
116
- self.AST=None # 语法树
117
- self.Parser=None
118
-
119
- def ExecuteScript(self, obj=SymbolOption(), rebuild=True) : # rebuild 是否重新编译执行
120
- try :
121
- print('[ScriptIndexConsole::ExecuteScript] ', self.Script)
122
- if (self.AST and self.Parser and rebuild==False):
123
- parser=self.Parser
124
- ast= self.AST
125
- print('[ScriptIndexConsole.ExecuteScript] use cache ast.')
126
- else :
127
- parser=JSParser(self.Script)
128
- parser.Initialize()
129
- program=parser.ParseScript()
130
- ast=program
131
- self.AST=ast #缓存语法树
132
- self.Parser=parser
133
- print('[ScriptIndexConsole.ExecuteScript] parser finish.')
134
-
135
- option=SymbolOption(symbol=obj.Symbol, hqDataType=obj.HQDataType, right=obj.Right, period=obj.Period,
136
- request=RequestOption(maxDataCount=obj.MaxRequestDataCount, maxMinuteDayCount=obj.MaxRequestMinuteDayCount),
137
- args=self.Arguments if obj.Arguments==None else obj.Arguments) # 个股指定指标参数优先使用
138
-
139
- if obj and obj.ProcCreateSymbolData:
140
- option.ProcCreateSymbolData=obj.ProcCreateSymbolData
141
-
142
- execute=JSExecute(ast,option)
143
- execute.JobList=parser.Node.GetDataJobList()
144
- outVar=execute.Execute()
145
- print('[ScriptIndexConsole.ExecuteScript] execute finish.')
146
-
147
- result=IndexResult(outVar=outVar)
148
- result.Stock=StockInfo(name=execute.SymbolData.Name, symbol=execute.SymbolData.Symbol) # 股票信息
149
- result.Date=execute.SymbolData.Data.GetDate() # 数据对应的日期
150
- if (obj.HQDataType==HQ_DATA_TYPE.KLINE_ID and obj.Period>=4) :
151
- result.Time=execute.SymbolData.Data.GetTime() # 数据对应的时间
152
-
153
- return result
154
- except Error as error :
155
- result=IndexResult(error=error)
156
- return result
157
-
158
- except ValueError as error:
159
- result=IndexResult(error=error)
160
- return result
161
-
162
- except BaseException as error :
163
- result=IndexResult(error=error)
164
- return result
165
-
166
- @staticmethod # 把返回的结果转换成json格式
167
- def ToJson(data) :
168
- try :
169
- jsonData=json.dumps(data, default=lambda obj:obj.__dict__) # ScriptIndexConsole.Serializable)
170
- return jsonData
171
- # with open('data.txt','w') as file:
172
- # file.write(jsonData)
173
- except BaseException as error :
174
- print(error)
175
-
176
-
177
-
@@ -1,517 +0,0 @@
1
- # Copyright (c) 2018 jones
2
- #
3
- # http://www.apache.org/licenses/LICENSE-2.0
4
- #
5
- # 开源项目 https://github.com/jones2000/HQChart
6
- #
7
- # jones_2000@163.com
8
-
9
-
10
- ######################################################################################
11
- #
12
- #
13
- #
14
- #####################################################################################
15
-
16
- import sys
17
- from umychart_complier_scanner import ErrorHandler
18
- from umychart_complier_job import JS_EXECUTE_JOB_ID, JobItem
19
- from umychart_complier_jsparser import Syntax,BinaryExpression,AssignmentExpression
20
- from umychart_complier_jssymboldata import JSSymbolData, g_JSComplierResource
21
- from umychart_complier_jsalgorithm import JSAlgorithm, JSDraw
22
- from umychart_complier_help import JSComplierHelper
23
-
24
- #################################################################################################
25
- #
26
- # AST执行器
27
- #
28
- #################################################################################################
29
-
30
- # 参数结构体
31
- class ArgumentItem :
32
- def __init__(self, name, value) :
33
- self.Name=name
34
- self.Value=value
35
-
36
- # 输出变量
37
- class OutVariable:
38
- def __init__(self, name, type, data=None, draw=None) :
39
- self.Name=name
40
- self.Data=data
41
- self.Type=type
42
- self.Draw=draw
43
-
44
-
45
- class JSExecute :
46
- def __init__(self, ast, option=None) :
47
- self.AST=ast # 语法树
48
-
49
- self.ErrorHandler=ErrorHandler()
50
- self.VarTable={} # 变量表
51
- self.OutVarTable=[] # 输出变量
52
- self.Arguments=[]
53
-
54
- # 脚本自动变量表, 只读
55
- self.ConstVarTable={
56
- # 个股数据
57
- 'CLOSE':None, 'VOL':None, 'OPEN':None, 'HIGH':None, 'LOW':None, 'AMOUNT':None,
58
- 'C':None, 'V':None, 'O':None, 'H':None, 'L':None, 'VOLR':None,
59
-
60
- # 日期类
61
- 'DATE':None, 'YEAR':None, 'MONTH':None, 'PERIOD':None, 'WEEK':None,
62
-
63
- # 大盘数据
64
- 'INDEXA':None, 'INDEXC':None, 'INDEXH':None, 'INDEXL':None, 'INDEXO':None, 'INDEXV':None, 'INDEXADV':None, 'INDEXDEC':None,
65
-
66
- # 到最后交易日的周期数
67
- 'CURRBARSCOUNT':None,
68
- # 流通股本(手)
69
- 'CAPITAL':None,
70
- # 换手率
71
- 'EXCHANGE':None,
72
- 'SETCODE':None
73
- }
74
-
75
- # 创建外部的数据类SymbolData, ProcCreateSymbolData 创建类函数
76
- if option and option.ProcCreateSymbolData:
77
- self.SymbolData=option.ProcCreateSymbolData(ast=ast,option=option, procThrow=self.ThrowUnexpectedNode)
78
- else :
79
- self.SymbolData=JSSymbolData(ast=ast,option=option, procThrow=self.ThrowUnexpectedNode)
80
- self.Algorithm=JSAlgorithm(errorHandler=self.ErrorHandler,symbolData=self.SymbolData)
81
- self.Draw=JSDraw(errorHandler=self.ErrorHandler,symbolData=self.SymbolData)
82
-
83
- self.JobList=[] # 执行的任务队列
84
-
85
- if option and option.Arguments:
86
- self.Arguments=option.Arguments
87
-
88
-
89
- def Execute(self) :
90
- self.SymbolData.RunDownloadJob(self.JobList) # 准备数据
91
- outVar=self.RunAST()
92
- return outVar
93
-
94
- def ReadSymbolData(self,name,node) :
95
- if name in ('CLOSE','C','VOL','V','OPEN','O','HIGH','H','LOW','L','AMOUNT') :
96
- return self.SymbolData.GetSymbolCacheData(name)
97
- elif name == 'VOLR' : # 量比
98
- pass
99
- # return self.SymbolData.GetVolRateCacheData(node)
100
- elif name in ('INDEXA','INDEXC','INDEXH','INDEXO','INDEXV','INDEXL','INDEXADV','INDEXDEC') : # 大盘数据
101
- return self.SymbolData.GetIndexCacheData(name)
102
- elif name== 'CURRBARSCOUNT':
103
- return self.SymbolData.GetCurrBarsCount()
104
- elif name== 'CAPITAL':
105
- return self.SymbolData.GetFinanceCacheData(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_CAPITAL_DATA, node=node)
106
- elif name== 'EXCHANGE':
107
- return self.SymbolData.GetFinanceCacheData(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_EXCHANGE_DATA, node=node)
108
- elif name== 'SETCODE':
109
- return self.SymbolData.SETCODE()
110
-
111
- elif name== 'DATE':
112
- return self.SymbolData.DATE()
113
- elif name== 'YEAR':
114
- return self.SymbolData.YEAR()
115
- elif name== 'MONTH':
116
- return self.SymbolData.MONTH()
117
- elif name== 'WEEK':
118
- return self.SymbolData.WEEK()
119
- elif name== 'PERIOD':
120
- return self.SymbolData.PERIOD()
121
-
122
- # 读取变量
123
- def ReadVariable(self, name,node) :
124
- if name in self.ConstVarTable :
125
- data=self.ConstVarTable[name]
126
-
127
- if not data : # 动态加载,用到再加载
128
- data=self.ReadSymbolData(name,node)
129
- self.ConstVarTable[name]=data
130
- return data
131
-
132
- if name in self.VarTable :
133
- return self.VarTable[name]
134
-
135
- self.ThrowUnexpectedNode(node, '变量'+name+'不存在')
136
- return None
137
-
138
- # 单数据转成数组 个数和历史数据一致
139
- def SingleDataToArrayData(self,value) :
140
- count=self.SymbolData.Data.GetCount()
141
- result=[value]*count
142
- return result
143
-
144
- def RunAST(self) :
145
- # 预定义的变量
146
- for item in self.Arguments :
147
- self.VarTable[item.Name]=item.Value
148
-
149
- if not self.AST or not self.AST.Body :
150
- self.ThrowError()
151
-
152
- for item in self.AST.Body :
153
- self.VisitNode(item)
154
- if item.Type==Syntax.ExpressionStatement and item.Expression :
155
- if item.Expression.Type==Syntax.AssignmentExpression and item.Expression.Operator==':' and item.Expression.Left :
156
- assignmentItem=item.Expression
157
- varName=assignmentItem.Left.Name
158
- outVar=self.VarTable[varName]
159
- if not isinstance(outVar, list) :
160
- outVar=self.SingleDataToArrayData(outVar)
161
-
162
- self.OutVarTable.append(OutVariable(name=varName,data=outVar,type=0))
163
-
164
- elif (item.Expression.Type==Syntax.CallExpression) :
165
- callItem=item.Expression
166
- if (JSDraw.IsDrawFunction(callItem.Callee.Name)) :
167
- draw=callItem.Draw
168
- draw.Name=callItem.Callee.Name
169
- self.OutVarTable.append(OutVariable(name=draw.Name, draw=draw, type=1))
170
-
171
- elif (item.Expression.Type==Syntax.SequenceExpression) :
172
- varName=None
173
- draw=None
174
- color=None
175
- lineWidth=None
176
- colorStick=False
177
- pointDot=False
178
- circleDot=False
179
- lineStick=False
180
- stick=False
181
- volStick=False
182
- isShow=True
183
- isExData=False
184
- for itemExpression in item.Expression.Expression :
185
- if (itemExpression.Type==Syntax.AssignmentExpression and itemExpression.Operator==':' and itemExpression.Left) :
186
- varName=itemExpression.Left.Name
187
- varValue=self.VarTable[varName]
188
- if not JSComplierHelper.IsArray(varValue) :
189
- varValue=self.SingleDataToArrayData(varValue)
190
- self.VarTable[varName]=varValue # 把单数值转化成数组放到变量表里
191
-
192
- elif (itemExpression.Type==Syntax.Identifier) :
193
- value=itemExpression.Name
194
- if (value=='COLORSTICK') :
195
- colorStick=True
196
- elif (value=='POINTDOT') :
197
- pointDot=True
198
- elif (value=='CIRCLEDOT') :
199
- circleDot=True
200
- elif (value=='LINESTICK') :
201
- lineStick=True
202
- elif (value=='STICK') :
203
- stick=True
204
- elif (value=='VOLSTICK') :
205
- volStick=True
206
- elif (value.find('COLOR')==0) :
207
- color=value
208
- elif (value.find('LINETHICK')==0) :
209
- lineWidth=value
210
- elif (value.find('NODRAW')==0) :
211
- isShow=False
212
- elif (value.find('EXDATA')==0) :
213
- isExData=True # 扩展数据, 不显示再图形里面
214
-
215
- elif (itemExpression.Type==Syntax.Literal) : #常量
216
- aryValue=self.SingleDataToArrayData(itemExpression.Value)
217
- varName=str(itemExpression.Value)
218
- self.VarTable[varName,aryValue] # 把常量放到变量表里
219
-
220
- elif (itemExpression.Type==Syntax.CallExpression and JSDraw.IsDrawFunction(itemExpression.Callee.Name)) :
221
- draw=itemExpression.Draw
222
- draw.Name=itemExpression.Callee.Name
223
-
224
- if (pointDot and varName) : # 圆点
225
- outVar=self.VarTable[varName]
226
- if (not JSComplierHelper.IsArray(outVar)) :
227
- outVar=self.SingleDataToArrayData(outVar)
228
- value=OutVariable(name=varName,data=outVar, type=3)
229
- value.Radius=2
230
- if color :
231
- value.Color=color
232
- if lineWidth :
233
- value.LineWidth=lineWidth
234
- self.OutVarTable.append(value)
235
-
236
- elif (circleDot and varName) : # 圆点
237
- outVar=self.VarTable[varName]
238
- if not JSComplierHelper.IsArray(outVar) :
239
- outVar=self.SingleDataToArrayData(outVar)
240
- value=OutVariable(name=varName,data=outVar, type=3)
241
- value.Radius=1.3
242
- if color:
243
- value.Color=color
244
- if lineWidth:
245
- value.LineWidth=lineWidth
246
- self.OutVarTable.append(value)
247
-
248
- elif (lineStick and varName) : # LINESTICK 同时画出柱状线和指标线
249
- outVar=self.VarTable[varName]
250
- value=OutVariable(name=varName, data=outVar, type=4)
251
- if color:
252
- value.Color=color
253
- if lineWidth:
254
- value.LineWidth=lineWidth
255
- self.OutVarTable.append(value)
256
-
257
- elif (stick and varName) : # STICK 画柱状线
258
- outVar=self.VarTable[varName]
259
- value=OutVariable(name=varName,data=outVar, type=5)
260
- if color :
261
- value.Color=color
262
- if lineWidth :
263
- value.LineWidth=lineWidth
264
- self.OutVarTable.append(value)
265
-
266
- elif (volStick and varName) : # VOLSTICK 画彩色柱状线
267
- outVar=self.VarTable[varName]
268
- value=OutVariable(name=varName,data=outVar, type=6)
269
- if color :
270
- value.Color=color
271
- self.OutVarTable.append(value)
272
-
273
- elif (varName and color) :
274
- outVar=self.VarTable[varName]
275
- if not JSComplierHelper.IsArray(outVar) :
276
- outVar=self.SingleDataToArrayData(outVar)
277
- value=OutVariable(name=varName,data=outVar, type=0)
278
- value.Color=color
279
- if (lineWidth) :
280
- value.LineWidth=lineWidth
281
- if (isShow == False) :
282
- value.IsShow = False
283
- if (isExData==True) :
284
- value.IsExData = True
285
- self.OutVarTable.append(value)
286
-
287
- elif (draw and color) :
288
- value=OutVariable(name=draw.Name,data=draw, type=1)
289
- value.Color=color
290
- self.OutVarTable.append(value)
291
-
292
- elif (colorStick and varName) : # CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
293
- outVar=self.VarTable[varName]
294
- value=OutVariable(name=varName,data=outVar, type=2)
295
- value.Color=color
296
- self.OutVarTable.append(value)
297
-
298
- elif (varName) :
299
- outVar=self.VarTable[varName]
300
- value=OutVariable(name=varName,data=outVar, type=0)
301
- if color :
302
- value.Color=color
303
- if lineWidth :
304
- value.LineWidth=lineWidth
305
- if isShow==False :
306
- value.IsShow=False
307
- if isExData==True :
308
- value.IsExData = True
309
- self.OutVarTable.append(value)
310
-
311
- return self.OutVarTable
312
-
313
-
314
- def VisitNode(self, node) :
315
- if node.Type==Syntax.SequenceExpression :
316
- self.VisitSequenceExpression(node)
317
- elif node.Type==Syntax.ExpressionStatement :
318
- self.VisitNode(node.Expression)
319
- elif node.Type==Syntax.AssignmentExpression :
320
- self.VisitAssignmentExpression(node)
321
- elif node.Type in (Syntax.BinaryExpression, Syntax.LogicalExpression) :
322
- self.VisitBinaryExpression(node)
323
- elif node.Type==Syntax.CallExpression :
324
- self.VisitCallExpression(node)
325
-
326
- def VisitSequenceExpression(self, node) :
327
- for item in node.Expression :
328
- self.VisitNode(item)
329
-
330
- # 函数调用
331
- def VisitCallExpression(self, node) :
332
- funcName=node.Callee.Name
333
- args=[]
334
- for item in node.Arguments :
335
- if item.Type==Syntax.BinaryExpression or item.Type==Syntax.LogicalExpression :
336
- value=self.VisitBinaryExpression(item)
337
- elif item.Type==Syntax.CallExpression :
338
- value=self.VisitCallExpression(item)
339
- else :
340
- value=self.GetNodeValue(item)
341
- args.append(value)
342
-
343
- # console.log('[JSExecute::VisitCallExpression]' , funcName, '(', args.toString() ,')');
344
-
345
- if funcName=='DYNAINFO': # 行情最新数据
346
- node.Out=self.SymbolData.GetLatestCacheData(int(args[0]))
347
- elif funcName=='STICKLINE':
348
- node.Draw=self.Draw.STICKLINE(args[0],args[1],args[2],args[3],args[4])
349
- node.Out=[]
350
- elif funcName=='DRAWTEXT':
351
- node.Draw=self.Draw.DRAWTEXT(args[0],args[1],args[2])
352
- node.Out=[]
353
- elif funcName=='SUPERDRAWTEXT':
354
- node.Draw=self.Draw.SUPERDRAWTEXT(args[0],args[1],args[2],args[3],args[4])
355
- node.Out=[]
356
- elif funcName=='DRAWICON':
357
- node.Draw=self.Draw.DRAWICON(args[0],args[1],int(args[2]))
358
- node.Out=[]
359
- elif funcName=='DRAWLINE':
360
- node.Draw=self.Draw.DRAWLINE(args[0],args[1],args[2],args[3],int(args[4]))
361
- node.Out=node.Draw.DrawData
362
- elif funcName=='DRAWBAND':
363
- node.Draw=self.Draw.DRAWBAND(args[0],args[1],args[2],args[3])
364
- node.Out=[]
365
- elif funcName=='DRAWKLINE':
366
- node.Draw=self.Draw.DRAWKLINE(args[0],args[1],args[2],args[3])
367
- node.Out=[]
368
- elif funcName=='DRAWKLINE_IF':
369
- node.Draw=self.Draw.DRAWKLINE_IF(args[0],args[1],args[2],args[3],args[4])
370
- node.Out=[]
371
- elif funcName in ('PLOYLINE','POLYLINE') :
372
- node.Draw=self.Draw.POLYLINE(args[0],args[1])
373
- node.Out=node.Draw.DrawData
374
- elif funcName=='DRAWNUMBER':
375
- node.Draw=self.Draw.DRAWNUMBER(args[0],args[1],args[2])
376
- node.Out=node.Draw.DrawData.Value
377
- elif funcName=="DRAWCHANNEL":
378
- node.Draw=self.Draw.DRAWCHANNEL(args[0],args[1],args[2],args[3],int(args[4]),args[5],args[6])
379
- node.Out=[]
380
- elif funcName=='CODELIKE':
381
- node.Out=self.SymbolData.CODELIKE(args[0])
382
- elif funcName=='NAMELIKE':
383
- node.Out=self.SymbolData.NAMELIKE(args[0])
384
- elif funcName=='REFDATE':
385
- node.Out=self.SymbolData.REFDATE(args[0],args[1])
386
- elif funcName=='FINANCE':
387
- node.Out=self.SymbolData.GetFinanceCacheData(args[0],node)
388
- elif funcName=="MARGIN":
389
- node.Out=self.SymbolData.GetMarginCacheData(int(args[0]),node)
390
- elif funcName=="HK2SHSZ":
391
- node.Out=self.SymbolData.GetHKToSHSZCacheData(args[0],node)
392
- elif funcName=="NEWS":
393
- node.Out=self.SymbolData.GetNewsAnalysisCacheData(args[0],node)
394
- elif funcName in ('UPCOUNT','DOWNCOUNT') :
395
- node.Out=self.SymbolData.GetIndexIncreaseCacheData(funcName,args[0],node)
396
- else :
397
- node.Out=self.Algorithm.CallFunction(funcName, args, node)
398
-
399
- return node.Out
400
-
401
- # 赋值
402
- def VisitAssignmentExpression(self, node) :
403
- left=node.Left
404
- if left.Type!=Syntax.Identifier :
405
- self.ThrowUnexpectedNode(node)
406
-
407
- varName=left.Name
408
- right=node.Right
409
- value=None
410
-
411
- if right.Type==Syntax.BinaryExpression or right.Type==Syntax.LogicalExpression :
412
- value=self.VisitBinaryExpression(right)
413
- elif right.Type==Syntax.CallExpression :
414
- value=self.VisitCallExpression(right)
415
- elif right.Type==Syntax.Literal :
416
- value=right.Value
417
- elif right.Type==Syntax.Identifier : # 右值是变量
418
- value=self.ReadVariable(right.Name,right)
419
- elif right.Type==Syntax.UnaryExpression: # 带符号常量
420
- if (right.Operator=="-") :
421
- tempValue=self.GetNodeValue(right.Argument)
422
- value=self.Algorithm.Subtract(0,tempValue)
423
- else :
424
- value=right.Argument.Value
425
-
426
- # console.log('[JSExecute::VisitAssignmentExpression]' , varName, ' = ',value);
427
- self.VarTable[varName]=value
428
-
429
- # 逻辑运算
430
- def VisitBinaryExpression(self, node) :
431
- stack=[]
432
- stack.append(node)
433
- temp=None
434
-
435
- while len(stack)!=0 :
436
- temp=stack[-1]
437
- if isinstance(temp,(BinaryExpression,AssignmentExpression)) and temp.Left and node!=temp.Left and node!=temp.Right :
438
- stack.append(temp.Left)
439
- elif isinstance(temp,(BinaryExpression,AssignmentExpression)) and temp.Right and node!=temp.Right :
440
- stack.append(temp.Right)
441
- else :
442
- value=stack.pop()
443
- if value.Type==Syntax.BinaryExpression : # 只遍历操作符就可以
444
- leftValue=self.GetNodeValue(value.Left)
445
- rightValue=self.GetNodeValue(value.Right)
446
-
447
- # console.log('[JSExecute::VisitBinaryExpression] BinaryExpression',value , leftValue, rightValue);
448
- value.Out=None # 保存中间值
449
-
450
- if value.Operator=='-':
451
- value.Out=self.Algorithm.Subtract(leftValue,rightValue)
452
- elif value.Operator=='*':
453
- value.Out=self.Algorithm.Multiply(leftValue,rightValue)
454
- elif value.Operator== '/':
455
- value.Out=self.Algorithm.Divide(leftValue,rightValue)
456
- elif value.Operator== '+':
457
- value.Out=self.Algorithm.Add(leftValue,rightValue)
458
- elif value.Operator== '>':
459
- value.Out=self.Algorithm.GT(leftValue,rightValue)
460
- elif value.Operator== '>=':
461
- value.Out=self.Algorithm.GTE(leftValue,rightValue)
462
- elif value.Operator== '<':
463
- value.Out=self.Algorithm.LT(leftValue,rightValue)
464
- elif value.Operator== '<=':
465
- value.Out=self.Algorithm.LTE(leftValue,rightValue)
466
- elif value.Operator in ('=','=='):
467
- value.Out=self.Algorithm.EQ(leftValue,rightValue)
468
- elif value.Operator in ('!=','<>') :
469
- value.Out=self.Algorithm.NEQ(leftValue,rightValue)
470
-
471
- # console.log('[JSExecute::VisitBinaryExpression] BinaryExpression',value);
472
- elif value.Type==Syntax.LogicalExpression :
473
- leftValue=self.GetNodeValue(value.Left)
474
- rightValue=self.GetNodeValue(value.Right)
475
-
476
- # console.log('[JSExecute::VisitBinaryExpression] LogicalExpression',value , leftValue, rightValue);
477
- value.Out=None # 保存中间值
478
-
479
- if value.Operator in ('&&','AND') :
480
- value.Out=self.Algorithm.And(leftValue,rightValue)
481
- elif value.Operator in ('||','OR') :
482
- value.Out=self.Algorithm.Or(leftValue,rightValue)
483
-
484
- # console.log('[JSExecute::VisitBinaryExpression] LogicalExpression',value);
485
-
486
- node=temp
487
-
488
- return node.Out
489
-
490
- def GetNodeValue(self, node) :
491
- if node.Type==Syntax.Literal: #数字
492
- return node.Value
493
- elif node.Type==Syntax.UnaryExpression:
494
- if node.Operator=='-' :
495
- value=self.GetNodeValue(node.Argument)
496
- return self.Algorithm.Subtract(0,value)
497
- return node.Argument.Value
498
- elif node.Type==Syntax.Identifier:
499
- value=self.ReadVariable(node.Name,node)
500
- return value
501
- elif node.Type in (Syntax.BinaryExpression,Syntax.LogicalExpression) :
502
- return node.Out
503
- elif node.Type==Syntax.CallExpression:
504
- return self.VisitCallExpression(node)
505
- else :
506
- self.ThrowUnexpectedNode(node)
507
-
508
-
509
- def ThrowUnexpectedNode(self, node,message="执行异常") :
510
- marker=node.Marker
511
- msg=message
512
-
513
- return self.ErrorHandler.ThrowError(marker.Index,marker.Line,marker.Column,msg)
514
-
515
-
516
- def ThrowError(self) :
517
- pass