hq.data.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  1. /*
  2. 第3方数据对接
  3. h5开启以下代理跨域
  4. 腾讯分钟走势图,5日走势图
  5. http://127.0.0.1:8715 => http://web.ifzq.gtimg.cn
  6. 新浪分钟K线数据
  7. http://127.0.0.1:8712=> http://quotes.sina.cn
  8. 腾讯日K 支持跨域
  9. http://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get?_var=kline_dayqfq&param=sh600000,day,,,320,qfq&r=0.23908471470885573
  10. */
  11. function HQData() { }
  12. import { Interpreter } from "./eval5.min.js";
  13. const interpreter = new Interpreter(window, {
  14. timeout: 0,
  15. });
  16. HQData.NetworkFilter=function(data, callback)
  17. {
  18. console.log('[HQData::NetworkFilter] data', data);
  19. switch(data.Name)
  20. {
  21. case 'KLineChartContainer::ReqeustHistoryMinuteData': //分钟全量数据下载
  22. HQData.RequestHistoryMinuteData(data, callback);
  23. break;
  24. case 'KLineChartContainer::RequestMinuteRealtimeData': //分钟增量数据更新
  25. HQData.RequestMinuteRealtimeData(data,callback);
  26. break;
  27. case 'KLineChartContainer::RequestFlowCapitalData': //流通股本
  28. HQData.RequestFlowCapitalData(data,callback);
  29. break;
  30. case 'KLineChartContainer::RequestHistoryData': //日线全量数据下载
  31. HQData.RequestHistoryData(data,callback);
  32. break;
  33. case 'KLineChartContainer::RequestRealtimeData': //日线实时数据更新
  34. HQData.RequestRealtimeData(data,callback);
  35. break;
  36. case "MinuteChartContainer::RequestMinuteData": //单日分时
  37. HQData.RequestMinuteData(data,callback);
  38. break;
  39. case "MinuteChartContainer::RequestHistoryMinuteData": //多日分时
  40. HQData.RequestMinuteDaysData(data,callback);
  41. break;
  42. }
  43. }
  44. //股票代码转换成新浪代码
  45. HQData.ConverToSinaSymbol=function(symbol)
  46. {
  47. var internalSymbol;
  48. if (symbol.indexOf('.sh')>0)
  49. {
  50. internalSymbol=symbol.replace('.sh',"");
  51. internalSymbol="sh"+internalSymbol;
  52. }
  53. else if (symbol.indexOf('.sz')>0)
  54. {
  55. internalSymbol=symbol.replace('.sz',"");
  56. internalSymbol="sz"+internalSymbol;
  57. }
  58. return internalSymbol;
  59. }
  60. //股票代码转腾讯代码
  61. HQData.ConverToQQSymbol=function(symbol)
  62. {
  63. var internalSymbol;
  64. if (symbol.indexOf('.sh')>0)
  65. {
  66. internalSymbol=symbol.replace('.sh',"");
  67. internalSymbol="sh"+internalSymbol;
  68. }
  69. else if (symbol.indexOf('.sz')>0)
  70. {
  71. internalSymbol=symbol.replace('.sz',"");
  72. internalSymbol="sz"+internalSymbol;
  73. }
  74. return internalSymbol;
  75. }
  76. //新浪分钟K线数据
  77. HQData.GetKMinuteApiUrl=function(symbol, period, count)
  78. {
  79. var internalSymbol=HQData.ConverToSinaSymbol(symbol);
  80. var Period_List=new Map(
  81. [
  82. [4,1],
  83. [5,5],
  84. [6,15],
  85. [7,30],
  86. [8,60]
  87. ]
  88. );
  89. var scale=Period_List.get(period);
  90. //http://quotes.sina.cn/cn/api/jsonp_v2.php/=/CN_MarketDataService.getKLineData?symbol=sh600000&scale=1&datalen=5000
  91. // #ifndef H5
  92. var url=`https://quotes.sina.cn/cn/api/jsonp_v2.php/var __kminute__=/CN_MarketDataService.getKLineData?symbol=${internalSymbol}&scale=${scale}&datalen=${count}`;
  93. // #endif
  94. // #ifdef H5
  95. var url=`http://127.0.0.1:8712/cn/api/jsonp_v2.php/var __kminute__=/CN_MarketDataService.getKLineData?symbol=${internalSymbol}&scale=${scale}&datalen=${count}`;
  96. // #endif
  97. return { Url:url, Symbol:symbol, InternalSymbol:internalSymbol, Period:period };
  98. }
  99. //腾讯分钟走势图,5日走势图
  100. HQData.GetMinuteApiUrl=function(symbol, dayCount)
  101. {
  102. //https://web.ifzq.gtimg.cn/appstock/app/minute/query?code=sh600519
  103. //https://web.ifzq.gtimg.cn/appstock/app/day/query?code=sh600519
  104. var internalSymbol=HQData.ConverToQQSymbol(symbol);
  105. if (dayCount==1)
  106. {
  107. // #ifndef H5
  108. var url=`https://web.ifzq.gtimg.cn/appstock/app/minute/query?_var=min_data_${internalSymbol}&code=${internalSymbol}`;
  109. // #endif
  110. // #ifdef H5
  111. var url=`http://127.0.0.1:8715/appstock/app/minute/query?_var=min_data_${internalSymbol}&code=${internalSymbol}`;
  112. // #endif
  113. }
  114. else
  115. {
  116. // #ifndef H5
  117. var url=`https://web.ifzq.gtimg.cn/appstock/app/day/query?_var=fdays_data_${internalSymbol}&code=${internalSymbol}`;
  118. // #endif
  119. // #ifdef H5
  120. var url=`http://127.0.0.1:8715/appstock/app/day/query?_var=fdays_data_${internalSymbol}&code=${internalSymbol}`;
  121. // #endif
  122. }
  123. return { Url:url, Symbol:symbol, InternalSymbol:internalSymbol, DayCount:dayCount };
  124. }
  125. //腾讯日K 支持跨域
  126. HQData.GetKDayApiUrl=function(symbol,period,right,count)
  127. {
  128. // https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get?_var=kline_dayqfq&param=sh600000,day,,,320,qfq&r=0.23908471470885573
  129. // https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get?_var=kline_weekhfq&param=sh600000,week,,,320,hfq&r=0.9245064943280656
  130. // https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newkline/newkline?_var=kline_week&param=sh600000,week,,,320,&r=0.5369798987226688
  131. var internalSymbol=HQData.ConverToQQSymbol(symbol);
  132. var Period_List=new Map(
  133. [
  134. [0,"day"],
  135. [1,"week"],
  136. [2,"month"]
  137. ]
  138. );
  139. var periodName=Period_List.get(period);
  140. if (right==0)
  141. {
  142. var fq="";
  143. var url=`https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newkline/newkline?_var=kline_data&param=${internalSymbol},${periodName},,,${count},`;
  144. }
  145. else
  146. {
  147. var fq="qfq";
  148. if (right==2) fq="hfq";
  149. var url=`https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get?_var=kline_data&param=${internalSymbol},${periodName},,,${count},${fq}`;
  150. }
  151. return { Url:url, Symbol:symbol, InternalSymbol:internalSymbol, Period:period, PeriodName:periodName, FuQuan:fq };
  152. }
  153. //分钟K线
  154. HQData.RequestHistoryMinuteData=function(data, callback)
  155. {
  156. data.PreventDefault=true;
  157. var symbol=data.Request.Data.symbol; //请求的股票代码
  158. var period=data.Self.Period; //周期ID
  159. var count=5000;
  160. console.log(`[HQData.RequestHistoryMinuteData] Symbol=${symbol}, period=${period}`, symbol,period);
  161. var obj=HQData.GetKMinuteApiUrl(symbol,period,count);
  162. uni.request(
  163. {
  164. url: obj.Url,
  165. type: "GET",
  166. //dataType: "json",
  167. success:(recvData)=>
  168. {
  169. interpreter.evaluate(recvData.data);
  170. //console.log(__kminute__);
  171. HQData.RecvHistoryMinuteData(interpreter.globalScope.data.__kminute__, data, callback, obj);
  172. },
  173. error:(request)=>
  174. {
  175. //self.RecvError(request,RECV_DATA_TYPE.DERIVATIVE_DATA);
  176. }
  177. });
  178. }
  179. HQData.RecvHistoryMinuteData=function(recvData, data, callback, obj)
  180. {
  181. //{"day":"2021-03-03 14:15:00","open":"22.860","high":"22.900","low":"22.820","close":"22.830","volume":"2337300","ma_price5":22.796,"ma_volume5":1612649},
  182. var hqChartData={code:0, data:[]};
  183. hqChartData.symbol=obj.Symbol;
  184. hqChartData.name=obj.Symbol;
  185. var yClose=null;
  186. for(var i in recvData)
  187. {
  188. //if (i==recvData.length-1) break; //测试自动更新
  189. var item=recvData[i];
  190. var day = new Date(item.day);
  191. var date=day.getFullYear()*10000+(day.getMonth()+1)*100+day.getDate();
  192. var time=day.getHours()*100+day.getMinutes();
  193. var newItem=[ date,yClose, parseFloat(item.open), parseFloat(item.high), parseFloat(item.low), parseFloat(item.close), parseFloat(item.volume), null, time];
  194. hqChartData.data.push(newItem);
  195. yClose=parseFloat(item.close);
  196. }
  197. if (data.Self.IsDestroy==false)
  198. {
  199. // #ifdef H5
  200. callback(hqChartData);
  201. // #endif
  202. // #ifndef H5
  203. callback({data:hqChartData});
  204. // #endif
  205. }
  206. }
  207. //分钟K线更新
  208. HQData.RequestMinuteRealtimeData=function(data,callback)
  209. {
  210. data.PreventDefault=true;
  211. var symbol=data.Request.Data.symbol[0]; //请求的股票代码
  212. var period=data.Self.Period; //周期ID
  213. var count=5; //取最新5条
  214. console.log(`[HQData.RequestHistoryMinuteData] Symbol=${symbol}, period=${period}`, symbol,period);
  215. var obj=HQData.GetKMinuteApiUrl(symbol,period,count);
  216. uni.request(
  217. {
  218. url: obj.Url,
  219. type: "GET",
  220. //dataType: "json",
  221. success:(recvData)=>
  222. {
  223. interpreter.evaluate(recvData.data);
  224. console.log(recvData);
  225. HQData.RecvMinuteRealtimeData(interpreter.globalScope.data.__kminute__, data, callback, obj);
  226. },
  227. error:(request)=>
  228. {
  229. //self.RecvError(request,RECV_DATA_TYPE.DERIVATIVE_DATA);
  230. }
  231. });
  232. }
  233. HQData.RecvMinuteRealtimeData=function(recvData, data, callback, obj)
  234. {
  235. var hqChartData={code:0, data:[], ver:2.0}; //更新数据使用2.0版本格式
  236. hqChartData.symbol=obj.Symbol;
  237. hqChartData.name=obj.Symbol;
  238. var yClose=null;
  239. for(var i in recvData)
  240. {
  241. var item=recvData[i];
  242. var day = new Date(item.day);
  243. var date=day.getFullYear()*10000+(day.getMonth()+1)*100+day.getDate();
  244. var time=day.getHours()*100+day.getMinutes();
  245. var newItem=[ date,yClose, parseFloat(item.open), parseFloat(item.high), parseFloat(item.low), parseFloat(item.close), parseFloat(item.volume), null, time];
  246. hqChartData.data.push(newItem);
  247. yClose=parseFloat(item.close);
  248. }
  249. if (data.Self.IsDestroy==false)
  250. {
  251. // #ifdef H5
  252. callback(hqChartData);
  253. // #endif
  254. // #ifndef H5
  255. callback({data:hqChartData});
  256. // #endif
  257. }
  258. }
  259. //流通股本
  260. HQData.RequestFlowCapitalData=function(data,callback)
  261. {
  262. data.PreventDefault=true;
  263. var hqChartData={code:0, stock:[]}; //如果没有数据就填空
  264. if (data.Self.IsDestroy==false)
  265. {
  266. // #ifdef H5
  267. callback(hqChartData);
  268. // #endif
  269. // #ifndef H5
  270. callback({data:hqChartData});
  271. // #endif
  272. }
  273. }
  274. //走势图
  275. HQData.RequestMinuteData=function(data, callback)
  276. {
  277. data.PreventDefault=true;
  278. var symbol=data.Request.Data.symbol[0]; //请求的股票代码
  279. console.log(`[HQData::RequestMinuteData] Symbol=${symbol}`);
  280. var obj=HQData.GetMinuteApiUrl(symbol,1);
  281. uni.request(
  282. {
  283. url: obj.Url,
  284. type: "GET",
  285. //dataType: "json",
  286. success:(recvData)=>
  287. {
  288. interpreter.evaluate(recvData.data);
  289. interpreter.evaluate(`var __minute__=min_data_${obj.InternalSymbol}`);
  290. HQData.RecvMinuteData(interpreter.globalScope.data.__minute__, data, callback, obj);
  291. },
  292. error:(request)=>
  293. {
  294. //self.RecvError(request,RECV_DATA_TYPE.DERIVATIVE_DATA);
  295. }
  296. });
  297. }
  298. HQData.RecvMinuteData=function(recvData, data, callback, obj)
  299. {
  300. var stockData=recvData.data[obj.InternalSymbol];
  301. var qt=stockData.qt;
  302. var mintue=stockData.data;
  303. var dayData=qt[obj.InternalSymbol];
  304. var yClose=parseFloat(dayData[4]); //昨收盘
  305. var date=parseInt(mintue.date);
  306. var aryMinute=[];
  307. var perVol=0;
  308. var totalAmount=0;
  309. for(var i in mintue.data)
  310. {
  311. var item=mintue.data[i];
  312. var aryData=item.split(" ");
  313. var price=parseFloat(aryData[1]);
  314. var vol=parseFloat(aryData[2]);
  315. var stockItem=
  316. {
  317. time:parseInt(aryData[0]),
  318. price:price,
  319. open:price,
  320. high:price,
  321. low:price,
  322. amount:null,
  323. vol:vol-perVol,
  324. //avprice:item.avg_price,
  325. }
  326. totalAmount+=(stockItem.vol*stockItem.price);
  327. stockItem.avprice=totalAmount/vol; //均价 总金额/总量
  328. perVol=vol;
  329. aryMinute.push(stockItem);
  330. }
  331. var hqchartData={stock:[{ name:obj.Symbol, symbol:obj.Symbol,date:date,yclose:yClose, minute:aryMinute }], code:0 };
  332. if (data.Self.IsDestroy==false)
  333. {
  334. // #ifdef H5
  335. callback(hqchartData);
  336. // #endif
  337. // #ifndef H5
  338. callback({data:hqchartData});
  339. // #endif
  340. }
  341. }
  342. //5日走势图
  343. HQData.RequestMinuteDaysData=function(data,callback)
  344. {
  345. data.PreventDefault=true;
  346. var symbol=data.Request.Data.symbol; //请求的股票代码
  347. console.log(`[HQData.RequestMinuteDaysData] Symbol=${symbol}`);
  348. var obj=HQData.GetMinuteApiUrl(symbol,5);
  349. uni.request(
  350. {
  351. url: obj.Url,
  352. type: "GET",
  353. //dataType: "json",
  354. success:(recvData)=>
  355. {
  356. interpreter.evaluate(recvData.data);
  357. interpreter.evaluate(`var __fdays_minute__=fdays_data_${obj.InternalSymbol}`);
  358. HQData.RecvMinuteDaysData(interpreter.globalScope.data.__fdays_minute__, data, callback, obj);
  359. },
  360. error:(request)=>
  361. {
  362. //self.RecvError(request,RECV_DATA_TYPE.DERIVATIVE_DATA);
  363. }
  364. });
  365. }
  366. HQData.RecvMinuteDaysData=function(recvData, data, callback, obj)
  367. {
  368. var stockData=recvData.data[obj.InternalSymbol];
  369. var qt=stockData.qt;
  370. var mintue=stockData.data;
  371. var dayData=qt[obj.InternalSymbol];
  372. var aryDayData=[];
  373. for(var i in stockData.data)
  374. {
  375. var dayMinute=stockData.data[i];
  376. var date=parseInt(dayMinute.date);
  377. var itemDay={ minute:[], date:date, yclose: parseFloat(dayMinute.prec) };
  378. var totalAmount=0, perVol=0;
  379. for(var j in dayMinute.data)
  380. {
  381. var item=dayMinute.data[j];
  382. var aryData=item.split(" ");
  383. var price=parseFloat(aryData[1]);
  384. var vol=parseFloat(aryData[2]);
  385. var stockItem=[parseInt(aryData[0]), price,price,price,price,vol-perVol,null];
  386. totalAmount+=(stockItem[5]*price);
  387. stockItem[7]=totalAmount/vol; //均价 总金额/总量
  388. perVol=vol;
  389. itemDay.minute.push(stockItem);
  390. }
  391. aryDayData.push(itemDay);
  392. }
  393. var hqchartData={ symbol:obj.Symbol, name:obj.Symbol, data:aryDayData, code:0 };
  394. if (data.Self.IsDestroy==false)
  395. {
  396. // #ifdef H5
  397. callback(hqchartData);
  398. // #endif
  399. // #ifndef H5
  400. callback({data:hqchartData});
  401. // #endif
  402. }
  403. }
  404. HQData.CreateSHSZData=function(minuteStringData)
  405. {
  406. const TIME_SPLIT =
  407. [
  408. { Start: 930, End: 1130 },
  409. { Start: 1300, End: 1500 }
  410. ];
  411. return minuteStringData.CreateTimeData(TIME_SPLIT);
  412. }
  413. HQData.GetSHSZData=function(upperSymbol,width)
  414. {
  415. const SHZE_MINUTE_X_COORDINATE =
  416. {
  417. Full: //完整模式
  418. [
  419. [0, 0, "rgb(200,200,200)", "09:30"],
  420. [31, 0, "RGB(200,200,200)", "10:00"],
  421. [61, 0, "RGB(200,200,200)", "10:30"],
  422. [91, 0, "RGB(200,200,200)", "11:00"],
  423. [120, 1, "RGB(200,200,200)", "13:00"],
  424. [150, 0, "RGB(200,200,200)", "13:30"],
  425. [180, 0, "RGB(200,200,200)", "14:00"],
  426. [210, 0, "RGB(200,200,200)", "14:30"],
  427. [240, 1, "RGB(200,200,200)", "15:00"], // 15:00
  428. ],
  429. Simple: //简洁模式
  430. [
  431. [0, 0, "rgb(200,200,200)", "09:30"],
  432. [61, 0, "RGB(200,200,200)", "10:30"],
  433. [120, 1, "RGB(200,200,200)", "13:00"],
  434. [180, 0, "RGB(200,200,200)", "14:00"],
  435. [240, 1, "RGB(200,200,200)", "15:00"]
  436. ],
  437. Min: //最小模式
  438. [
  439. [0, 0, "rgb(200,200,200)", "09:30"],
  440. [120, 1, "RGB(200,200,200)", "13:00"],
  441. [240, 1, "RGB(200,200,200)", "15:00"]
  442. ],
  443. Count: 242, //!! 一共的分钟数据个数,不要填错了
  444. MiddleCount: 121, // Count/2 就可以。
  445. GetData: function (width)
  446. {
  447. if (width < 200) return this.Min;
  448. else if (width < 400) return this.Simple;
  449. return this.Full;
  450. }
  451. };
  452. return SHZE_MINUTE_X_COORDINATE;
  453. }
  454. HQData.RequestHistoryData=function(data,callback)
  455. {
  456. data.PreventDefault=true;
  457. var symbol=data.Request.Data.symbol; //请求的股票代码
  458. var period=data.Self.Period; //周期ID
  459. var right=data.Self.Right;
  460. var count=320;
  461. console.log(`[HQData::RequestHistoryData] Symbol=${symbol}, period=${period}, right=${right}`);
  462. var obj=HQData.GetKDayApiUrl(symbol,period,right,count);
  463. uni.request(
  464. {
  465. url: obj.Url,
  466. type: "GET",
  467. //dataType: "json",
  468. success:(recvData)=>
  469. {
  470. var code="var "+recvData.data;
  471. interpreter.evaluate(code);
  472. interpreter.evaluate("var __kday__=kline_data;")
  473. HQData.RecvHistoryData(interpreter.globalScope.data.__kday__, data, callback, obj);
  474. },
  475. error:(request)=>
  476. {
  477. //self.RecvError(request,RECV_DATA_TYPE.DERIVATIVE_DATA);
  478. }
  479. });
  480. }
  481. HQData.RecvHistoryData=function(recvData, data, callback, obj)
  482. {
  483. if (!recvData) return;
  484. var stockData=recvData.data[obj.InternalSymbol];
  485. var kLineName=`${obj.FuQuan}${obj.PeriodName}`;
  486. var jsKline=stockData[kLineName];
  487. var hqChartData={code:0, data:[]};
  488. hqChartData.symbol=obj.Symbol;
  489. hqChartData.name=obj.Symbol;
  490. var yClose=parseFloat(stockData.prec);
  491. for(var i in jsKline)
  492. {
  493. var item=jsKline[i];
  494. var aryDate = item[0].split('-')
  495. var date=parseInt(aryDate[0])*10000+parseInt(aryDate[1])*100+parseInt(aryDate[2]);
  496. var open=parseFloat(item[1]);
  497. var close=parseFloat(item[2]);
  498. var high=parseFloat(item[3]);
  499. var low=parseFloat(item[4]);
  500. var vol=parseFloat(item[5]);
  501. var newItem=[ date,yClose, open, high, low, close, vol, null];
  502. hqChartData.data.push(newItem);
  503. yClose=close;
  504. }
  505. if (data.Self.IsDestroy==false)
  506. {
  507. // #ifdef H5
  508. callback(hqChartData);
  509. // #endif
  510. // #ifndef H5
  511. callback({data:hqChartData});
  512. // #endif
  513. }
  514. }
  515. HQData.RequestRealtimeData=function(data,callback)
  516. {
  517. data.PreventDefault=true;
  518. var symbol=data.Request.Data.symbol[0]; //请求的股票代码
  519. var period=data.Self.Period; //周期ID
  520. var right=data.Self.Right;
  521. var count=3;
  522. console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}, period=${period}, right=${period}`);
  523. var obj=HQData.GetKDayApiUrl(symbol,period,right,count);
  524. uni.request(
  525. {
  526. url: obj.Url,
  527. type: "GET",
  528. //dataType: "json",
  529. success:(recvData)=>
  530. {
  531. interpreter.evaluate("var "+recvData.data);
  532. interpreter.evaluate("var __kday__=kline_data;")
  533. HQData.RecvRealtimeData(interpreter.globalScope.data.__kday__, data, callback, obj);
  534. },
  535. error:(request)=>
  536. {
  537. //self.RecvError(request,RECV_DATA_TYPE.DERIVATIVE_DATA);
  538. }
  539. });
  540. }
  541. HQData.RecvRealtimeData=function(recvData, data, callback, obj)
  542. {
  543. if (!recvData) return;
  544. var stockData=recvData.data[obj.InternalSymbol];
  545. var kLineName=`${obj.FuQuan}${obj.PeriodName}`;
  546. var jsKline=stockData[kLineName];
  547. var stock={name:obj.Symbol, symbol:obj.Symbol };
  548. var yClose=parseFloat(stockData.prec);
  549. for(var i in jsKline)
  550. {
  551. var item=jsKline[i];
  552. var aryDate = item[0].split('-')
  553. var date=parseInt(aryDate[0])*10000+parseInt(aryDate[1])*100+parseInt(aryDate[2]);
  554. var open=parseFloat(item[1]);
  555. var close=parseFloat(item[2]);
  556. var high=parseFloat(item[3]);
  557. var low=parseFloat(item[4]);
  558. var vol=parseFloat(item[5]);
  559. stock.yclose=yClose;
  560. stock.open=open;
  561. stock.high=high;
  562. stock.low=low;
  563. stock.price=close;
  564. stock.vol=vol;
  565. stock.date=date;
  566. yClose=close;
  567. }
  568. var hqChartData={code:0, stock:[stock] };
  569. if (data.Self.IsDestroy==false)
  570. {
  571. // #ifdef H5
  572. callback(hqChartData);
  573. // #endif
  574. // #ifndef H5
  575. callback({data:hqChartData});
  576. // #endif
  577. }
  578. }
  579. module.exports =
  580. {
  581. HQData:HQData
  582. }