hqchart 1.1.12687 → 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 (228) hide show
  1. package/lib/umychart.vue.js +94 -50
  2. package/package.json +15 -47
  3. package/src/jscommon/umychart.resource/js/codemirror/javascript.js +1 -1
  4. package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +409 -115
  5. package/src/jscommon/umychart.vue/umychart.vue.js +409 -115
  6. package/.babelrc +0 -6
  7. package/.vscode/settings.json +0 -4
  8. package/Makefile +0 -9
  9. package/README.md +0 -452
  10. package/index.js +0 -17
  11. package/postcss.config.js +0 -5
  12. package/src/index.html +0 -18
  13. package/src/jscommon/backup/announcement.png +0 -0
  14. package/src/jscommon/backup/announcement2.png +0 -0
  15. package/src/jscommon/backup/blocktrading.png +0 -0
  16. package/src/jscommon/backup/investor.png +0 -0
  17. package/src/jscommon/backup/pforecast.png +0 -0
  18. package/src/jscommon/backup/research.png +0 -0
  19. package/src/jscommon/backup/tradedetail.png +0 -0
  20. package/src/jscommon/backup/umychart - backup.js +0 -17631
  21. package/src/jscommon/backup/umychart.macro.js +0 -4
  22. package/src/jscommon/backup/umychart.macro.vue.js +0 -3
  23. package/src/jscommon/commonindextree.json +0 -92
  24. package/src/jscommon/index.html +0 -13
  25. package/src/jscommon/jschinamapdata.js +0 -3
  26. package/src/jscommon/umychart.NetworkFilterTest.js +0 -48803
  27. package/src/jscommon/umychart.aliYunnetwork.js +0 -47
  28. package/src/jscommon/umychart.cninfo.components/readme.txt +0 -1
  29. package/src/jscommon/umychart.complier.js +0 -25291
  30. package/src/jscommon/umychart.complier.node/umychart.complier.controller.js +0 -559
  31. package/src/jscommon/umychart.complier.node/umychart.complier.node.js +0 -7043
  32. package/src/jscommon/umychart.complier.node/umychart.data.node.js +0 -816
  33. package/src/jscommon/umychart.console.js +0 -12
  34. package/src/jscommon/umychart.deal.js +0 -1452
  35. package/src/jscommon/umychart.dragdiv.js +0 -48
  36. package/src/jscommon/umychart.index.data.js +0 -4132
  37. package/src/jscommon/umychart.js +0 -90257
  38. package/src/jscommon/umychart.keyboard.js +0 -1659
  39. package/src/jscommon/umychart.listctrl.js +0 -690
  40. package/src/jscommon/umychart.mind.js +0 -2203
  41. package/src/jscommon/umychart.network.js +0 -44
  42. package/src/jscommon/umychart.news.js +0 -823
  43. package/src/jscommon/umychart.node.build/buildall.bat +0 -1
  44. package/src/jscommon/umychart.node.build/umychart.node.bat +0 -1
  45. package/src/jscommon/umychart.node.build/umychart.node.export.js +0 -40
  46. package/src/jscommon/umychart.regressiontest.js +0 -400
  47. package/src/jscommon/umychart.report.js +0 -5803
  48. package/src/jscommon/umychart.scrollbar.js +0 -1345
  49. package/src/jscommon/umychart.stock.js +0 -4218
  50. package/src/jscommon/umychart.style.js +0 -618
  51. package/src/jscommon/umychart.testdata.js +0 -150
  52. package/src/jscommon/umychart.uniapp.build/buildall.bat +0 -1
  53. package/src/jscommon/umychart.uniapp.build/umychart.bat +0 -1
  54. package/src/jscommon/umychart.uniapp.build/umychart.export.js +0 -70
  55. package/src/jscommon/umychart.user.js +0 -137
  56. package/src/jscommon/umychart.version.js +0 -30
  57. package/src/jscommon/umychart.vue/umychart.aliYunnetwork.vue.js +0 -56
  58. package/src/jscommon/umychart.vue.build/buildall.bat +0 -4
  59. package/src/jscommon/umychart.vue.build/copy_codemirror.bat +0 -2
  60. package/src/jscommon/umychart.vue.build/umychart.aliYunnetwork.vue.export.js +0 -9
  61. package/src/jscommon/umychart.vue.build/umychart.dragdiv.bat +0 -1
  62. package/src/jscommon/umychart.vue.build/umychart.dragdiv.export.js +0 -6
  63. package/src/jscommon/umychart.vue.build/umychart.index.data.bat +0 -1
  64. package/src/jscommon/umychart.vue.build/umychart.index.data.export.js +0 -4
  65. package/src/jscommon/umychart.vue.build/umychart.listctrl.vue.export.js +0 -15
  66. package/src/jscommon/umychart.vue.build/umychart.regressiontest.vue.export.js +0 -7
  67. package/src/jscommon/umychart.vue.build/umychart.regressiontest.wechat.export.js +0 -12
  68. package/src/jscommon/umychart.vue.build/umychart.stock.bat +0 -1
  69. package/src/jscommon/umychart.vue.build/umychart.stock.vue.export.js +0 -16
  70. package/src/jscommon/umychart.vue.build/umychart.testdata.bat +0 -3
  71. package/src/jscommon/umychart.vue.build/umychart.testdata.vue.export.js +0 -7
  72. package/src/jscommon/umychart.vue.build/umychart.vue.bat +0 -8
  73. package/src/jscommon/umychart.vue.build/umychart.vue.export.js +0 -112
  74. package/src/jscommon/umychart.vue.components/empyt.vue +0 -51
  75. package/src/jscommon/umychart.vue.components/historydayline.vue +0 -240
  76. package/src/jscommon/umychart.vue.components/jsloader.adddialog.vue +0 -315
  77. package/src/jscommon/umychart.vue.components/jsloader.vue +0 -93
  78. package/src/jscommon/umychart.vue.components/jsvuecontainer.vue +0 -160
  79. package/src/jscommon/umychart.vue.components/jsvuecontainer2.0.vue +0 -391
  80. package/src/jscommon/umychart.vue.components/login.vue +0 -178
  81. package/src/jscommon/umychart.vue.components/queryContent.vue +0 -750
  82. package/src/jscommon/umychart.vue.components/readme.txt +0 -8
  83. package/src/jscommon/umychart.vue.components/searchsymbol.vue +0 -299
  84. package/src/jscommon/umychart.vue.components/simulatetrade.vue +0 -1471
  85. package/src/jscommon/umychart.vue.components/stockchart.vue +0 -343
  86. package/src/jscommon/umychart.vue.components/stockchartV2.vue +0 -195
  87. package/src/jscommon/umychart.vue.components/stockdeal.vue +0 -358
  88. package/src/jscommon/umychart.vue.components/stockdealcount.vue +0 -262
  89. package/src/jscommon/umychart.vue.components/stockdeallastest.vue +0 -316
  90. package/src/jscommon/umychart.vue.components/stockdrawtool.vue +0 -343
  91. package/src/jscommon/umychart.vue.components/stockfull.vue +0 -355
  92. package/src/jscommon/umychart.vue.components/stockinfo.demo.vue +0 -153
  93. package/src/jscommon/umychart.vue.components/stockinfo.vue +0 -685
  94. package/src/jscommon/umychart.vue.components/stockkline.demo.vue +0 -1904
  95. package/src/jscommon/umychart.vue.components/stockmultiorder.vue +0 -174
  96. package/src/jscommon/umychart.vue.components/stockmultiperiod.vue +0 -222
  97. package/src/jscommon/umychart.vue.components/stockorder.vue +0 -320
  98. package/src/jscommon/umychart.vue.components/stocktradeinfo.demo.vue +0 -250
  99. package/src/jscommon/umychart.vue.components/stocktradeinfo.vue +0 -1907
  100. package/src/jscommon/umychart.vue.components/test.vue +0 -0
  101. package/src/jscommon/umychart.wechat/getDate.wechat.js +0 -91
  102. package/src/jscommon/umychart.wechat/lighter.news.wechat.js +0 -262
  103. package/src/jscommon/umychart.wechat/readme.txt +0 -3
  104. package/src/jscommon/umychart.wechat/umychart.analyze.wechat.js +0 -551
  105. package/src/jscommon/umychart.wechat/umychart.apidraw.wechat.js +0 -126
  106. package/src/jscommon/umychart.wechat/umychart.bigV.wechat.js +0 -2510
  107. package/src/jscommon/umychart.wechat/umychart.chartframe.wechat.js +0 -2931
  108. package/src/jscommon/umychart.wechat/umychart.chartpaint.wechat.js +0 -9752
  109. package/src/jscommon/umychart.wechat/umychart.charttitle.wechat.js +0 -2023
  110. package/src/jscommon/umychart.wechat/umychart.complier.wechat.js +0 -14726
  111. package/src/jscommon/umychart.wechat/umychart.console.wechat.js +0 -8
  112. package/src/jscommon/umychart.wechat/umychart.coordinatedata.wechat.js +0 -3654
  113. package/src/jscommon/umychart.wechat/umychart.data.wechat.js +0 -2243
  114. package/src/jscommon/umychart.wechat/umychart.element.wechart.js +0 -132
  115. package/src/jscommon/umychart.wechat/umychart.explainer.wechat.js +0 -1077
  116. package/src/jscommon/umychart.wechat/umychart.extendchart.wechat.js +0 -1140
  117. package/src/jscommon/umychart.wechat/umychart.framesplit.wechat.js +0 -2247
  118. package/src/jscommon/umychart.wechat/umychart.hqIndexformula.wechat.js +0 -941
  119. package/src/jscommon/umychart.wechat/umychart.index.data.wechat.js +0 -3628
  120. package/src/jscommon/umychart.wechat/umychart.index.wechat.js +0 -4074
  121. package/src/jscommon/umychart.wechat/umychart.klineinfo.wechat.js +0 -836
  122. package/src/jscommon/umychart.wechat/umychart.markethot.js +0 -50
  123. package/src/jscommon/umychart.wechat/umychart.network.wechart.js +0 -62
  124. package/src/jscommon/umychart.wechat/umychart.news.wechat.js +0 -3568
  125. package/src/jscommon/umychart.wechat/umychart.regressiontest.wechat.js +0 -412
  126. package/src/jscommon/umychart.wechat/umychart.report.wechat.js +0 -3983
  127. package/src/jscommon/umychart.wechat/umychart.resource.wechat.js +0 -919
  128. package/src/jscommon/umychart.wechat/umychart.shareimage.wechat.js +0 -681
  129. package/src/jscommon/umychart.wechat/umychart.simulatetrade.wechat.js +0 -238
  130. package/src/jscommon/umychart.wechat/umychart.stock.wechat.js +0 -4035
  131. package/src/jscommon/umychart.wechat/umychart.style.wechat.js +0 -419
  132. package/src/jscommon/umychart.wechat/umychart.uniapp.canvas.helper.js +0 -99
  133. package/src/jscommon/umychart.wechat/umychart.user.wechat.js +0 -588
  134. package/src/jscommon/umychart.wechat/umychart.userlog.wechat.js +0 -240
  135. package/src/jscommon/umychart.wechat/umychart.vedio.wechat.js +0 -112
  136. package/src/jscommon/umychart.wechat/umychart.version.wechat.js +0 -36
  137. package/src/jscommon/umychart.wechat/umychart.wechat.3.0.js +0 -12051
  138. package/src/jscommon/umychart.wechat/umychart.wechat.js +0 -15460
  139. package/src/jscommon/umychart.worker.js +0 -114
  140. package/src/jscommon/umychart.ws.stock.js +0 -110
  141. package/src/jscommon/umychart_python/.vscode/launch.json +0 -15
  142. package/src/jscommon/umychart_python/__init__.py +0 -4
  143. package/src/jscommon/umychart_python/build.cmd +0 -2
  144. package/src/jscommon/umychart_python/setup.py +0 -25
  145. package/src/jscommon/umychart_python/umychart_cache_testcase.py +0 -165
  146. package/src/jscommon/umychart_python/umychart_complier_data.py +0 -781
  147. package/src/jscommon/umychart_python/umychart_complier_help.py +0 -175
  148. package/src/jscommon/umychart_python/umychart_complier_job.py +0 -193
  149. package/src/jscommon/umychart_python/umychart_complier_jsalgorithm.py +0 -4144
  150. package/src/jscommon/umychart_python/umychart_complier_jscomplier.py +0 -177
  151. package/src/jscommon/umychart_python/umychart_complier_jsexecute.py +0 -517
  152. package/src/jscommon/umychart_python/umychart_complier_jsparser.py +0 -864
  153. package/src/jscommon/umychart_python/umychart_complier_jssymboldata.py +0 -1238
  154. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_cache.py +0 -146
  155. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_json.py +0 -106
  156. package/src/jscommon/umychart_python/umychart_complier_pandas_help.py +0 -80
  157. package/src/jscommon/umychart_python/umychart_complier_scanner.py +0 -554
  158. package/src/jscommon/umychart_python/umychart_complier_testcase.py +0 -362
  159. package/src/jscommon/umychart_python/umychart_complier_util.py +0 -30
  160. package/src/jscommon/umychart_python/umychart_webtemplate.py +0 -131
  161. package/src/jscommon/umychart_python/updatehqchartweb.bat +0 -5
  162. package/src/jscommon/vendor.js +0 -2
  163. package/src/pages/block.list.demo.page/App.vue +0 -117
  164. package/src/pages/block.list.demo.page/index.js +0 -12
  165. package/src/pages/brushTool.demo.page/App.vue +0 -19
  166. package/src/pages/brushTool.demo.page/index.js +0 -12
  167. package/src/pages/container.demo.page/App.vue +0 -118
  168. package/src/pages/container.demo.page/index.js +0 -18
  169. package/src/pages/dataZoom.demo.page/App.vue +0 -265
  170. package/src/pages/dataZoom.demo.page/components/dataZoom.vue +0 -303
  171. package/src/pages/dataZoom.demo.page/index.js +0 -12
  172. package/src/pages/historydayline.demo.page/App.vue +0 -57
  173. package/src/pages/historydayline.demo.page/index.js +0 -12
  174. package/src/pages/hq.demo.page/App.vue +0 -163
  175. package/src/pages/hq.demo.page/index.js +0 -12
  176. package/src/pages/hqchart.black/App.vue +0 -90
  177. package/src/pages/hqchart.black/components/searchsymbol.vue +0 -299
  178. package/src/pages/hqchart.black/components/stockdrawtool.vue +0 -300
  179. package/src/pages/hqchart.black/components/stockfull.vue +0 -313
  180. package/src/pages/hqchart.black/components/stockinfo.vue +0 -428
  181. package/src/pages/hqchart.black/components/stockkline.demo.vue +0 -1652
  182. package/src/pages/hqchart.black/components/stocktradeinfo.vue +0 -1337
  183. package/src/pages/hqchart.black/index.js +0 -30
  184. package/src/pages/hqchart.black/router/candlestickChart.vue +0 -108
  185. package/src/pages/hqchart.black/router/pricePointsTable.vue +0 -294
  186. package/src/pages/hqchart.black/router/stockDeallas.vue +0 -417
  187. package/src/pages/hqchart.black/router/timeShareChart.vue +0 -108
  188. package/src/pages/hqchart.page/App.vue +0 -101
  189. package/src/pages/hqchart.page/index.js +0 -18
  190. package/src/pages/index/App.vue +0 -1408
  191. package/src/pages/index/index.js +0 -7
  192. package/src/pages/indexHq/App.vue +0 -110
  193. package/src/pages/indexHq/index.js +0 -18
  194. package/src/pages/login.demo.page/App.vue +0 -22
  195. package/src/pages/login.demo.page/index.js +0 -12
  196. package/src/pages/queryContent.demo.page/App.vue +0 -29
  197. package/src/pages/queryContent.demo.page/index.js +0 -18
  198. package/src/pages/ranking.black/App.vue +0 -199
  199. package/src/pages/ranking.black/index.js +0 -18
  200. package/src/pages/search.demo.page/App.vue +0 -28
  201. package/src/pages/search.demo.page/index.js +0 -12
  202. package/src/pages/simulatetrade.demo.page/app.vue +0 -121
  203. package/src/pages/simulatetrade.demo.page/index.js +0 -17
  204. package/src/pages/stockdeal.demo.page/App.vue +0 -63
  205. package/src/pages/stockdeal.demo.page/index.js +0 -19
  206. package/src/pages/stockdealcount.demo.page/App.vue +0 -37
  207. package/src/pages/stockdealcount.demo.page/index.js +0 -12
  208. package/src/pages/stockdeallastest.demo.page/App.vue +0 -74
  209. package/src/pages/stockdeallastest.demo.page/index.js +0 -18
  210. package/src/pages/stockinfo.demo.page/App.vue +0 -92
  211. package/src/pages/stockinfo.demo.page/index.html +0 -13
  212. package/src/pages/stockinfo.demo.page/index.js +0 -19
  213. package/src/pages/stockkline.demo.page/App.vue +0 -55
  214. package/src/pages/stockkline.demo.page/index.js +0 -18
  215. package/src/pages/stockmultiorder.demo.page/App.vue +0 -149
  216. package/src/pages/stockmultiorder.demo.page/index.js +0 -18
  217. package/src/pages/stockmultiperiod.demo.page/App.vue +0 -87
  218. package/src/pages/stockmultiperiod.demo.page/index.js +0 -18
  219. package/src/pages/stockorder.demo.page/App.vue +0 -69
  220. package/src/pages/stockorder.demo.page/index.js +0 -18
  221. package/src/pages/test/App.vue +0 -22
  222. package/src/pages/test/index.js +0 -7
  223. package/src/pages/tradeinfopage/app.vue +0 -40
  224. package/src/pages/tradeinfopage/index.js +0 -7
  225. package/src/pages/tradeinfopage/tradeinfo.html +0 -12
  226. package/src/utils/urlObj.js +0 -81
  227. package/src/vendor.js +0 -2
  228. 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