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.
- package/package.json +15 -47
- package/src/jscommon/umychart.resource/js/codemirror/javascript.js +1 -1
- package/.babelrc +0 -6
- package/.vscode/settings.json +0 -4
- package/Makefile +0 -9
- package/README.md +0 -452
- package/index.js +0 -17
- package/postcss.config.js +0 -5
- package/src/index.html +0 -18
- package/src/jscommon/backup/announcement.png +0 -0
- package/src/jscommon/backup/announcement2.png +0 -0
- package/src/jscommon/backup/blocktrading.png +0 -0
- package/src/jscommon/backup/investor.png +0 -0
- package/src/jscommon/backup/pforecast.png +0 -0
- package/src/jscommon/backup/research.png +0 -0
- package/src/jscommon/backup/tradedetail.png +0 -0
- package/src/jscommon/backup/umychart - backup.js +0 -17631
- package/src/jscommon/backup/umychart.macro.js +0 -4
- package/src/jscommon/backup/umychart.macro.vue.js +0 -3
- package/src/jscommon/commonindextree.json +0 -92
- package/src/jscommon/index.html +0 -13
- package/src/jscommon/jschinamapdata.js +0 -3
- package/src/jscommon/umychart.NetworkFilterTest.js +0 -48803
- package/src/jscommon/umychart.aliYunnetwork.js +0 -47
- package/src/jscommon/umychart.cninfo.components/readme.txt +0 -1
- package/src/jscommon/umychart.complier.js +0 -25293
- package/src/jscommon/umychart.complier.node/umychart.complier.controller.js +0 -559
- package/src/jscommon/umychart.complier.node/umychart.complier.node.js +0 -7043
- package/src/jscommon/umychart.complier.node/umychart.data.node.js +0 -816
- package/src/jscommon/umychart.console.js +0 -12
- package/src/jscommon/umychart.deal.js +0 -1452
- package/src/jscommon/umychart.dragdiv.js +0 -48
- package/src/jscommon/umychart.index.data.js +0 -4132
- package/src/jscommon/umychart.js +0 -90542
- package/src/jscommon/umychart.keyboard.js +0 -1659
- package/src/jscommon/umychart.listctrl.js +0 -690
- package/src/jscommon/umychart.mind.js +0 -2203
- package/src/jscommon/umychart.network.js +0 -44
- package/src/jscommon/umychart.news.js +0 -823
- package/src/jscommon/umychart.node.build/buildall.bat +0 -1
- package/src/jscommon/umychart.node.build/umychart.node.bat +0 -1
- package/src/jscommon/umychart.node.build/umychart.node.export.js +0 -40
- package/src/jscommon/umychart.regressiontest.js +0 -400
- package/src/jscommon/umychart.report.js +0 -5803
- package/src/jscommon/umychart.scrollbar.js +0 -1345
- package/src/jscommon/umychart.stock.js +0 -4218
- package/src/jscommon/umychart.style.js +0 -625
- package/src/jscommon/umychart.testdata.js +0 -150
- package/src/jscommon/umychart.uniapp.build/buildall.bat +0 -1
- package/src/jscommon/umychart.uniapp.build/umychart.bat +0 -1
- package/src/jscommon/umychart.uniapp.build/umychart.export.js +0 -70
- package/src/jscommon/umychart.user.js +0 -137
- package/src/jscommon/umychart.version.js +0 -30
- package/src/jscommon/umychart.vue/umychart.aliYunnetwork.vue.js +0 -56
- package/src/jscommon/umychart.vue.build/buildall.bat +0 -4
- package/src/jscommon/umychart.vue.build/copy_codemirror.bat +0 -2
- package/src/jscommon/umychart.vue.build/umychart.aliYunnetwork.vue.export.js +0 -9
- package/src/jscommon/umychart.vue.build/umychart.dragdiv.bat +0 -1
- package/src/jscommon/umychart.vue.build/umychart.dragdiv.export.js +0 -6
- package/src/jscommon/umychart.vue.build/umychart.index.data.bat +0 -1
- package/src/jscommon/umychart.vue.build/umychart.index.data.export.js +0 -4
- package/src/jscommon/umychart.vue.build/umychart.listctrl.vue.export.js +0 -15
- package/src/jscommon/umychart.vue.build/umychart.regressiontest.vue.export.js +0 -7
- package/src/jscommon/umychart.vue.build/umychart.regressiontest.wechat.export.js +0 -12
- package/src/jscommon/umychart.vue.build/umychart.stock.bat +0 -1
- package/src/jscommon/umychart.vue.build/umychart.stock.vue.export.js +0 -16
- package/src/jscommon/umychart.vue.build/umychart.testdata.bat +0 -3
- package/src/jscommon/umychart.vue.build/umychart.testdata.vue.export.js +0 -7
- package/src/jscommon/umychart.vue.build/umychart.vue.bat +0 -8
- package/src/jscommon/umychart.vue.build/umychart.vue.export.js +0 -112
- package/src/jscommon/umychart.vue.components/empyt.vue +0 -51
- package/src/jscommon/umychart.vue.components/historydayline.vue +0 -240
- package/src/jscommon/umychart.vue.components/jsloader.adddialog.vue +0 -315
- package/src/jscommon/umychart.vue.components/jsloader.vue +0 -93
- package/src/jscommon/umychart.vue.components/jsvuecontainer.vue +0 -160
- package/src/jscommon/umychart.vue.components/jsvuecontainer2.0.vue +0 -391
- package/src/jscommon/umychart.vue.components/login.vue +0 -178
- package/src/jscommon/umychart.vue.components/queryContent.vue +0 -750
- package/src/jscommon/umychart.vue.components/readme.txt +0 -8
- package/src/jscommon/umychart.vue.components/searchsymbol.vue +0 -299
- package/src/jscommon/umychart.vue.components/simulatetrade.vue +0 -1471
- package/src/jscommon/umychart.vue.components/stockchart.vue +0 -343
- package/src/jscommon/umychart.vue.components/stockchartV2.vue +0 -195
- package/src/jscommon/umychart.vue.components/stockdeal.vue +0 -358
- package/src/jscommon/umychart.vue.components/stockdealcount.vue +0 -262
- package/src/jscommon/umychart.vue.components/stockdeallastest.vue +0 -316
- package/src/jscommon/umychart.vue.components/stockdrawtool.vue +0 -343
- package/src/jscommon/umychart.vue.components/stockfull.vue +0 -355
- package/src/jscommon/umychart.vue.components/stockinfo.demo.vue +0 -153
- package/src/jscommon/umychart.vue.components/stockinfo.vue +0 -685
- package/src/jscommon/umychart.vue.components/stockkline.demo.vue +0 -1904
- package/src/jscommon/umychart.vue.components/stockmultiorder.vue +0 -174
- package/src/jscommon/umychart.vue.components/stockmultiperiod.vue +0 -222
- package/src/jscommon/umychart.vue.components/stockorder.vue +0 -320
- package/src/jscommon/umychart.vue.components/stocktradeinfo.demo.vue +0 -250
- package/src/jscommon/umychart.vue.components/stocktradeinfo.vue +0 -1907
- package/src/jscommon/umychart.vue.components/test.vue +0 -0
- package/src/jscommon/umychart.wechat/getDate.wechat.js +0 -91
- package/src/jscommon/umychart.wechat/lighter.news.wechat.js +0 -262
- package/src/jscommon/umychart.wechat/readme.txt +0 -3
- package/src/jscommon/umychart.wechat/umychart.analyze.wechat.js +0 -551
- package/src/jscommon/umychart.wechat/umychart.apidraw.wechat.js +0 -126
- package/src/jscommon/umychart.wechat/umychart.bigV.wechat.js +0 -2510
- package/src/jscommon/umychart.wechat/umychart.chartframe.wechat.js +0 -2942
- package/src/jscommon/umychart.wechat/umychart.chartpaint.wechat.js +0 -9752
- package/src/jscommon/umychart.wechat/umychart.charttitle.wechat.js +0 -2023
- package/src/jscommon/umychart.wechat/umychart.complier.wechat.js +0 -14726
- package/src/jscommon/umychart.wechat/umychart.console.wechat.js +0 -8
- package/src/jscommon/umychart.wechat/umychart.coordinatedata.wechat.js +0 -3654
- package/src/jscommon/umychart.wechat/umychart.data.wechat.js +0 -2243
- package/src/jscommon/umychart.wechat/umychart.element.wechart.js +0 -132
- package/src/jscommon/umychart.wechat/umychart.explainer.wechat.js +0 -1077
- package/src/jscommon/umychart.wechat/umychart.extendchart.wechat.js +0 -1140
- package/src/jscommon/umychart.wechat/umychart.framesplit.wechat.js +0 -2247
- package/src/jscommon/umychart.wechat/umychart.hqIndexformula.wechat.js +0 -941
- package/src/jscommon/umychart.wechat/umychart.index.data.wechat.js +0 -3628
- package/src/jscommon/umychart.wechat/umychart.index.wechat.js +0 -4074
- package/src/jscommon/umychart.wechat/umychart.klineinfo.wechat.js +0 -836
- package/src/jscommon/umychart.wechat/umychart.markethot.js +0 -50
- package/src/jscommon/umychart.wechat/umychart.network.wechart.js +0 -62
- package/src/jscommon/umychart.wechat/umychart.news.wechat.js +0 -3568
- package/src/jscommon/umychart.wechat/umychart.regressiontest.wechat.js +0 -412
- package/src/jscommon/umychart.wechat/umychart.report.wechat.js +0 -3983
- package/src/jscommon/umychart.wechat/umychart.resource.wechat.js +0 -919
- package/src/jscommon/umychart.wechat/umychart.shareimage.wechat.js +0 -681
- package/src/jscommon/umychart.wechat/umychart.simulatetrade.wechat.js +0 -238
- package/src/jscommon/umychart.wechat/umychart.stock.wechat.js +0 -4035
- package/src/jscommon/umychart.wechat/umychart.style.wechat.js +0 -419
- package/src/jscommon/umychart.wechat/umychart.uniapp.canvas.helper.js +0 -99
- package/src/jscommon/umychart.wechat/umychart.user.wechat.js +0 -588
- package/src/jscommon/umychart.wechat/umychart.userlog.wechat.js +0 -240
- package/src/jscommon/umychart.wechat/umychart.vedio.wechat.js +0 -112
- package/src/jscommon/umychart.wechat/umychart.version.wechat.js +0 -36
- package/src/jscommon/umychart.wechat/umychart.wechat.3.0.js +0 -12055
- package/src/jscommon/umychart.wechat/umychart.wechat.js +0 -15460
- package/src/jscommon/umychart.worker.js +0 -114
- package/src/jscommon/umychart.ws.stock.js +0 -110
- package/src/jscommon/umychart_python/.vscode/launch.json +0 -15
- package/src/jscommon/umychart_python/__init__.py +0 -4
- package/src/jscommon/umychart_python/build.cmd +0 -2
- package/src/jscommon/umychart_python/setup.py +0 -25
- package/src/jscommon/umychart_python/umychart_cache_testcase.py +0 -165
- package/src/jscommon/umychart_python/umychart_complier_data.py +0 -781
- package/src/jscommon/umychart_python/umychart_complier_help.py +0 -175
- package/src/jscommon/umychart_python/umychart_complier_job.py +0 -193
- package/src/jscommon/umychart_python/umychart_complier_jsalgorithm.py +0 -4144
- package/src/jscommon/umychart_python/umychart_complier_jscomplier.py +0 -177
- package/src/jscommon/umychart_python/umychart_complier_jsexecute.py +0 -517
- package/src/jscommon/umychart_python/umychart_complier_jsparser.py +0 -864
- package/src/jscommon/umychart_python/umychart_complier_jssymboldata.py +0 -1238
- package/src/jscommon/umychart_python/umychart_complier_jssymboldata_cache.py +0 -146
- package/src/jscommon/umychart_python/umychart_complier_jssymboldata_json.py +0 -106
- package/src/jscommon/umychart_python/umychart_complier_pandas_help.py +0 -80
- package/src/jscommon/umychart_python/umychart_complier_scanner.py +0 -554
- package/src/jscommon/umychart_python/umychart_complier_testcase.py +0 -362
- package/src/jscommon/umychart_python/umychart_complier_util.py +0 -30
- package/src/jscommon/umychart_python/umychart_webtemplate.py +0 -131
- package/src/jscommon/umychart_python/updatehqchartweb.bat +0 -5
- package/src/jscommon/vendor.js +0 -2
- package/src/pages/block.list.demo.page/App.vue +0 -117
- package/src/pages/block.list.demo.page/index.js +0 -12
- package/src/pages/brushTool.demo.page/App.vue +0 -19
- package/src/pages/brushTool.demo.page/index.js +0 -12
- package/src/pages/container.demo.page/App.vue +0 -118
- package/src/pages/container.demo.page/index.js +0 -18
- package/src/pages/dataZoom.demo.page/App.vue +0 -265
- package/src/pages/dataZoom.demo.page/components/dataZoom.vue +0 -303
- package/src/pages/dataZoom.demo.page/index.js +0 -12
- package/src/pages/historydayline.demo.page/App.vue +0 -57
- package/src/pages/historydayline.demo.page/index.js +0 -12
- package/src/pages/hq.demo.page/App.vue +0 -163
- package/src/pages/hq.demo.page/index.js +0 -12
- package/src/pages/hqchart.black/App.vue +0 -90
- package/src/pages/hqchart.black/components/searchsymbol.vue +0 -299
- package/src/pages/hqchart.black/components/stockdrawtool.vue +0 -300
- package/src/pages/hqchart.black/components/stockfull.vue +0 -313
- package/src/pages/hqchart.black/components/stockinfo.vue +0 -428
- package/src/pages/hqchart.black/components/stockkline.demo.vue +0 -1652
- package/src/pages/hqchart.black/components/stocktradeinfo.vue +0 -1337
- package/src/pages/hqchart.black/index.js +0 -30
- package/src/pages/hqchart.black/router/candlestickChart.vue +0 -108
- package/src/pages/hqchart.black/router/pricePointsTable.vue +0 -294
- package/src/pages/hqchart.black/router/stockDeallas.vue +0 -417
- package/src/pages/hqchart.black/router/timeShareChart.vue +0 -108
- package/src/pages/hqchart.page/App.vue +0 -101
- package/src/pages/hqchart.page/index.js +0 -18
- package/src/pages/index/App.vue +0 -1408
- package/src/pages/index/index.js +0 -7
- package/src/pages/indexHq/App.vue +0 -110
- package/src/pages/indexHq/index.js +0 -18
- package/src/pages/login.demo.page/App.vue +0 -22
- package/src/pages/login.demo.page/index.js +0 -12
- package/src/pages/queryContent.demo.page/App.vue +0 -29
- package/src/pages/queryContent.demo.page/index.js +0 -18
- package/src/pages/ranking.black/App.vue +0 -199
- package/src/pages/ranking.black/index.js +0 -18
- package/src/pages/search.demo.page/App.vue +0 -28
- package/src/pages/search.demo.page/index.js +0 -12
- package/src/pages/simulatetrade.demo.page/app.vue +0 -121
- package/src/pages/simulatetrade.demo.page/index.js +0 -17
- package/src/pages/stockdeal.demo.page/App.vue +0 -63
- package/src/pages/stockdeal.demo.page/index.js +0 -19
- package/src/pages/stockdealcount.demo.page/App.vue +0 -37
- package/src/pages/stockdealcount.demo.page/index.js +0 -12
- package/src/pages/stockdeallastest.demo.page/App.vue +0 -74
- package/src/pages/stockdeallastest.demo.page/index.js +0 -18
- package/src/pages/stockinfo.demo.page/App.vue +0 -92
- package/src/pages/stockinfo.demo.page/index.html +0 -13
- package/src/pages/stockinfo.demo.page/index.js +0 -19
- package/src/pages/stockkline.demo.page/App.vue +0 -55
- package/src/pages/stockkline.demo.page/index.js +0 -18
- package/src/pages/stockmultiorder.demo.page/App.vue +0 -149
- package/src/pages/stockmultiorder.demo.page/index.js +0 -18
- package/src/pages/stockmultiperiod.demo.page/App.vue +0 -87
- package/src/pages/stockmultiperiod.demo.page/index.js +0 -18
- package/src/pages/stockorder.demo.page/App.vue +0 -69
- package/src/pages/stockorder.demo.page/index.js +0 -18
- package/src/pages/test/App.vue +0 -22
- package/src/pages/test/index.js +0 -7
- package/src/pages/tradeinfopage/app.vue +0 -40
- package/src/pages/tradeinfopage/index.js +0 -7
- package/src/pages/tradeinfopage/tradeinfo.html +0 -12
- package/src/utils/urlObj.js +0 -81
- package/src/vendor.js +0 -2
- 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
|