umychart.klineinfo.wechat.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702
  1. /*
  2. copyright (c) 2018 jones
  3. http://www.apache.org/licenses/LICENSE-2.0
  4. 开源项目 https://github.com/jones2000/HQChart
  5. jones_2000@163.com
  6. 小程序信息地雷数据
  7. */
  8. import {
  9. JSCommonResource_Global_JSChartResource as g_JSChartResource,
  10. } from './umychart.resource.wechat.js'
  11. var KLINE_INFO_TYPE=
  12. {
  13. INVESTOR:1, //互动易
  14. ANNOUNCEMENT:2, //公告
  15. PFORECAST:3, //业绩预告
  16. ANNOUNCEMENT_QUARTER_1:4, //一季度报
  17. ANNOUNCEMENT_QUARTER_2:5, //半年报
  18. ANNOUNCEMENT_QUARTER_3:6, //2季度报
  19. ANNOUNCEMENT_QUARTER_4:7, //年报
  20. RESEARCH:8, //调研
  21. BLOCKTRADING:9, //大宗交易
  22. TRADEDETAIL:10, //龙虎榜
  23. POLICY:11 //策略信息
  24. }
  25. function KLineInfoData()
  26. {
  27. this.ID;
  28. this.Date;
  29. this.Title;
  30. this.InfoType;
  31. this.ExtendData; //扩展数据
  32. }
  33. /*
  34. 信息地雷
  35. 信息地雷列表
  36. */
  37. function JSKLineInfoMap()
  38. {
  39. }
  40. JSKLineInfoMap.Get=function(id)
  41. {
  42. var infoMap=new Map(
  43. [
  44. ["互动易", {Create:function(){ return new InvestorInfo()} }],
  45. ["公告", {Create:function(){ return new AnnouncementInfo()} }],
  46. ["业绩预告", {Create:function(){ return new PforecastInfo()} }],
  47. ["调研", {Create:function(){ return new ResearchInfo()} }],
  48. ["大宗交易", {Create:function(){ return new BlockTrading()} }],
  49. ["龙虎榜", {Create:function(){ return new TradeDetail()} }],
  50. ["策略选股", {Create: function () { return new PolicyInfo() } }]
  51. ]
  52. );
  53. return infoMap.get(id);
  54. }
  55. function IKLineInfo()
  56. {
  57. this.MaxReqeustDataCount=1000;
  58. this.StartDate=20160101;
  59. this.Data;
  60. this.GetToday=function()
  61. {
  62. var date=new Date();
  63. var today=date.getFullYear()*10000+(date.getMonth()+1)*100+date.getDate();
  64. return today;
  65. }
  66. }
  67. /*
  68. 互动易
  69. */
  70. function InvestorInfo()
  71. {
  72. this.newMethod=IKLineInfo; //派生
  73. this.newMethod();
  74. delete this.newMethod;
  75. this.RequestData=function(hqChart)
  76. {
  77. var self = this;
  78. var param={ HQChart:hqChart };
  79. this.Data=[];
  80. //请求数据
  81. wx.request({
  82. url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Investor.ApiUrl,
  83. data:
  84. {
  85. "filed": ["question","answerdate","symbol","id"],
  86. "symbol": [param.HQChart.Symbol],
  87. "querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
  88. "start":0,
  89. "end":this.MaxReqeustDataCount,
  90. },
  91. method:"post",
  92. dataType: "json",
  93. success: function (recvData)
  94. {
  95. self.RecvData(recvData,param);
  96. }
  97. });
  98. return true;
  99. }
  100. this.RecvData=function(recvData,param)
  101. {
  102. var data=recvData.data;
  103. if (!data || !data.list || data.list.length<=0) return;
  104. for (var i in data.list)
  105. {
  106. var item = data.list[i];
  107. var infoData=new KLineInfoData();
  108. infoData.Date=item.answerdate;
  109. infoData.Title=item.question;
  110. infoData.InfoType=KLINE_INFO_TYPE.INVESTOR;
  111. this.Data.push(infoData);
  112. }
  113. param.HQChart.UpdataChartInfo();
  114. param.HQChart.Draw();
  115. }
  116. }
  117. /*
  118. 公告
  119. */
  120. function AnnouncementInfo()
  121. {
  122. this.newMethod=IKLineInfo; //派生
  123. this.newMethod();
  124. delete this.newMethod;
  125. this.RequestData=function(hqChart)
  126. {
  127. var self = this;
  128. var param={ HQChart:hqChart };
  129. this.Data=[];
  130. //请求数据
  131. wx.request({
  132. url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Announcement.ApiUrl,
  133. data:
  134. {
  135. "filed": ["title","releasedate","symbol","id"],
  136. "symbol": [param.HQChart.Symbol],
  137. "querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
  138. "start":0,
  139. "end":this.MaxReqeustDataCount,
  140. },
  141. method:"post",
  142. dataType: "json",
  143. success: function (recvData)
  144. {
  145. self.RecvData(recvData,param);
  146. }
  147. });
  148. return true;
  149. }
  150. this.RecvData=function(recvData,param)
  151. {
  152. var data=recvData.data;
  153. if (!data) return;
  154. if (!data.report || data.report.length<=0) return;
  155. for (var i in data.report)
  156. {
  157. var item = data.report[i];
  158. var infoData=new KLineInfoData();
  159. infoData.Date=item.releasedate;
  160. infoData.Title=item.title;
  161. infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT;
  162. for(var j in item.type)
  163. {
  164. var typeItem=item.type[j];
  165. switch(typeItem)
  166. {
  167. case "一季度报告":
  168. infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT_QUARTER_1;
  169. break;
  170. case "半年度报告":
  171. infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT_QUARTER_2;
  172. break;
  173. case "三季度报告":
  174. infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT_QUARTER_3;
  175. break;
  176. case "年度报告":
  177. infoData.InfoType=KLINE_INFO_TYPE.ANNOUNCEMENT_QUARTER_4;
  178. break;
  179. }
  180. }
  181. this.Data.push(infoData);
  182. }
  183. param.HQChart.UpdataChartInfo();
  184. param.HQChart.Draw();
  185. }
  186. }
  187. /*
  188. 业绩预告
  189. */
  190. function PforecastInfo()
  191. {
  192. this.newMethod=IKLineInfo; //派生
  193. this.newMethod();
  194. delete this.newMethod;
  195. this.RequestData=function(hqChart)
  196. {
  197. var self = this;
  198. this.Data = [];
  199. var param={ HQChart:hqChart };
  200. //请求数据
  201. wx.request({
  202. url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Pforecast.ApiUrl,
  203. data:
  204. {
  205. "field": ["pforecast.type","pforecast.reportdate","fweek"],
  206. "condition":
  207. [
  208. {"item":["pforecast.reportdate","int32","gte",this.StartDate]}
  209. ],
  210. "symbol": [param.HQChart.Symbol],
  211. "start":0,
  212. "end":this.MaxReqeustDataCount,
  213. },
  214. method:"post",
  215. dataType: "json",
  216. success: function (recvData)
  217. {
  218. self.RecvData(recvData,param);
  219. }
  220. });
  221. return true;
  222. }
  223. this.RecvData=function(recvData,param)
  224. {
  225. var data=recvData.data;
  226. if (!data.stock || data.stock.length!=1) return;
  227. if (!data.stock[0].stockday || data.stock[0].stockday.length<=0) return;
  228. for (var i in data.stock[0].stockday)
  229. {
  230. var item = data.stock[0].stockday[i];
  231. if (item.pforecast.length>0)
  232. {
  233. var dataItem=item.pforecast[0];
  234. var infoData=new KLineInfoData();
  235. infoData.Date= item.date;
  236. infoData.Title=dataItem.type;
  237. infoData.InfoType=KLINE_INFO_TYPE.PFORECAST;
  238. infoData.ExtendData={ Type:dataItem.type, ReportDate:dataItem.reportdate}
  239. if(item.fweek) //未来周涨幅
  240. {
  241. infoData.ExtendData.FWeek={};
  242. if (item.fweek.week1!=null) infoData.ExtendData.FWeek.Week1=item.fweek.week1;
  243. if (item.fweek.week4!=null) infoData.ExtendData.FWeek.Week4=item.fweek.week4;
  244. }
  245. this.Data.push(infoData);
  246. }
  247. }
  248. param.HQChart.UpdataChartInfo();
  249. param.HQChart.Draw();
  250. }
  251. }
  252. /*
  253. 投资者关系 (调研)
  254. */
  255. function ResearchInfo()
  256. {
  257. this.newMethod=IKLineInfo; //派生
  258. this.newMethod();
  259. delete this.newMethod;
  260. this.RequestData=function(hqChart)
  261. {
  262. var self = this;
  263. var param= { HQChart:hqChart };
  264. this.Data=[];
  265. //请求数据
  266. wx.request({
  267. url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.Research.ApiUrl,
  268. data:
  269. {
  270. "filed": ["releasedate","researchdate","level","symbol","id"],
  271. "querydate":{"StartDate":this.StartDate,"EndDate":this.GetToday()},
  272. "symbol": [param.HQChart.Symbol],
  273. "start":0,
  274. "end":this.MaxReqeustDataCount,
  275. },
  276. method:"post",
  277. dataType: "json",
  278. success: function (recvData)
  279. {
  280. self.RecvData(recvData,param);
  281. }
  282. });
  283. return true;
  284. }
  285. this.RecvData=function(recvData,param)
  286. {
  287. var data=recvData.data;
  288. if (!data) return;
  289. if (!data.list || data.list.length<=0) return;
  290. for (var i in data.list)
  291. {
  292. var item = data.list[i];
  293. var infoData=new KLineInfoData();
  294. infoData.ID=item.id;
  295. infoData.Date= item.researchdate;
  296. infoData.InfoType=KLINE_INFO_TYPE.RESEARCH;
  297. infoData.ExtendData={ Level:item.level };
  298. this.Data.push(infoData);
  299. }
  300. param.HQChart.UpdataChartInfo();
  301. param.HQChart.Draw();
  302. }
  303. }
  304. /*
  305. 大宗交易
  306. */
  307. function BlockTrading()
  308. {
  309. this.newMethod=IKLineInfo; //派生
  310. this.newMethod();
  311. delete this.newMethod;
  312. this.RequestData=function(hqChart)
  313. {
  314. var self = this;
  315. var param={ HQChart:hqChart,};
  316. this.Data=[];
  317. //请求数据
  318. wx.request({
  319. url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.BlockTrading.ApiUrl,
  320. data:
  321. {
  322. "field": ["blocktrading.price","blocktrading.vol","blocktrading.premium","fweek","price"],
  323. "condition":
  324. [
  325. {"item":["date","int32","gte",this.StartDate]},
  326. {"item":["blocktrading.vol","int32","gte","0"]}
  327. ],
  328. "symbol": [param.HQChart.Symbol],
  329. "start":0,
  330. "end":this.MaxReqeustDataCount,
  331. },
  332. method:"post",
  333. dataType: "json",
  334. success: function (recvData)
  335. {
  336. self.RecvData(recvData,param);
  337. }
  338. });
  339. return true;
  340. }
  341. this.RecvData=function(recvData,param)
  342. {
  343. var data=recvData.data;
  344. if (!data || !data.stock || data.stock.length!=1) return;
  345. if (!data.stock[0].stockday || data.stock[0].stockday.length<=0) return;
  346. for (var i in data.stock[0].stockday)
  347. {
  348. var item = data.stock[0].stockday[i];
  349. var infoData=new KLineInfoData();
  350. infoData.Date= item.date;
  351. infoData.InfoType=KLINE_INFO_TYPE.BLOCKTRADING;
  352. infoData.ExtendData=
  353. {
  354. Price:item.blocktrading.price, //交易价格
  355. Premium:item.blocktrading.premium, //溢价 (百分比%)
  356. Vol:item.blocktrading.vol, //交易金额单位(万元)
  357. ClosePrice:item.price, //收盘价
  358. };
  359. if(item.fweek) //未来周涨幅
  360. {
  361. infoData.ExtendData.FWeek={};
  362. if (item.fweek.week1!=null) infoData.ExtendData.FWeek.Week1=item.fweek.week1;
  363. if (item.fweek.week4!=null) infoData.ExtendData.FWeek.Week4=item.fweek.week4;
  364. }
  365. this.Data.push(infoData);
  366. }
  367. param.HQChart.UpdataChartInfo();
  368. param.HQChart.Draw();
  369. }
  370. }
  371. /*
  372. 龙虎榜
  373. */
  374. function TradeDetail()
  375. {
  376. this.newMethod=IKLineInfo; //派生
  377. this.newMethod();
  378. delete this.newMethod;
  379. this.RequestData=function(hqChart)
  380. {
  381. var self = this;
  382. var param={ HQChart:hqChart };
  383. this.Data=[];
  384. //请求数据
  385. wx.request({
  386. url: g_JSChartResource.Domain+g_JSChartResource.KLine.Info.TradeDetail.ApiUrl,
  387. data:
  388. {
  389. "field": ["tradedetail.typeexplain","tradedetail.type","fweek"],
  390. "condition":
  391. [
  392. {"item":["date","int32","gte",this.StartDate]},
  393. {"item":["tradedetail.type","int32","gte","0"]}
  394. ],
  395. "symbol": [param.HQChart.Symbol],
  396. "start":0,
  397. "end":this.MaxReqeustDataCount,
  398. },
  399. method:"post",
  400. dataType: "json",
  401. success: function (recvData)
  402. {
  403. self.RecvData(recvData,param);
  404. }
  405. });
  406. return true;
  407. }
  408. this.RecvData=function(recvData,param)
  409. {
  410. var data=recvData.data;
  411. if (!data || !data.stock || data.stock.length!=1) return;
  412. if (!data.stock[0].stockday || data.stock[0].stockday.length<=0) return;
  413. for (var i in data.stock[0].stockday)
  414. {
  415. var item = data.stock[0].stockday[i];
  416. var infoData=new KLineInfoData();
  417. infoData.Date= item.date;
  418. infoData.InfoType=KLINE_INFO_TYPE.TRADEDETAIL;
  419. infoData.ExtendData={Detail:new Array()};
  420. for(var j in item.tradedetail)
  421. {
  422. var tradeItem=item.tradedetail[j];
  423. infoData.ExtendData.Detail.push({"Type":tradeItem.type,"TypeExplain":tradeItem.typeexplain});
  424. }
  425. if(item.fweek) //未来周涨幅
  426. {
  427. infoData.ExtendData.FWeek={};
  428. if (item.fweek.week1!=null) infoData.ExtendData.FWeek.Week1=item.fweek.week1;
  429. if (item.fweek.week4!=null) infoData.ExtendData.FWeek.Week4=item.fweek.week4;
  430. }
  431. this.Data.push(infoData);
  432. }
  433. param.HQChart.UpdataChartInfo();
  434. param.HQChart.Draw();
  435. }
  436. }
  437. //策略信息
  438. function PolicyInfo()
  439. {
  440. this.newMethod = IKLineInfo; //派生
  441. this.newMethod();
  442. delete this.newMethod;
  443. this.PolicyList = []; //筛选的策略名字 {Name:策略名, Guid:策略的GUID}
  444. this.SetPolicyList=function(aryPolicy)
  445. {
  446. for(let i in aryPolicy)
  447. {
  448. this.PolicyList.push({Name:aryPolicy[i]});
  449. }
  450. }
  451. this.RequestData = function (hqChart)
  452. {
  453. var self = this;
  454. this.Data = [];
  455. var param = { HQChart: hqChart };
  456. // setTimeout(function () { self.RecvData(null, param); }, 2000); //模拟数据到达
  457. //请求数据
  458. wx.request({
  459. url: g_JSChartResource.Domain + g_JSChartResource.KLine.Info.Policy.ApiUrl,
  460. data: {
  461. "symbol": [param.HQChart.Symbol],
  462. field: ["policy"],
  463. "condition": [
  464. { "item": ["date", "int32", "gte", this.StartDate, "lte", this.GetToday()] }],
  465. "start": 0,
  466. "end": this.MaxReqeustDataCount
  467. },
  468. method: "post",
  469. dataType: "json",
  470. success: function (recvData) {
  471. self.RecvData(recvData, param);
  472. }
  473. })
  474. return true;
  475. }
  476. this.RecvData = function (recvData, param)
  477. {
  478. var data = recvData.data;
  479. if (!data.stock || data.stock.length != 1) return;
  480. if (!data.stock[0].stockday || data.stock[0].stockday.length <= 0) return;
  481. var setName=new Set();
  482. for(var i in this.PolicyList) //把需要过滤的策略名字放set里, 方便后面过滤
  483. {
  484. setName.add(this.PolicyList[i].Name);
  485. }
  486. for (var i in data.stock[0].stockday)
  487. {
  488. var item = data.stock[0].stockday[i];
  489. var infoData = new KLineInfoData();
  490. infoData.Date = item.date;
  491. infoData.InfoType = KLINE_INFO_TYPE.POLICY;
  492. infoData.ExtendData = [];
  493. for (var j in item.policy)
  494. {
  495. var name = item.policy[j].name;
  496. if (setName.has(name)) infoData.ExtendData.push({ Name: name });
  497. }
  498. if (infoData.ExtendData.length>0) this.Data.push(infoData);
  499. }
  500. param.HQChart.UpdataChartInfo();
  501. param.HQChart.Draw();
  502. if (param.HQChart.UpdateUICallback) param.HQChart.UpdateUICallback('RecvPolicyInfoData', this);
  503. }
  504. }
  505. ////////////////////////////////////////////////////////////////////////////////////////////
  506. // 走势图信息地雷
  507. //
  508. //
  509. ////////////////////////////////////////////////////////////////////////////////////////////
  510. function JSMinuteInfoMap() { }
  511. JSMinuteInfoMap.InfoMap = new Map(
  512. [
  513. ["大盘异动", { Create: function () { return new MarketEventInfo() } }],
  514. ]);
  515. JSMinuteInfoMap.Get = function (id)
  516. {
  517. return JSMinuteInfoMap.InfoMap.get(id);
  518. }
  519. function IMinuteInfo()
  520. {
  521. this.Data;
  522. this.ClassName = 'IMinuteInfo';
  523. }
  524. //////////////////////////////////////////////////////////////////////
  525. // 大盘异动
  526. // 结构 {Date:日期 Time:时间, Title:标题, Type:0 }
  527. ////////////////////////////////////////////////////////////////////
  528. function MarketEventInfo()
  529. {
  530. this.newMethod = IMinuteInfo; //派生
  531. this.newMethod();
  532. delete this.newMethod;
  533. this.ClassName = 'MarketEventInfo';
  534. this.RequestData = function (hqChart)
  535. {
  536. var self = this;
  537. this.Data = [];
  538. var param =
  539. {
  540. HQChart: hqChart
  541. };
  542. var url = g_JSChartResource.CacheDomain + '/cache/analyze/shszevent/marketevent/concept/' + hqChart.TradeDate + '.json';
  543. if (hqChart.NetworkFilter) {
  544. var obj =
  545. {
  546. Name: 'MarketEventInfo::RequestData', //类名::
  547. Explain: '大盘异动',
  548. Request: { Url: url, Type: 'Get', Data: { Date: hqChart.TradeDate, Symbol: hqChart.Symbol } },
  549. Self: this,
  550. PreventDefault: false
  551. };
  552. hqChart.NetworkFilter(obj, function (data)
  553. {
  554. self.RecvData(data, param);
  555. param.HQChart.UpdataChartInfo();
  556. param.HQChart.Draw();
  557. });
  558. if (obj.PreventDefault == true) return; //已被上层替换,不调用默认的网络请求
  559. }
  560. //请求数据
  561. wx.request({
  562. url: url,
  563. method: "get",
  564. dataType: "json",
  565. success: function (recvData) {
  566. self.RecvData(recvData, param);
  567. },
  568. error: function (http, e) {
  569. console.warn("[MarketEventInfo::RequestData] error, http ", e, http);
  570. }
  571. });
  572. return true;
  573. }
  574. this.RecvData = function (recvData, param)
  575. {
  576. var data=recvData.data;
  577. for (var i in data.event)
  578. {
  579. var event = data.event[i];
  580. for (var j in event.data)
  581. {
  582. var item = event.data[j];
  583. if (item.length < 2) continue;
  584. var info = { Date: event.date, Time: item[0], Title: item[1], Type: 0 };
  585. this.Data.push(info);
  586. }
  587. }
  588. param.HQChart.UpdataChartInfo();
  589. param.HQChart.Draw();
  590. }
  591. }
  592. //导出统一使用JSCommon命名空间名
  593. module.exports =
  594. {
  595. JSCommonKLineInfo:
  596. {
  597. JSKLineInfoMap: JSKLineInfoMap,
  598. KLINE_INFO_TYPE: KLINE_INFO_TYPE,
  599. JSMinuteInfoMap: JSMinuteInfoMap,
  600. },
  601. //单个类导出
  602. JSCommon_JSKLineInfoMap: JSKLineInfoMap,
  603. JSCommon_KLINE_INFO_TYPE: KLINE_INFO_TYPE,
  604. JSCommon_JSMinuteInfoMap: JSMinuteInfoMap,
  605. };