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,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