You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
702 lines
20 KiB
702 lines
20 KiB
/*
|
|
copyright (c) 2018 jones
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
开源项目 https://github.com/jones2000/HQChart
|
|
|
|
jones_2000@163.com
|
|
|
|
小程序信息地雷数据
|
|
*/
|
|
|
|
import {
|
|
JSCommonResource_Global_JSChartResource as g_JSChartResource,
|
|
} from './umychart.resource.wechat.js'
|
|
|
|
var KLINE_INFO_TYPE=
|
|
{
|
|
INVESTOR:1, //互动易
|
|
ANNOUNCEMENT:2, //公告
|
|
PFORECAST:3, //业绩预告
|
|
|
|
ANNOUNCEMENT_QUARTER_1:4, //一季度报
|
|
ANNOUNCEMENT_QUARTER_2:5, //半年报
|
|
ANNOUNCEMENT_QUARTER_3:6, //2季度报
|
|
ANNOUNCEMENT_QUARTER_4:7, //年报
|
|
|
|
RESEARCH:8, //调研
|
|
BLOCKTRADING:9, //大宗交易
|
|
TRADEDETAIL:10, //龙虎榜
|
|
|
|
POLICY:11 //策略信息
|
|
}
|
|
|
|
function KLineInfoData()
|
|
{
|
|
this.ID;
|
|
this.Date;
|
|
this.Title;
|
|
this.InfoType;
|
|
this.ExtendData; //扩展数据
|
|
}
|
|
|
|
/*
|
|
信息地雷
|
|
信息地雷列表
|
|
*/
|
|
function JSKLineInfoMap()
|
|
{
|
|
}
|
|
|
|
JSKLineInfoMap.Get=function(id)
|
|
{
|
|
var infoMap=new Map(
|
|
[
|
|
["互动易", {Create:function(){ return new InvestorInfo()} }],
|
|
["公告", {Create:function(){ return new AnnouncementInfo()} }],
|
|
["业绩预告", {Create:function(){ return new PforecastInfo()} }],
|
|
["调研", {Create:function(){ return new ResearchInfo()} }],
|
|
["大宗交易", {Create:function(){ return new BlockTrading()} }],
|
|
["龙虎榜", {Create:function(){ return new TradeDetail()} }],
|
|
["策略选股", {Create: function () { return new PolicyInfo() } }]
|
|
]
|
|
);
|
|
|
|
return infoMap.get(id);
|
|
}
|
|
|
|
function IKLineInfo()
|
|
{
|
|
this.MaxReqeustDataCount=1000;
|
|
this.StartDate=20160101;
|
|
this.Data;
|
|
|
|
this.GetToday=function()
|
|
{
|
|
var date=new Date();
|
|
var today=date.getFullYear()*10000+(date.getMonth()+1)*100+date.getDate();
|
|
return today;
|
|
}
|
|
}
|
|
|
|
/*
|
|
互动易
|
|
*/
|
|
function InvestorInfo()
|
|
{
|
|
this.newMethod=IKLineInfo; //派生
|
|
this.newMethod();
|
|
delete this.newMethod;
|
|
|
|
this.RequestData=function(hqChart)
|
|
{
|
|
var self = this;
|
|
var param={ HQChart:hqChart };
|
|
this.Data=[];
|
|
|
|
//请求数据
|
|
wx.request({
|
|
url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Investor.ApiUrl,
|
|
data:
|
|
{
|
|
"filed": ["question","answerdate","symbol","id"],
|
|
"symbol": [param.HQChart.Symbol],
|
|
"querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
|
|
"start":0,
|
|
"end":this.MaxReqeustDataCount,
|
|
},
|
|
method:"post",
|
|
dataType: "json",
|
|
success: function (recvData)
|
|
{
|
|
self.RecvData(recvData,param);
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
this.RecvData=function(recvData,param)
|
|
{
|
|
var data=recvData.data;
|
|
if (!data || !data.list || data.list.length<=0) return;
|
|
|
|
for (var i in data.list)
|
|
{
|
|
var item = data.list[i];
|
|
var infoData=new KLineInfoData();
|
|
infoData.Date=item.answerdate;
|
|
infoData.Title=item.question;
|
|
infoData.InfoType=KLINE_INFO_TYPE.INVESTOR;
|
|
this.Data.push(infoData);
|
|
}
|
|
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
}
|
|
}
|
|
|
|
/*
|
|
公告
|
|
*/
|
|
function AnnouncementInfo()
|
|
{
|
|
this.newMethod=IKLineInfo; //派生
|
|
this.newMethod();
|
|
delete this.newMethod;
|
|
|
|
this.RequestData=function(hqChart)
|
|
{
|
|
var self = this;
|
|
var param={ HQChart:hqChart };
|
|
this.Data=[];
|
|
|
|
//请求数据
|
|
wx.request({
|
|
url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Announcement.ApiUrl,
|
|
data:
|
|
{
|
|
"filed": ["title","releasedate","symbol","id"],
|
|
"symbol": [param.HQChart.Symbol],
|
|
"querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
|
|
"start":0,
|
|
"end":this.MaxReqeustDataCount,
|
|
},
|
|
method:"post",
|
|
dataType: "json",
|
|
success: function (recvData)
|
|
{
|
|
self.RecvData(recvData,param);
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
this.RecvData=function(recvData,param)
|
|
{
|
|
var data=recvData.data;
|
|
if (!data) return;
|
|
if (!data.report || data.report.length<=0) return;
|
|
|
|
for (var i in data.report)
|
|
{
|
|
var item = data.report[i];
|
|
var infoData=new KLineInfoData();
|
|
infoData.Date=item.releasedate;
|
|
infoData.Title=item.title;
|
|
infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT;
|
|
for(var j in item.type)
|
|
{
|
|
var typeItem=item.type[j];
|
|
switch(typeItem)
|
|
{
|
|
case "一季度报告":
|
|
infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT_QUARTER_1;
|
|
break;
|
|
case "半年度报告":
|
|
infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT_QUARTER_2;
|
|
break;
|
|
case "三季度报告":
|
|
infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT_QUARTER_3;
|
|
break;
|
|
case "年度报告":
|
|
infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT_QUARTER_4;
|
|
break;
|
|
}
|
|
}
|
|
this.Data.push(infoData);
|
|
}
|
|
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
业绩预告
|
|
*/
|
|
function PforecastInfo()
|
|
{
|
|
this.newMethod=IKLineInfo; //派生
|
|
this.newMethod();
|
|
delete this.newMethod;
|
|
|
|
this.RequestData=function(hqChart)
|
|
{
|
|
var self = this;
|
|
this.Data = [];
|
|
var param={ HQChart:hqChart };
|
|
|
|
//请求数据
|
|
wx.request({
|
|
url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Pforecast.ApiUrl,
|
|
data:
|
|
{
|
|
"field": ["pforecast.type","pforecast.reportdate","fweek"],
|
|
"condition":
|
|
[
|
|
{"item":["pforecast.reportdate","int32","gte",this.StartDate]}
|
|
],
|
|
"symbol": [param.HQChart.Symbol],
|
|
"start":0,
|
|
"end":this.MaxReqeustDataCount,
|
|
},
|
|
method:"post",
|
|
dataType: "json",
|
|
success: function (recvData)
|
|
{
|
|
self.RecvData(recvData,param);
|
|
}
|
|
});
|
|
return true;
|
|
}
|
|
|
|
this.RecvData=function(recvData,param)
|
|
{
|
|
var data=recvData.data;
|
|
if (!data.stock || data.stock.length!=1) return;
|
|
if (!data.stock[0].stockday || data.stock[0].stockday.length<=0) return;
|
|
|
|
for (var i in data.stock[0].stockday)
|
|
{
|
|
var item = data.stock[0].stockday[i];
|
|
if (item.pforecast.length>0)
|
|
{
|
|
var dataItem=item.pforecast[0];
|
|
var infoData=new KLineInfoData();
|
|
infoData.Date= item.date;
|
|
infoData.Title=dataItem.type;
|
|
infoData.InfoType=KLINE_INFO_TYPE.PFORECAST;
|
|
infoData.ExtendData={ Type:dataItem.type, ReportDate:dataItem.reportdate}
|
|
if(item.fweek) //未来周涨幅
|
|
{
|
|
infoData.ExtendData.FWeek={};
|
|
if (item.fweek.week1!=null) infoData.ExtendData.FWeek.Week1=item.fweek.week1;
|
|
if (item.fweek.week4!=null) infoData.ExtendData.FWeek.Week4=item.fweek.week4;
|
|
}
|
|
this.Data.push(infoData);
|
|
}
|
|
}
|
|
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
}
|
|
}
|
|
|
|
/*
|
|
投资者关系 (调研)
|
|
*/
|
|
function ResearchInfo()
|
|
{
|
|
this.newMethod=IKLineInfo; //派生
|
|
this.newMethod();
|
|
delete this.newMethod;
|
|
|
|
this.RequestData=function(hqChart)
|
|
{
|
|
var self = this;
|
|
var param= { HQChart:hqChart };
|
|
|
|
this.Data=[];
|
|
|
|
//请求数据
|
|
wx.request({
|
|
url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Research.ApiUrl,
|
|
data:
|
|
{
|
|
"filed": ["releasedate","researchdate","level","symbol","id"],
|
|
"querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
|
|
"symbol": [param.HQChart.Symbol],
|
|
"start":0,
|
|
"end":this.MaxReqeustDataCount,
|
|
},
|
|
method:"post",
|
|
dataType: "json",
|
|
success: function (recvData)
|
|
{
|
|
self.RecvData(recvData,param);
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
this.RecvData=function(recvData,param)
|
|
{
|
|
var data=recvData.data;
|
|
if (!data) return;
|
|
if (!data.list || data.list.length<=0) return;
|
|
|
|
for (var i in data.list)
|
|
{
|
|
var item = data.list[i];
|
|
var infoData=new KLineInfoData();
|
|
infoData.ID=item.id;
|
|
infoData.Date= item.researchdate;
|
|
infoData.InfoType=KLINE_INFO_TYPE.RESEARCH;
|
|
infoData.ExtendData={ Level:item.level };
|
|
this.Data.push(infoData);
|
|
|
|
}
|
|
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
}
|
|
}
|
|
|
|
/*
|
|
大宗交易
|
|
*/
|
|
function BlockTrading()
|
|
{
|
|
this.newMethod=IKLineInfo; //派生
|
|
this.newMethod();
|
|
delete this.newMethod;
|
|
|
|
this.RequestData=function(hqChart)
|
|
{
|
|
var self = this;
|
|
var param={ HQChart:hqChart,};
|
|
this.Data=[];
|
|
|
|
//请求数据
|
|
wx.request({
|
|
url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.BlockTrading.ApiUrl,
|
|
data:
|
|
{
|
|
"field": ["blocktrading.price","blocktrading.vol","blocktrading.premium","fweek","price"],
|
|
"condition":
|
|
[
|
|
{"item":["date","int32","gte",this.StartDate]},
|
|
{"item":["blocktrading.vol","int32","gte","0"]}
|
|
],
|
|
"symbol": [param.HQChart.Symbol],
|
|
"start":0,
|
|
"end":this.MaxReqeustDataCount,
|
|
},
|
|
method:"post",
|
|
dataType: "json",
|
|
success: function (recvData)
|
|
{
|
|
self.RecvData(recvData,param);
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
this.RecvData=function(recvData,param)
|
|
{
|
|
var data=recvData.data;
|
|
if (!data || !data.stock || data.stock.length!=1) return;
|
|
if (!data.stock[0].stockday || data.stock[0].stockday.length<=0) return;
|
|
|
|
for (var i in data.stock[0].stockday)
|
|
{
|
|
var item = data.stock[0].stockday[i];
|
|
var infoData=new KLineInfoData();
|
|
infoData.Date= item.date;
|
|
infoData.InfoType=KLINE_INFO_TYPE.BLOCKTRADING;
|
|
infoData.ExtendData=
|
|
{
|
|
Price:item.blocktrading.price, //交易价格
|
|
Premium:item.blocktrading.premium, //溢价 (百分比%)
|
|
Vol:item.blocktrading.vol, //交易金额单位(万元)
|
|
ClosePrice:item.price, //收盘价
|
|
};
|
|
|
|
if(item.fweek) //未来周涨幅
|
|
{
|
|
infoData.ExtendData.FWeek={};
|
|
if (item.fweek.week1!=null) infoData.ExtendData.FWeek.Week1=item.fweek.week1;
|
|
if (item.fweek.week4!=null) infoData.ExtendData.FWeek.Week4=item.fweek.week4;
|
|
}
|
|
|
|
this.Data.push(infoData);
|
|
}
|
|
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
龙虎榜
|
|
*/
|
|
function TradeDetail()
|
|
{
|
|
this.newMethod=IKLineInfo; //派生
|
|
this.newMethod();
|
|
delete this.newMethod;
|
|
|
|
this.RequestData=function(hqChart)
|
|
{
|
|
var self = this;
|
|
var param={ HQChart:hqChart };
|
|
|
|
this.Data=[];
|
|
|
|
//请求数据
|
|
wx.request({
|
|
url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.TradeDetail.ApiUrl,
|
|
data:
|
|
{
|
|
"field": ["tradedetail.typeexplain","tradedetail.type","fweek"],
|
|
"condition":
|
|
[
|
|
{"item":["date","int32","gte",this.StartDate]},
|
|
{"item":["tradedetail.type","int32","gte","0"]}
|
|
],
|
|
"symbol": [param.HQChart.Symbol],
|
|
"start":0,
|
|
"end":this.MaxReqeustDataCount,
|
|
},
|
|
method:"post",
|
|
dataType: "json",
|
|
success: function (recvData)
|
|
{
|
|
self.RecvData(recvData,param);
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
this.RecvData=function(recvData,param)
|
|
{
|
|
var data=recvData.data;
|
|
if (!data || !data.stock || data.stock.length!=1) return;
|
|
if (!data.stock[0].stockday || data.stock[0].stockday.length<=0) return;
|
|
|
|
for (var i in data.stock[0].stockday)
|
|
{
|
|
var item = data.stock[0].stockday[i];
|
|
|
|
var infoData=new KLineInfoData();
|
|
infoData.Date= item.date;
|
|
infoData.InfoType=KLINE_INFO_TYPE.TRADEDETAIL;
|
|
infoData.ExtendData={Detail:new Array()};
|
|
|
|
for(var j in item.tradedetail)
|
|
{
|
|
var tradeItem=item.tradedetail[j];
|
|
infoData.ExtendData.Detail.push({"Type":tradeItem.type,"TypeExplain":tradeItem.typeexplain});
|
|
}
|
|
|
|
if(item.fweek) //未来周涨幅
|
|
{
|
|
infoData.ExtendData.FWeek={};
|
|
if (item.fweek.week1!=null) infoData.ExtendData.FWeek.Week1=item.fweek.week1;
|
|
if (item.fweek.week4!=null) infoData.ExtendData.FWeek.Week4=item.fweek.week4;
|
|
}
|
|
|
|
this.Data.push(infoData);
|
|
}
|
|
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
}
|
|
}
|
|
|
|
//策略信息
|
|
function PolicyInfo()
|
|
{
|
|
this.newMethod = IKLineInfo; //派生
|
|
this.newMethod();
|
|
delete this.newMethod;
|
|
|
|
this.PolicyList = []; //筛选的策略名字 {Name:策略名, Guid:策略的GUID}
|
|
|
|
this.SetPolicyList=function(aryPolicy)
|
|
{
|
|
for(let i in aryPolicy)
|
|
{
|
|
this.PolicyList.push({Name:aryPolicy[i]});
|
|
}
|
|
}
|
|
|
|
this.RequestData = function (hqChart)
|
|
{
|
|
var self = this;
|
|
this.Data = [];
|
|
var param = { HQChart: hqChart };
|
|
|
|
// setTimeout(function () { self.RecvData(null, param); }, 2000); //模拟数据到达
|
|
|
|
//请求数据
|
|
wx.request({
|
|
url: g_JSChartResource.Domain + g_JSChartResource.KLine.Info.Policy.ApiUrl,
|
|
data: {
|
|
"symbol": [param.HQChart.Symbol],
|
|
field: ["policy"],
|
|
"condition": [
|
|
{ "item": ["date", "int32", "gte", this.StartDate, "lte", this.GetToday()] }],
|
|
"start": 0,
|
|
"end": this.MaxReqeustDataCount
|
|
},
|
|
method: "post",
|
|
dataType: "json",
|
|
success: function (recvData) {
|
|
self.RecvData(recvData, param);
|
|
}
|
|
|
|
})
|
|
|
|
return true;
|
|
}
|
|
|
|
this.RecvData = function (recvData, param)
|
|
{
|
|
var data = recvData.data;
|
|
if (!data.stock || data.stock.length != 1) return;
|
|
if (!data.stock[0].stockday || data.stock[0].stockday.length <= 0) return;
|
|
|
|
var setName=new Set();
|
|
for(var i in this.PolicyList) //把需要过滤的策略名字放set里, 方便后面过滤
|
|
{
|
|
setName.add(this.PolicyList[i].Name);
|
|
}
|
|
|
|
for (var i in data.stock[0].stockday)
|
|
{
|
|
var item = data.stock[0].stockday[i];
|
|
var infoData = new KLineInfoData();
|
|
infoData.Date = item.date;
|
|
infoData.InfoType = KLINE_INFO_TYPE.POLICY;
|
|
infoData.ExtendData = [];
|
|
for (var j in item.policy)
|
|
{
|
|
var name = item.policy[j].name;
|
|
if (setName.has(name)) infoData.ExtendData.push({ Name: name });
|
|
}
|
|
|
|
if (infoData.ExtendData.length>0) this.Data.push(infoData);
|
|
}
|
|
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
|
|
if (param.HQChart.UpdateUICallback) param.HQChart.UpdateUICallback('RecvPolicyInfoData', this);
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
// 走势图信息地雷
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
function JSMinuteInfoMap() { }
|
|
|
|
JSMinuteInfoMap.InfoMap = new Map(
|
|
[
|
|
["大盘异动", { Create: function () { return new MarketEventInfo() } }],
|
|
]);
|
|
|
|
JSMinuteInfoMap.Get = function (id)
|
|
{
|
|
return JSMinuteInfoMap.InfoMap.get(id);
|
|
}
|
|
|
|
function IMinuteInfo()
|
|
{
|
|
this.Data;
|
|
this.ClassName = 'IMinuteInfo';
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// 大盘异动
|
|
// 结构 {Date:日期 Time:时间, Title:标题, Type:0 }
|
|
////////////////////////////////////////////////////////////////////
|
|
function MarketEventInfo()
|
|
{
|
|
this.newMethod = IMinuteInfo; //派生
|
|
this.newMethod();
|
|
delete this.newMethod;
|
|
|
|
this.ClassName = 'MarketEventInfo';
|
|
|
|
this.RequestData = function (hqChart)
|
|
{
|
|
var self = this;
|
|
this.Data = [];
|
|
var param =
|
|
{
|
|
HQChart: hqChart
|
|
};
|
|
|
|
var url = g_JSChartResource.CacheDomain + '/cache/analyze/shszevent/marketevent/concept/' + hqChart.TradeDate + '.json';
|
|
|
|
if (hqChart.NetworkFilter) {
|
|
var obj =
|
|
{
|
|
Name: 'MarketEventInfo::RequestData', //类名::
|
|
Explain: '大盘异动',
|
|
Request: { Url: url, Type: 'Get', Data: { Date: hqChart.TradeDate, Symbol: hqChart.Symbol } },
|
|
Self: this,
|
|
PreventDefault: false
|
|
};
|
|
hqChart.NetworkFilter(obj, function (data)
|
|
{
|
|
self.RecvData(data, param);
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
});
|
|
|
|
if (obj.PreventDefault == true) return; //已被上层替换,不调用默认的网络请求
|
|
}
|
|
|
|
//请求数据
|
|
wx.request({
|
|
url: url,
|
|
method: "get",
|
|
dataType: "json",
|
|
success: function (recvData) {
|
|
self.RecvData(recvData, param);
|
|
},
|
|
error: function (http, e) {
|
|
console.warn("[MarketEventInfo::RequestData] error, http ", e, http);
|
|
}
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
this.RecvData = function (recvData, param)
|
|
{
|
|
var data=recvData.data;
|
|
for (var i in data.event)
|
|
{
|
|
var event = data.event[i];
|
|
for (var j in event.data)
|
|
{
|
|
var item = event.data[j];
|
|
if (item.length < 2) continue;
|
|
var info = { Date: event.date, Time: item[0], Title: item[1], Type: 0 };
|
|
this.Data.push(info);
|
|
}
|
|
}
|
|
|
|
param.HQChart.UpdataChartInfo();
|
|
param.HQChart.Draw();
|
|
}
|
|
}
|
|
|
|
//导出统一使用JSCommon命名空间名
|
|
module.exports =
|
|
{
|
|
JSCommonKLineInfo:
|
|
{
|
|
JSKLineInfoMap: JSKLineInfoMap,
|
|
KLINE_INFO_TYPE: KLINE_INFO_TYPE,
|
|
JSMinuteInfoMap: JSMinuteInfoMap,
|
|
},
|
|
|
|
//单个类导出
|
|
JSCommon_JSKLineInfoMap: JSKLineInfoMap,
|
|
JSCommon_KLINE_INFO_TYPE: KLINE_INFO_TYPE,
|
|
JSCommon_JSMinuteInfoMap: JSMinuteInfoMap,
|
|
};
|