Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
bluefrankey
hqchart
提交
99961af3
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,体验更适合开发者的 AI 搜索 >>
提交
99961af3
编写于
10月 24, 2018
作者:
J
jones
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ver 3258
上级
4dd66970
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
122 addition
and
40 deletion
+122
-40
node.jccomplier/umychart.complier.controller.js
node.jccomplier/umychart.complier.controller.js
+122
-40
未找到文件。
node.jccomplier/umychart.complier.controller.js
浏览文件 @
99961af3
...
...
@@ -27,10 +27,13 @@ var JSComplier=require('./umychart.complier.node').JSCommonComplier.JSComplier;
返回数据
{
"ticket":1277,
"data":[{"date":20181023,"symbols":["600000.sh","000001.sz"]},{"date":20181022,"symbols":["600000.sh","000001.sz"]}],
"code":"VAR2:C+FINANCE(1);VAR3:=O;","error":[]
}
"ticket":131,
"data":
[
{"date":20181022,"symbols":["000008.sz"],"values":[1]},
{"date":20181019,"symbols":["000008.sz"],"values":[1]}
],
"code":"VAR2:EVERY(VOL>MA(REF(VOL,1),20)*1.5,3);","error":[]}
*/
function
JSComplierController
(
req
,
res
,
next
)
...
...
@@ -225,6 +228,7 @@ JSComplierController.Post=function(req, res, next)
// script[{code:脚本,args:[]脚本参数 (可选)}]: 脚本列表
// datecount: 日线数据计算多少天 (可选)
// daycount: 分钟数据计算多少天 (可选)
// calccount:50 最后统计几天的数据 (可选) 默认1天
// period: 周期 0=日线 1=周线 2=月线 3=年线 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟 (可选)
// right: 复权 0 不复权 1 前复权 2 后复权(可选)
// mergetype: 0 脚本都满足 1 有1个脚本满足
...
...
@@ -253,11 +257,12 @@ function JSCommonMultiComplier(req,res,next)
this
.
DayCount
=
20
;
this
.
Period
=
0
;
this
.
Right
=
0
;
this
.
CalculateCount
=
1
;
this
.
StockList
;
this
.
Script
=
[];
this
.
StartTime
=
new
Date
();
this
.
MergeType
=
0
;
this
.
MergeType
=
0
;
//0 脚本都满足 1 有1个脚本满足
this
.
Result
=
{};
//返回数据
this
.
CacheData
;
...
...
@@ -300,6 +305,7 @@ function JSCommonMultiComplier(req,res,next)
if
(
postData
.
daycount
)
this
.
DayCount
=
postData
.
daycount
;
if
(
postData
.
period
)
this
.
Period
=
postData
.
period
;
if
(
postData
.
right
)
this
.
Right
=
postData
.
right
;
if
(
postData
.
calccount
)
this
.
CalculateCount
=
postData
.
calccount
;
var
self
=
this
;
this
.
CacheData
=
new
Map
();
...
...
@@ -314,8 +320,8 @@ function JSCommonMultiComplier(req,res,next)
MaxReqeustDataCount
:
this
.
DateCount
,
MaxRequestMinuteDayCount
:
this
.
DayCount
,
Right
:
this
.
Right
,
Period
:
this
.
Period
,
Arguments
:
this
.
Script
[
scriptID
].
Arguments
,
CallbackParam
:
{
Symbol
:
symbol
,
ScriptID
:
scriptID
,
Result
:
true
,
Value
:[]
},
//脚本索引
Callback
:
function
(
data
,
param
)
//数据计算完成回调
CallbackParam
:
{
Symbol
:
symbol
,
ScriptID
:
scriptID
,
Cache
:
null
},
//脚本索引, 数据缓存
Callback
:
function
(
data
,
param
)
//数据计算完成回调
{
self
.
RecvExecuteData
(
data
,
param
);
},
...
...
@@ -333,38 +339,34 @@ function JSCommonMultiComplier(req,res,next)
this
.
RecvExecuteData
=
function
(
data
,
param
)
{
var
analysisData
=
this
.
AnalysisExecuteData
(
data
);
var
result
=
false
;
if
(
analysisData
)
{
result
=
true
;
analysisData
.
ID
=
param
.
ScriptID
;
param
.
Value
.
push
(
analysisData
);
}
var
analysis
=
this
.
AnalysisExecuteData
(
data
,
param
);
if
(
this
.
MergeType
===
0
)
param
.
Result
=
(
result
||
param
.
Result
);
else
param
.
Result
=
(
result
&&
param
.
Result
);
if
(
!
param
.
Result
)
if
(
!
analysis
&&
this
.
MergeType
===
0
)
{
this
.
CacheData
.
set
(
param
.
Symbol
,
null
);
if
(
this
.
CacheData
.
size
==
this
.
StockList
.
length
)
//等所有股票计算完了 返回数据 result
{
this
.
SendResult
();
}
}
else
if
(
param
.
ScriptID
>=
this
.
Script
.
length
-
1
)
//脚本都跑完了
{
this
.
CacheData
.
set
(
param
.
Symbol
,
param
.
Cache
);
}
else
{
this
.
RunNextScript
(
param
);
return
;
}
if
(
param
.
ScriptID
>=
this
.
Script
.
length
-
1
)
//单股票 多脚本执行完
if
(
this
.
CacheData
.
size
==
this
.
StockList
.
length
)
//等所有股票计算完了 返回数据 result
{
this
.
CacheData
.
set
(
param
.
Symbol
,
param
.
Value
);
if
(
this
.
CacheData
.
size
==
this
.
StockList
.
length
)
//等所有股票计算完了 返回数据 result
{
this
.
SendResult
();
}
this
.
SendResult
();
return
;
}
next
();
}
//执行下一个脚本
this
.
RunNextScript
=
function
(
param
)
{
var
self
=
this
;
param
.
ScriptID
+=
1
;
...
...
@@ -398,44 +400,124 @@ function JSCommonMultiComplier(req,res,next)
}
//分析单个脚本执行结果
this
.
AnalysisExecuteData
=
function
(
data
)
this
.
AnalysisExecuteData
=
function
(
data
,
param
)
{
if
(
!
data
||
!
data
.
length
)
return
null
;
var
outData
=
data
[
0
];
var
value
=
outData
.
Data
[
outData
.
Data
.
length
-
1
];
//选中最后一天数据结果>0的数据
if
(
!
value
)
return
null
;
if
(
!
outData
||
!
outData
.
Data
.
length
)
return
null
;
var
date
=
null
;
var
klineData
=
null
;
for
(
let
i
in
data
)
{
var
item
=
data
[
i
];
if
(
item
.
Type
===
100
&&
item
.
Name
===
'
TradeDate
'
&&
item
.
Data
.
length
>
outData
.
Data
.
length
-
1
)
if
(
item
.
Type
===
100
&&
item
.
Name
===
'
TradeDate
'
)
{
date
=
item
.
Data
[
outData
.
Data
.
length
-
1
]
;
klineData
=
item
;
break
;
}
}
return
{
Value
:
value
,
Date
:
date
};
if
(
!
klineData
||
!
klineData
.
Data
.
length
)
return
null
;
if
(
outData
.
Data
.
length
!=
klineData
.
Data
.
length
)
return
null
;
var
analysisData
=
[];
for
(
let
i
=
outData
.
Data
.
length
-
1
,
j
=
0
;
i
>
0
&&
j
<
this
.
CalculateCount
;
++
j
,
--
i
)
{
var
value
=
outData
.
Data
[
i
];
if
(
!
value
)
continue
;
var
date
=
klineData
.
Data
[
i
];
if
(
!
date
)
continue
;
analysisData
.
push
({
Date
:
date
,
Value
:
value
});
}
if
(
!
param
.
Cache
)
{
param
.
Cache
=
new
Map
();
for
(
let
i
in
analysisData
)
{
var
item
=
analysisData
[
i
];
param
.
Cache
.
set
(
item
.
Date
,
{
Date
:
item
.
Date
,
ScriptID
:[
param
.
ScriptID
]
}
);
}
}
else
{
if
(
this
.
mergetype
==
0
)
{
var
mergeData
=
new
Map
();
//合并数据
for
(
let
i
in
analysisData
)
//取交集
{
var
item
=
analysisData
[
i
];
if
(
param
.
Cache
.
has
(
item
.
Date
))
{
var
value
=
param
.
Cache
.
get
(
item
.
Date
);
value
.
Script
.
push
(
param
.
ScriptID
);
mergeData
.
set
(
item
.
Date
,
value
);
}
}
param
.
Cache
=
mergeData
;
}
else
{
for
(
let
i
in
analysisData
)
//取并集
{
var
item
=
analysisData
[
i
];
if
(
param
.
Cache
.
has
(
item
.
Date
))
{
var
value
=
param
.
Cache
.
get
(
item
.
Date
);
value
.
ScriptID
.
push
(
param
.
ScriptID
);
}
else
{
param
.
Cache
.
set
(
item
.
Date
,
{
Date
:
item
.
Date
,
ScriptID
:[
param
.
ScriptID
]
});
}
}
}
}
return
param
.
Cache
.
size
;
}
this
.
SendResult
=
function
()
{
this
.
Result
.
Data
=
[];
var
dateMap
=
new
Map
();
// Key=日期 [Value={Symbol:, ScriptID:[], Value:[]}
for
(
let
item
of
this
.
CacheData
)
{
var
stockData
=
item
[
1
];
if
(
!
stockData
)
continue
;
this
.
Result
.
Data
.
push
({
Symbol
:
item
[
0
],
Data
:
stockData
});
for
(
let
dateitem
of
stockData
)
{
if
(
dateMap
.
has
(
dateitem
[
0
]))
{
var
temp
=
dateMap
.
get
(
dateitem
[
0
]);
temp
.
push
({
Symbol
:
item
[
0
],
ScriptID
:
dateitem
[
1
].
ScriptID
});
}
else
{
dateMap
.
set
(
dateitem
[
0
],
[{
Symbol
:
item
[
0
],
ScriptID
:
dateitem
[
1
].
ScriptID
}]);
}
}
}
var
resultData
=
[];
for
(
let
item
of
dateMap
)
{
var
symbols
=
[];
for
(
let
i
in
item
[
1
])
{
symbols
.
push
(
item
[
1
][
i
].
Symbol
);
}
resultData
.
push
({
date
:
item
[
0
],
symbols
:
symbols
});
}
var
nowDate
=
new
Date
();
this
.
Result
.
Ticket
=
nowDate
.
getTime
()
-
this
.
StartTime
.
getTime
();
//字段全部小写
var
result
=
{
ticket
:
this
.
Result
.
Ticket
,
data
:
this
.
Result
.
Data
};
var
result
=
{
ticket
:
this
.
Result
.
Ticket
,
data
:
result
Data
};
this
.
Response
.
header
(
"
Access-Control-Allow-Origin
"
,
"
*
"
);
this
.
Response
.
send
(
result
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录