Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
bluefrankey
hqchart
提交
9d47902b
hqchart
项目概览
bluefrankey
/
hqchart
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
hqchart
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9d47902b
编写于
7月 03, 2019
作者:
J
jones
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ver 6150
上级
8f7b1afb
变更
13
展开全部
隐藏空白更改
内联
并排
Showing
13 changed file
with
2301 addition
and
94 deletion
+2301
-94
umychart_python/umychart_complier_data.py
umychart_python/umychart_complier_data.py
+296
-1
umychart_python/umychart_complier_help.py
umychart_python/umychart_complier_help.py
+49
-0
umychart_python/umychart_complier_job.py
umychart_python/umychart_complier_job.py
+29
-1
umychart_python/umychart_complier_jsalgorithm.py
umychart_python/umychart_complier_jsalgorithm.py
+1319
-38
umychart_python/umychart_complier_jscomplier.py
umychart_python/umychart_complier_jscomplier.py
+3
-1
umychart_python/umychart_complier_jsexecute.py
umychart_python/umychart_complier_jsexecute.py
+5
-8
umychart_python/umychart_complier_jsparser.py
umychart_python/umychart_complier_jsparser.py
+2
-2
umychart_python/umychart_complier_jssymboldata.py
umychart_python/umychart_complier_jssymboldata.py
+420
-11
umychart_python/umychart_complier_scanner.py
umychart_python/umychart_complier_scanner.py
+4
-5
umychart_python/umychart_complier_testcase.py
umychart_python/umychart_complier_testcase.py
+147
-6
vuehqchart/src/jscommon/umychart.complier.js
vuehqchart/src/jscommon/umychart.complier.js
+9
-7
webhqchart.demo/jscommon/umychart.complier.js
webhqchart.demo/jscommon/umychart.complier.js
+9
-7
webhqchart/umychart.complier.js
webhqchart/umychart.complier.js
+9
-7
未找到文件。
umychart_python/umychart_complier_data.py
浏览文件 @
9d47902b
...
...
@@ -7,6 +7,8 @@ import sys
import
time
import
datetime
from
umychart_complier_help
import
JSComplierHelper
# 历史K线数据
class
HistoryData
()
:
def
__init__
(
self
)
:
...
...
@@ -71,8 +73,28 @@ class HistoryData() :
return
newData
class
MinuteData
:
def
__init__
(
self
)
:
self
.
Close
=
None
self
.
Open
=
None
self
.
High
=
None
self
.
Low
=
None
self
.
Vol
=
None
self
.
Amount
=
None
self
.
DateTime
=
None
self
.
Increase
=
None
self
.
Risefall
=
None
self
.
AvPrice
=
None
# 单指标数据
class
SingleData
()
:
def
__init__
(
self
,
date
=
None
,
value
=
None
)
:
self
.
Date
=
date
# 日期
self
.
Value
=
value
# 数据 (可以是一个数组)
self
.
TestData
=
None
# 内部测试用
class
ChartData
:
def
__init__
(
self
,
data
,
dataType
)
:
def
__init__
(
self
,
data
,
dataType
=
None
)
:
self
.
Data
=
data
self
.
Period
=
0
# 周期 0=日线 1=周线 2=月线 3=年线
self
.
Right
=
0
# 复权 0=不复权 1=前复权 2=后复权
...
...
@@ -376,4 +398,277 @@ class ChartData:
return
result
# 叠加数据和主数据拟合,去掉主数据没有日期的数据
def
GetOverlayData
(
self
,
overlayData
)
:
count
=
len
(
self
.
Data
)
overlayDataLen
=
len
(
overlayData
)
result
=
[
None
]
*
len
(
self
.
Data
)
i
,
j
=
0
,
0
while
i
<
count
:
date
=
self
.
Data
[
i
].
Date
if
j
>
overlayDataLen
:
result
[
i
]
=
HistoryData
()
result
[
i
].
Date
=
date
i
+=
1
continue
overlayDate
=
overlayData
[
j
].
Date
if
overlayDate
==
date
:
result
[
i
]
=
HistoryData
()
result
[
i
].
Date
=
overlayData
[
j
].
Date
result
[
i
].
YClose
=
overlayData
[
j
].
YClose
result
[
i
].
Open
=
overlayData
[
j
].
Open
result
[
i
].
High
=
overlayData
[
j
].
High
result
[
i
].
Low
=
overlayData
[
j
].
Low
result
[
i
].
Close
=
overlayData
[
j
].
Close
result
[
i
].
Vol
=
overlayData
[
j
].
Vol
result
[
i
].
Amount
=
overlayData
[
j
].
Amount
# 涨跌家数数据
result
[
i
].
Stop
=
overlayData
[
j
].
Stop
result
[
i
].
Up
=
overlayData
[
j
].
Up
result
[
i
].
Down
=
overlayData
[
j
].
Down
result
[
i
].
Unchanged
=
overlayData
[
j
].
Unchanged
j
+=
1
i
+=
1
elif
overlayDate
<
date
:
j
+=
1
else
:
result
[
i
]
=
HistoryData
()
result
[
i
].
Date
=
date
i
+=
1
return
result
# 叠加数据和主数据拟合,去掉主数据没有日期的数据 分钟K线
def
GetOverlayMinuteData
(
self
,
overlayData
)
:
count
=
len
(
self
.
Data
)
overlayDataLen
=
len
(
overlayData
)
result
=
[
None
]
*
len
(
self
.
Data
)
i
,
j
=
0
,
0
while
i
<
count
:
date
=
self
.
Data
[
i
].
Date
time
=
self
.
Data
[
i
].
Time
if
j
>
overlayDataLen
:
result
[
i
]
=
HistoryData
()
result
[
i
].
Date
=
date
result
[
i
].
Time
=
time
i
+=
1
continue
overlayDate
=
overlayData
[
j
].
Date
overlayTime
=
overlayData
[
j
].
Time
if
overlayDate
==
date
and
overlayTime
==
time
:
result
[
i
]
=
HistoryData
()
result
[
i
].
Date
=
overlayData
[
j
].
Date
result
[
i
].
Time
=
overlayData
[
j
].
Time
result
[
i
].
YClose
=
overlayData
[
j
].
YClose
result
[
i
].
Open
=
overlayData
[
j
].
Open
result
[
i
].
High
=
overlayData
[
j
].
High
result
[
i
].
Low
=
overlayData
[
j
].
Low
result
[
i
].
Close
=
overlayData
[
j
].
Close
result
[
i
].
Vol
=
overlayData
[
j
].
Vol
result
[
i
].
Amount
=
overlayData
[
j
].
Amount
# 涨跌家数数据
result
[
i
].
Stop
=
overlayData
[
j
].
Stop
result
[
i
].
Up
=
overlayData
[
j
].
Up
result
[
i
].
Down
=
overlayData
[
j
].
Down
result
[
i
].
Unchanged
=
overlayData
[
j
].
Unchanged
j
+=
1
i
+=
1
elif
overlayDate
<
date
or
(
overlayData
==
date
and
overlayTime
<
time
):
j
+=
1
else
:
result
[
i
]
=
HistoryData
()
result
[
i
].
Date
=
date
result
[
i
].
Time
=
time
i
+=
1
return
result
# 把财报数据拟合到主图数据,返回 SingleData 数组
def
GetFittingFinanceData
(
self
,
financeData
)
:
dataLen
=
len
(
self
.
Data
)
financeLen
=
len
(
financeData
)
result
=
JSComplierHelper
.
CreateArray
(
dataLen
)
i
,
j
=
0
,
0
while
i
<
dataLen
:
date
=
self
.
Data
[
i
].
Date
if
j
+
1
<
financeLen
:
if
financeData
[
j
].
Date
<
date
and
financeData
[
j
+
1
].
Date
<=
date
:
j
+=
1
continue
item
=
SingleData
()
item
.
Date
=
date
if
j
<
financeLen
:
item
.
Value
=
financeData
[
j
].
Value
item
.
TestData
=
financeData
[
j
].
Date
# 财务日期 调试用
else
:
item
.
Value
=
None
item
.
TestData
=
None
result
[
i
]
=
item
i
+=
1
return
result
# 市值计算 financeData.Value 是股数
def
GetFittingMarketValueData
(
self
,
financeData
)
:
dataLen
=
len
(
self
.
Data
)
financeLen
=
len
(
financeData
)
result
=
JSComplierHelper
.
CreateArray
(
dataLen
)
i
,
j
=
0
,
0
while
i
<
dataLen
:
date
=
self
.
Data
[
i
].
Date
price
=
self
.
Data
[
i
].
Close
if
j
+
1
<
financeLen
:
if
financeData
[
j
].
Date
<
date
and
financeData
[
j
+
1
].
Date
<=
date
:
j
+=
1
continue
item
=
SingleData
()
item
.
Date
=
date
item
.
Value
=
financeData
[
j
].
Value
*
price
# 市值计算 收盘价*股数
item
.
TestDate
=
financeData
[
j
].
Date
# 财务日期 调试用
result
[
i
]
=
item
i
+=
1
return
result
# SingleData 转成单数组
def
GetValue
(
self
)
:
dataLen
=
len
(
self
.
Data
)
result
=
JSComplierHelper
.
CreateArray
(
dataLen
)
for
i
in
range
(
dataLen
)
:
if
self
.
Data
[
i
]
and
self
.
Data
[
i
].
Value
!=
None
:
result
[
i
]
=
self
.
Data
[
i
].
Value
return
result
# SingleData 周期合并 日线
def
GetPeriodSingleData
(
self
,
period
)
:
result
=
[]
startDate
,
newData
=
0
,
None
for
i
in
range
(
len
(
self
.
Data
))
:
isNewData
=
False
dayData
=
self
.
Data
[
i
]
if
dayData
==
None
or
dayData
.
Date
==
None
:
continue
if
period
==
1
:
# 周线
fridayDate
=
ChartData
.
GetFirday
(
dayData
.
Date
)
if
fridayDate
!=
startDate
:
isNewData
=
True
startDate
=
fridayDate
elif
period
==
2
:
# 月线
if
int
(
dayData
.
Date
/
100
)
!=
int
(
startDate
/
100
)
:
isNewData
=
True
startDate
=
dayData
.
Date
elif
period
==
3
:
# 年线
if
int
(
dayData
.
Date
/
10000
)
!=
int
(
startDate
/
10000
)
:
isNewData
=
True
startDate
=
dayData
.
Date
if
(
isNewData
)
:
newData
=
SingleData
()
newData
.
Date
=
dayData
.
Date
newData
.
Value
=
dayData
.
Value
result
.
append
(
newData
)
else
:
if
newData
==
None
:
continue
if
dayData
.
Value
==
None
:
continue
if
newData
.
Value
==
None
:
newData
.
Value
=
dayData
.
Value
return
result
# 计算股息率 股息率TTM:过去4个季度现金分红总额/总市值 * 100%
def
CalculateDividendYield
(
self
,
cashData
,
marketValue
)
:
if
not
marketValue
:
return
[]
dataLen
,
cashLen
=
len
(
self
.
Data
),
len
(
cashData
)
dividendYield
=
[]
j
=
0
for
i
in
range
(
dataLen
)
:
day
=
self
.
Data
.
Data
[
i
]
market
=
marketValue
.
MarketValue
[
i
]
if
not
day
or
not
market
:
continue
item
=
SingleData
()
item
.
Date
=
day
.
Date
item
.
Value
=
0
if
(
j
+
1
<
cashLen
)
:
if
(
cashData
[
j
].
Date
<
day
.
Date
and
cashData
[
j
+
1
].
Date
<=
day
.
Date
)
:
j
+=
1
i
-=
1
if
(
j
<
cashLen
)
:
cash
=
cashData
[
j
]
endDate
=
cash
.
Date
+
10000
# 1年有效
if
(
day
.
Date
>=
cash
.
Date
and
day
.
Date
<=
endDate
and
JSComplierHelper
.
IsDivideNumber
(
market
.
Value
)
and
JSComplierHelper
.
IsNumber
(
cash
.
Value
))
:
item
.
Value
=
cash
.
Value
/
market
.
Value
*
100
dividendYield
.
append
(
item
)
return
dividendYield
# 以主图数据 拟合,返回 SingleData 数组
def
GetFittingData
(
self
,
overlayData
)
:
dataLen
=
len
(
self
.
Data
)
result
=
JSComplierHelper
.
CreateArray
(
dataLen
)
i
,
j
=
0
,
0
while
i
<
dataLen
:
date
=
self
.
Data
[
i
].
Date
if
j
>=
overlayData
.
length
:
i
+=
1
continue
overlayDate
=
overlayData
[
j
].
Date
if
overlayDate
==
date
:
item
=
SingleData
()
item
.
Date
=
overlayData
[
j
].
Date
item
.
Value
=
overlayData
[
j
].
Value
result
[
i
]
=
item
j
+=
1
i
+=
1
elif
overlayDate
<
date
:
j
+=
1
else
:
result
[
i
]
=
SingleData
()
result
[
i
].
Date
=
date
i
+=
1
return
result
umychart_python/umychart_complier_help.py
0 → 100644
浏览文件 @
9d47902b
import
sys
class
JSComplierHelper
:
# 公共帮助方法
@
staticmethod
def
IsNumber
(
value
):
return
isinstance
(
value
,(
int
,
float
))
@
staticmethod
def
IsJsonNumber
(
jsData
,
name
):
if
name
not
in
jsData
.
keys
()
:
return
False
return
JSComplierHelper
.
IsNumber
(
jsData
[
name
])
@
staticmethod
def
IsDivideNumber
(
value
):
return
isinstance
(
value
,(
int
,
float
))
and
value
!=
0
@
staticmethod
def
IsJsonDivideNumber
(
jsData
,
name
):
if
name
not
in
jsData
.
keys
()
:
return
False
return
JSComplierHelper
.
IsNumber
(
jsData
[
name
])
and
jsData
[
name
]
!=
0
@
staticmethod
def
IsArray
(
value
)
:
return
isinstance
(
value
,
list
)
@
staticmethod
# 是否是一个有效素组 data!=null and data.length>0
def
IsVaildArray
(
data
)
:
if
not
data
:
return
False
if
not
isinstance
(
data
,
list
):
return
False
if
len
(
data
)
<=
0
:
return
False
return
True
@
staticmethod
def
IsNaN
(
value
)
:
return
value
!=
None
@
staticmethod
def
CreateArray
(
count
,
value
=
None
)
:
if
count
<=
0
:
return
[]
else
:
return
[
value
]
*
count
\ No newline at end of file
umychart_python/umychart_complier_job.py
浏览文件 @
9d47902b
...
...
@@ -142,4 +142,32 @@ class JS_EXECUTE_JOB_ID :
class
JobItem
:
def
__init__
(
self
,
id
,
symbol
=
None
)
:
self
.
ID
=
id
# 任务ID
self
.
Symbol
=
symbol
# 任务的代码 可以为空
\ No newline at end of file
self
.
Symbol
=
symbol
# 任务的代码 可以为空
class
HQ_DATA_TYPE
:
KLINE_ID
=
0
# K线
MINUTE_ID
=
2
# 当日走势图
HISTORY_MINUTE_ID
=
3
# 历史分钟走势图
MULTIDAY_MINUTE_ID
=
4
# 多日走势图
class
RequestOption
:
def
__init__
(
self
,
maxDataCount
=
500
,
maxMinuteDayCount
=
5
)
:
self
.
MaxDataCount
=
maxDataCount
self
.
MaxMinuteDayCount
=
maxMinuteDayCount
class
SymbolOption
:
def
__init__
(
self
,
symbol
=
'600000.sh'
,
hqDataType
=
HQ_DATA_TYPE
.
KLINE_ID
,
right
=
0
,
period
=
0
,
reqeust
=
RequestOption
(
maxDataCount
=
1000
,
maxMinuteDayCount
=
5
),
args
=
[])
:
self
.
HQDataType
=
hqDataType
# 数据类型
self
.
Symbol
=
symbol
# 股票代码
self
.
Right
=
right
# 复权
self
.
Period
=
period
# 周期
self
.
MaxRequestDataCount
=
reqeust
.
MaxDataCount
self
.
MaxRequestMinuteDayCount
=
reqeust
.
MaxMinuteDayCount
self
.
Arguments
=
args
# 指标参数
umychart_python/umychart_complier_jsalgorithm.py
浏览文件 @
9d47902b
此差异已折叠。
点击以展开。
umychart_python/umychart_complier_jscomplier.py
浏览文件 @
9d47902b
...
...
@@ -3,6 +3,8 @@ from umychart_complier_scanner import Error
from
umychart_complier_jsparser
import
JSParser
,
Tokenizer
from
umychart_complier_jssymboldata
import
g_JSComplierResource
from
umychart_complier_jsexecute
import
JSExecute
from
umychart_complier_job
import
SymbolOption
from
umychart_complier_job
import
HQ_DATA_TYPE
#################################################################################################
#
#
...
...
@@ -37,7 +39,7 @@ class JSComplier:
return
ast
@
staticmethod
#执行器
def
Execute
(
code
,
option
=
None
)
:
def
Execute
(
code
,
option
=
SymbolOption
()
)
:
print
(
'[JSComplier::Execute] '
,
code
)
parser
=
JSParser
(
code
)
parser
.
Initialize
()
...
...
umychart_python/umychart_complier_jsexecute.py
浏览文件 @
9d47902b
...
...
@@ -60,7 +60,7 @@ class JSExecute :
'SETCODE'
:
None
}
self
.
SymbolData
=
JSSymbolData
(
ast
=
ast
,
option
=
option
)
self
.
SymbolData
=
JSSymbolData
(
ast
=
ast
,
option
=
option
,
procThrow
=
self
.
ThrowUnexpectedNode
)
self
.
Algorithm
=
JSAlgorithm
(
errorHandler
=
self
.
ErrorHandler
,
symbolData
=
self
.
SymbolData
)
self
.
Draw
=
JSDraw
(
errorHandler
=
self
.
ErrorHandler
,
symbolData
=
self
.
SymbolData
)
...
...
@@ -77,18 +77,15 @@ class JSExecute :
elif
name
==
'VOLR'
:
# 量比
pass
# return self.SymbolData.GetVolRateCacheData(node)
elif
name
in
(
'INDEXA'
,
'INDEXC'
,
'INDEXH'
,
'INDEXH'
,
'INDEXO'
,
'INDEXV'
,
'INDEXL'
,
'INDEXADV'
,
'INDEXDEC'
)
:
# 大盘数据
pass
# return self.SymbolData.GetIndexCacheData(name)
elif
name
in
(
'INDEXA'
,
'INDEXC'
,
'INDEXH'
,
'INDEXO'
,
'INDEXV'
,
'INDEXL'
,
'INDEXADV'
,
'INDEXDEC'
)
:
# 大盘数据
return
self
.
SymbolData
.
GetIndexCacheData
(
name
)
elif
name
==
'CURRBARSCOUNT'
:
pass
# return self.SymbolData.GetCurrBarsCount()
elif
name
==
'CAPITAL'
:
pass
# return self.SymbolData.GetFinanceCacheData(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_CAPITAL_DATA)
return
self
.
SymbolData
.
GetFinanceCacheData
(
JS_EXECUTE_JOB_ID
.
JOB_DOWNLOAD_CAPITAL_DATA
,
node
=
node
)
elif
name
==
'EXCHANGE'
:
pass
# return self.SymbolData.GetFinanceCacheData(JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_EXCHANGE_DATA)
return
self
.
SymbolData
.
GetFinanceCacheData
(
JS_EXECUTE_JOB_ID
.
JOB_DOWNLOAD_EXCHANGE_DATA
,
node
=
node
)
elif
name
==
'SETCODE'
:
return
self
.
SymbolData
.
SETCODE
()
...
...
umychart_python/umychart_complier_jsparser.py
浏览文件 @
9d47902b
...
...
@@ -231,11 +231,11 @@ class Node:
#流通股本(手)
if
varName
==
'CAPITAL'
:
if
JS_EXECUTE_JOB_ID
.
JOB_DOWNLOAD_CAPITAL_DATA
in
self
.
IsNeedFinanceData
:
if
JS_EXECUTE_JOB_ID
.
JOB_DOWNLOAD_CAPITAL_DATA
not
in
self
.
IsNeedFinanceData
:
self
.
IsNeedFinanceData
.
add
(
JS_EXECUTE_JOB_ID
.
JOB_DOWNLOAD_CAPITAL_DATA
)
if
varName
==
'EXCHANGE'
:
if
JS_EXECUTE_JOB_ID
.
JOB_DOWNLOAD_EXCHANGE_DATA
in
self
.
IsNeedFinanceData
:
if
JS_EXECUTE_JOB_ID
.
JOB_DOWNLOAD_EXCHANGE_DATA
not
in
self
.
IsNeedFinanceData
:
self
.
IsNeedFinanceData
.
add
(
JS_EXECUTE_JOB_ID
.
JOB_DOWNLOAD_EXCHANGE_DATA
)
...
...
umychart_python/umychart_complier_jssymboldata.py
浏览文件 @
9d47902b
此差异已折叠。
点击以展开。
umychart_python/umychart_complier_scanner.py
浏览文件 @
9d47902b
...
...
@@ -309,10 +309,10 @@ class Scanner:
type
=
3
# Identifier
if
type
!=
3
and
start
+
len
(
id
)
!=
self
.
Index
:
restore
=
self
.
Index
#
restore=self.Index
self
.
Index
=
start
raise
Messages
.
InvalidEscapedReservedWord
self
.
Index
=
restore
#
self.Index=restore
if
id
==
'AND'
or
id
==
'OR'
:
type
=
7
#Punctuator*/
...
...
@@ -372,7 +372,7 @@ class Scanner:
quote
=
self
.
Source
[
self
.
Index
]
self
.
Index
+=
1
octal
=
False
#
octal=False
str
=
''
while
not
self
.
IsEOF
():
ch
=
self
.
Source
[
self
.
Index
]
...
...
@@ -478,7 +478,7 @@ class Scanner:
elif
Character
.
IsLineTerminator
(
ch
):
self
.
Index
+=
1
if
ch
==
'
\r
'
and
self
.
Source
[
self
.
Index
]
==
'
\n
'
:
self
.
Index
+=
1
;
#回车+换行
self
.
Index
+=
1
#回车+换行
self
.
LineNumber
+=
1
self
.
LineStart
=
self
.
Index
...
...
@@ -496,7 +496,6 @@ class Scanner:
elif
ch
==
'{'
:
#{ } 注释
self
.
Index
+=
1
comment
=
self
.
SkipMultiLineComment
()
else
:
break
...
...
umychart_python/umychart_complier_testcase.py
浏览文件 @
9d47902b
import
sys
from
umychart_complier_jscomplier
import
JSComplier
from
umychart_complier_jscomplier
import
JSComplier
,
SymbolOption
,
HQ_DATA_TYPE
class
TestCase
:
def
__init__
(
self
,
code
,
option
=
SymbolOption
())
:
self
.
Code
=
code
self
.
Option
=
option
def
Run
(
self
):
testCode
=
''
for
item
in
self
.
Code
:
testCode
+=
item
testCode
+=
'
\n
'
result
=
JSComplier
.
Execute
(
testCode
,
self
.
Option
)
return
True
if
result
else
False
def
Test_Tokenize
():
code1
=
'VARHIGH:=IF(VAR1<=REF(HH,-1),REF(H,BARSLAST(VAR1>=REF(HH,1))),DRAWNULL),COLORYELLOW;'
...
...
@@ -47,6 +61,7 @@ def Test_MA() :
'VAR3:MA(C,10);'
,
'VAR4:MA(C,15);'
,
'VAR4:MA(C,30);'
,
'VAR4:MA(C,33);'
,
]
result
=
JSComplier
.
Execute
(
code
[
0
]
+
code
[
1
]
+
code
[
2
]
+
code
[
3
])
...
...
@@ -93,11 +108,137 @@ def Test_SUMBARS() :
'VAR3:SUMBARS(C,O)'
,
'VAR2:C;'
,
]
result
=
JSComplier
.
Execute
(
code
[
0
]
+
code
[
1
])
option
=
SymbolOption
()
option
.
Symbol
=
'000001.sz'
option
.
HQDataType
=
HQ_DATA_TYPE
.
MINUTE_ID
result
=
JSComplier
.
Execute
(
code
[
0
]
+
code
[
1
],
option
)
return
True
if
result
else
False
def
Test_INDEX
():
code
=
[
'VAR3:INDEXA;'
,
'VAR2:INDEXC;'
,
'VAR2:INDEXO;'
,
]
option
=
SymbolOption
()
option
.
Period
=
5
result
=
JSComplier
.
Execute
(
code
[
0
]
+
code
[
1
]
+
code
[
2
],
option
)
return
True
if
result
else
False
def
Test_COUNT
():
code
=
[
'VAR3:COUNT(C,5);'
,
'VAR2:COUNT(O,10);'
,
'VAR2:COUNT(H,20);'
,
]
option
=
SymbolOption
()
result
=
JSComplier
.
Execute
(
code
[
0
]
+
code
[
1
]
+
code
[
2
],
option
)
return
True
if
result
else
False
Test_Add
()
Test_Multiply
()
Test_MAX_MIN
()
Test_SUMBARS
()
\ No newline at end of file
def
Test_HHV_HHL
()
:
case
=
TestCase
(
code
=
[
'VAR3:HHV(C,5);'
,
'VAR2:HHV(O,10);'
,
'VAR2:HHV(H,20);'
,
'VAR3:LLV(H,5);'
,
'VAR4:LLV(H,10);'
,
])
result
=
case
.
Run
()
return
result
def
Test_STD
():
case
=
TestCase
(
code
=
[
'VAR3:STD(C,5);'
,
'VAR2:STD(O,10);'
,
'VAR2:STD(H,20);'
,
'VAR3:STD(H,15);'
,
'VAR4:STD(H,0);'
,
])
result
=
case
.
Run
()
return
result
def
Test_AVEDEV
():
case
=
TestCase
(
code
=
[
'VAR3:AVEDEV(C,5);'
,
'VAR2:AVEDEV(O,10);'
,
'VAR2:AVEDEV(H,20);'
,
'VAR3:AVEDEV(H,15);'
,
'VAR4:AVEDEV(H,0);'
,
])
result
=
case
.
Run
()
return
result
def
Test_CROSS
()
:
case
=
TestCase
(
code
=
[
'VAR3:CROSS(C,O);'
,
'VAR2:CROSS(O,10);'
,
'VAR2:CROSS(O,C);'
,
])
result
=
case
.
Run
()
return
result
def
Test_MULAR
()
:
case
=
TestCase
(
code
=
[
'VAR3:MULAR(C,5);'
,
'VAR2:MULAR(O,10);'
,
'VAR2:MULAR(O,30);'
,
])
result
=
case
.
Run
()
return
result
def
Test_SUM
()
:
case
=
TestCase
(
code
=
[
'VAR3:SUM(C,5);'
,
'VAR2:SUM(O,0);'
,
'VAR2:BARSCOUNT(O);'
,
])
result
=
case
.
Run
()
return
result
def
Test_DEVSQ
():
case
=
TestCase
(
code
=
[
'VAR3:DEVSQ(C,5);'
,
'VAR2:DEVSQ(O,0);'
,
'VAR2:DEVSQ(O,5);'
,
])
result
=
case
.
Run
()
return
result
def
Test_FINANCE
():
# 财务数据测试
case
=
TestCase
(
code
=
[
'VAR4:CAPITAL;'
,
'VAR3:FINANCE(32);'
,
'VAR2:FINANCE(1);'
,
'VAR2:FINANCE(33);'
,
])
result
=
case
.
Run
()
return
result
#Test_Add()
#Test_Multiply()
#Test_MAX_MIN()
Test_FINANCE
()
\ No newline at end of file
vuehqchart/src/jscommon/umychart.complier.js
浏览文件 @
9d47902b
...
...
@@ -3026,7 +3026,7 @@ function JSAlgorithm(errorHandler,symbolData)
result
[
i
]
=
0
;
if
(
days
==
null
)
{
if
(
!
this
.
IsNumber
(
data
[
i
]))
contnue
;
if
(
!
this
.
IsNumber
(
data
[
i
]))
cont
i
nue
;
days
=
0
;
}
...
...
@@ -3127,6 +3127,8 @@ function JSAlgorithm(errorHandler,symbolData)
Const
=
(
Ey
-
Ex
*
Slope
)
/
num
;
result
[
i
]
=
Slope
*
num
+
Const
;
}
return
result
;
}
//SLOPE 线性回归斜率
...
...
@@ -3328,16 +3330,16 @@ function JSAlgorithm(errorHandler,symbolData)
if
(
typeof
(
data
)
==
'
number
'
)
return
0
;
var
latestID
;
//最新满足条件的数据索引
var
latestID
=
null
;
//最新满足条件的数据索引
var
result
=
[];
var
value
;
for
(
let
i
=
0
;
i
<
data
.
length
;
++
i
)
{
result
[
i
]
=
null
;
value
=
data
[
i
];
if
(
this
.
IsNumber
(
value
)
&&
value
>
0
)
latestID
=
=
i
;
if
(
this
.
IsNumber
(
value
)
&&
value
>
0
)
latestID
=
i
;
if
(
i
-
latestID
<
n
)
result
[
i
]
=
1
;
if
(
latestID
!=
null
&&
i
-
latestID
<
n
)
result
[
i
]
=
1
;
else
result
[
i
]
=
0
;
}
...
...
@@ -5845,13 +5847,13 @@ function JSSymbolData(ast,option,jsExecute)
this
.
IndexData
.
DataType
=
0
;
/*日线数据 */
this
.
IndexData
.
Data
=
hisData
;
var
aryOverlayData
=
this
.
Data
.
GetOverlayData
(
this
.
IndexData
.
Data
);
//和主图数据拟合以后的数据
var
aryOverlayData
=
this
.
Source
Data
.
GetOverlayData
(
this
.
IndexData
.
Data
);
//和主图数据拟合以后的数据
this
.
IndexData
.
Data
=
aryOverlayData
;
if
(
this
.
Period
>
0
&&
this
.
Period
<=
3
)
//周期数据
{
let
periodData
=
this
.
IndexData
.
GetPeriodData
(
this
.
Period
);
this
.
Data
.
Data
=
periodData
;
this
.
Index
Data
.
Data
=
periodData
;
}
}
...
...
@@ -7240,7 +7242,7 @@ function JSSymbolData(ast,option,jsExecute)
item
.
DateTime
=
data
.
stock
[
0
].
date
.
toString
()
+
"
0925
"
;
else
item
.
DateTime
=
data
.
stock
[
0
].
date
.
toString
()
+
"
"
+
jsData
.
time
.
toString
();
item
.
Increa
te
=
jsData
.
increat
e
;
item
.
Increa
se
=
jsData
.
increas
e
;
item
.
Risefall
=
jsData
.
risefall
;
item
.
AvPrice
=
jsData
.
avprice
;
...
...
webhqchart.demo/jscommon/umychart.complier.js
浏览文件 @
9d47902b
...
...
@@ -3026,7 +3026,7 @@ function JSAlgorithm(errorHandler,symbolData)
result
[
i
]
=
0
;
if
(
days
==
null
)
{
if
(
!
this
.
IsNumber
(
data
[
i
]))
contnue
;
if
(
!
this
.
IsNumber
(
data
[
i
]))
cont
i
nue
;
days
=
0
;
}
...
...
@@ -3127,6 +3127,8 @@ function JSAlgorithm(errorHandler,symbolData)
Const
=
(
Ey
-
Ex
*
Slope
)
/
num
;
result
[
i
]
=
Slope
*
num
+
Const
;
}
return
result
;
}
//SLOPE 线性回归斜率
...
...
@@ -3328,16 +3330,16 @@ function JSAlgorithm(errorHandler,symbolData)
if
(
typeof
(
data
)
==
'
number
'
)
return
0
;
var
latestID
;
//最新满足条件的数据索引
var
latestID
=
null
;
//最新满足条件的数据索引
var
result
=
[];
var
value
;
for
(
let
i
=
0
;
i
<
data
.
length
;
++
i
)
{
result
[
i
]
=
null
;
value
=
data
[
i
];
if
(
this
.
IsNumber
(
value
)
&&
value
>
0
)
latestID
=
=
i
;
if
(
this
.
IsNumber
(
value
)
&&
value
>
0
)
latestID
=
i
;
if
(
i
-
latestID
<
n
)
result
[
i
]
=
1
;
if
(
latestID
!=
null
&&
i
-
latestID
<
n
)
result
[
i
]
=
1
;
else
result
[
i
]
=
0
;
}
...
...
@@ -5845,13 +5847,13 @@ function JSSymbolData(ast,option,jsExecute)
this
.
IndexData
.
DataType
=
0
;
/*日线数据 */
this
.
IndexData
.
Data
=
hisData
;
var
aryOverlayData
=
this
.
Data
.
GetOverlayData
(
this
.
IndexData
.
Data
);
//和主图数据拟合以后的数据
var
aryOverlayData
=
this
.
Source
Data
.
GetOverlayData
(
this
.
IndexData
.
Data
);
//和主图数据拟合以后的数据
this
.
IndexData
.
Data
=
aryOverlayData
;
if
(
this
.
Period
>
0
&&
this
.
Period
<=
3
)
//周期数据
{
let
periodData
=
this
.
IndexData
.
GetPeriodData
(
this
.
Period
);
this
.
Data
.
Data
=
periodData
;
this
.
Index
Data
.
Data
=
periodData
;
}
}
...
...
@@ -7240,7 +7242,7 @@ function JSSymbolData(ast,option,jsExecute)
item
.
DateTime
=
data
.
stock
[
0
].
date
.
toString
()
+
"
0925
"
;
else
item
.
DateTime
=
data
.
stock
[
0
].
date
.
toString
()
+
"
"
+
jsData
.
time
.
toString
();
item
.
Increa
te
=
jsData
.
increat
e
;
item
.
Increa
se
=
jsData
.
increas
e
;
item
.
Risefall
=
jsData
.
risefall
;
item
.
AvPrice
=
jsData
.
avprice
;
...
...
webhqchart/umychart.complier.js
浏览文件 @
9d47902b
...
...
@@ -3026,7 +3026,7 @@ function JSAlgorithm(errorHandler,symbolData)
result
[
i
]
=
0
;
if
(
days
==
null
)
{
if
(
!
this
.
IsNumber
(
data
[
i
]))
contnue
;
if
(
!
this
.
IsNumber
(
data
[
i
]))
cont
i
nue
;
days
=
0
;
}
...
...
@@ -3127,6 +3127,8 @@ function JSAlgorithm(errorHandler,symbolData)
Const
=
(
Ey
-
Ex
*
Slope
)
/
num
;
result
[
i
]
=
Slope
*
num
+
Const
;
}
return
result
;
}
//SLOPE 线性回归斜率
...
...
@@ -3328,16 +3330,16 @@ function JSAlgorithm(errorHandler,symbolData)
if
(
typeof
(
data
)
==
'
number
'
)
return
0
;
var
latestID
;
//最新满足条件的数据索引
var
latestID
=
null
;
//最新满足条件的数据索引
var
result
=
[];
var
value
;
for
(
let
i
=
0
;
i
<
data
.
length
;
++
i
)
{
result
[
i
]
=
null
;
value
=
data
[
i
];
if
(
this
.
IsNumber
(
value
)
&&
value
>
0
)
latestID
=
=
i
;
if
(
this
.
IsNumber
(
value
)
&&
value
>
0
)
latestID
=
i
;
if
(
i
-
latestID
<
n
)
result
[
i
]
=
1
;
if
(
latestID
!=
null
&&
i
-
latestID
<
n
)
result
[
i
]
=
1
;
else
result
[
i
]
=
0
;
}
...
...
@@ -5845,13 +5847,13 @@ function JSSymbolData(ast,option,jsExecute)
this
.
IndexData
.
DataType
=
0
;
/*日线数据 */
this
.
IndexData
.
Data
=
hisData
;
var
aryOverlayData
=
this
.
Data
.
GetOverlayData
(
this
.
IndexData
.
Data
);
//和主图数据拟合以后的数据
var
aryOverlayData
=
this
.
Source
Data
.
GetOverlayData
(
this
.
IndexData
.
Data
);
//和主图数据拟合以后的数据
this
.
IndexData
.
Data
=
aryOverlayData
;
if
(
this
.
Period
>
0
&&
this
.
Period
<=
3
)
//周期数据
{
let
periodData
=
this
.
IndexData
.
GetPeriodData
(
this
.
Period
);
this
.
Data
.
Data
=
periodData
;
this
.
Index
Data
.
Data
=
periodData
;
}
}
...
...
@@ -7240,7 +7242,7 @@ function JSSymbolData(ast,option,jsExecute)
item
.
DateTime
=
data
.
stock
[
0
].
date
.
toString
()
+
"
0925
"
;
else
item
.
DateTime
=
data
.
stock
[
0
].
date
.
toString
()
+
"
"
+
jsData
.
time
.
toString
();
item
.
Increa
te
=
jsData
.
increat
e
;
item
.
Increa
se
=
jsData
.
increas
e
;
item
.
Risefall
=
jsData
.
risefall
;
item
.
AvPrice
=
jsData
.
avprice
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录