UNPKG

hqchart

Version:

HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接

1,573 lines (1,283 loc) 107 kB
///////////////////////////////////////////////////////////////////// // 模拟测试数据 // // ///////////////////////////////////////////////////////////////////// function HQData() { } HQData.Explain="本地测试数据"; HQData.NetworkFilter=function(data, callback) { console.log(`[HQData::NetworkFilter] ${HQData.Explain}`, data); switch(data.Name) { //HQChart使用教程29-走势图如何对接第3方数据1 case 'MinuteChartContainer::RequestMinuteData': //分时图数据对接 //HQChart使用教程29-走势图如何对接第3方数据2-最新分时数据 HQData.Minute_RequestMinuteData(data, callback); break; case "MinuteChartContainer::RequestHistoryMinuteData": //多日分时图 //HQChart使用教程29-走势图如何对接第3方数据3-多日分时数据 HQData.Minute_RequestHistoryMinuteData(data, callback); break; case "MinuteChartContainer::RequestOverlayMinuteData": //单日叠加 HQData.Minute_RequestOverlayMinuteData(data, callback); break; case "MinuteChartContainer::RequestOverlayHistoryMinuteData": //叠加多日 HQData.Minute_RequestOverlayHistoryMinuteData(data, callback); break; case "MinuteChartContainer::RequestPopMinuteData": //弹出分时图数据 //HQChart使用教程29-走势图如何对接第3方数据2-最新分时数据 格式跟这个一样 HQData.Minute_RequestPopMinuteData(data, callback); break; //HQChart使用教程30-K线图如何对接第3方数据1 case 'KLineChartContainer::RequestHistoryData': //日线全量数据下载 //HQChart使用教程30-K线图如何对接第3方数据2-日K数据 HQData.RequestHistoryData(data,callback); break; case 'KLineChartContainer::RequestRealtimeData': //日线实时数据更新 //HQChart使用教程30-K线图如何对接第3方数据14-轮询增量更新日K数据 HQData.RequestRealtimeData(data,callback); break; case 'KLineChartContainer::RequestFlowCapitalData': //流通股本 //HQChart使用教程30-K线图如何对接第3方数据4-流通股本数据 HQData.RequestFlowCapitalData(data,callback); break; case 'KLineChartContainer::ReqeustHistoryMinuteData': //分钟全量数据下载 //HQChart使用教程30-K线图如何对接第3方数据3-1分钟K数据 HQData.RequestHistoryMinuteData(data, callback); break; case 'KLineChartContainer::RequestMinuteRealtimeData': //分钟增量数据更新 //HQChart使用教程30-K线图如何对接第3方数据15-轮询增量更新1分钟K线数据 HQData.RequestMinuteRealtimeData(data,callback); break; case "JSSymbolData::GetVariantData": //额外的变量数据 //HQChart使用教程30-K线图如何对接第3方数据29-板块字符串函数数据[GNBLOCK,GNBLOCKNUM......] HQData.RequestIndexVariantData(data,callback); break; case "JSSymbolData::GetCustomFunctionData": //自定义函数数据下载 HQData.CustomFunction_RequestData(data,callback); break; case "JSSymbolData::GetCustomVariantData": //自定义函数数据下载 HQData.CustomVarData_RequestData(data,callback); break; case "JSSymbolData::GetOtherSymbolData": //HQChart使用教程30-K线图如何对接第3方数据31-获取指定品种的K线数据 HQData.RequestOtherSymbolData(data, callback); break; case "AnnouncementInfo::RequestData": //HQChart使用教程30-K线图如何对接第3方数据20-信息地雷公告数据 HQData.AnnouncementInfo_RequestData(data,callback); break; case "JSSymbolData::GetLatestData": //HQChart使用教程30-K线图如何对接第3方数据30-即时行情数据DYNAINFO HQData.RequestLatestData(data,callback); break; case "KLineChartContainer::RequestOverlayHistoryData": //叠加股票 //HQChart使用教程30-K线图如何对接第3方数据16-日K叠加股票 HQData.RequestOverlayHistoryData(data, callback); break; case "KLineChartContainer::RequestOverlayHistoryMinuteData": //HQChart使用教程30-K线图如何对接第3方数据17- 分钟K叠加股票 HQData.RequestOverlayHistoryMinuteData(data, callback); break; case "PforecastInfo::RequestData": HQData.PforecastInfo_RequestData(data,callback); break; case "InvestorInfo::RequestData": HQData.InvestorInfo_RequestData(data,callback); break; case "ResearchInfo::RequestData": HQData.ResearchInfo_RequestData(data,callback); break; case "BlockTrading::RequestData": HQData.BlockTrading_RequestData(data,callback); break; case "TradeDetail::RequestData": HQData.TradeDetail_RequestData(data,callback); break; case "JSSymbolData::GetFinance": //财务数据 HQData.Finance_RequestData(data,callback); break; case "JSSymbolData::GetGPJYValue": HQData.GPJYValue_RequestData(data,callback); break; case "JSSymbolData::GetSCJYValue": HQData.SCJYValue_RequestData(data,callback); break; case "JSSymbolData::GetBKJYValue": HQData.BKJYValue_RequestData(data,callback); break; case "JSSymbolData::GetGPJYOne": HQData.GPJYOne_RequestData(data,callback); break; case "JSSymbolData::GetSCJYOne": HQData.SCJYOne_RequestData(data,callback); break; case "JSSymbolData::GetBKJYOne": HQData.BKJYOne_RequestData(data,callback); break; case "JSSymbolData::GetFinValue": HQData.FinValue_RequestData(data,callback); break; case "JSSymbolData::GetFinOne": HQData.FinOne_RequestData(data,callback); break; case "JSSymbolData::GetIndexData": HQData.INDEX_RequestData(data,callback); break; ////////////////////////////////////////////////////// //报价列表数据 case "JSReportChartContainer::RequestStockListData": //HQChart使用教程95-报价列表对接第3方数据1-码表数据 HQData.Report_RequestStockListData(data, callback); //码表 break; case "JSReportChartContainer::RequestMemberListData": //板块成分 //HQChart使用教程95-报价列表对接第3方数据2-板块成分数据 HQData.Report_RequestMemberListDat(data, callback); break; case "JSDealChartContainer::RequestStockData": //股票数据更新 //HQChart使用教程95-报价列表对接第3方数据3-股票数据 HQData.Report_RequestStockData(data, callback); break; case "JSDealChartContainer::RequestStockSortData": //股票排序数据 //HQChart使用教程95-报价列表对接第3方数据4-股票排序数据 HQData.Report_RequestStockSortData(data, callback); break; case "JSDealChartContainer::RequestVirtualStockData": HQData.Report_RequestVirtualStockData(data, callback); //股票数据 虚拟表格 break; case "APIScriptIndex::ExecuteScript": //测试指标 HQData.Report_APIIndex(data, callback); break; ///////////////////////////////////////////////////////////////// // case "KLineChartContainer::RequestVolumeProfileData": //成交量分布图 HQData.RequestVolumeProfileData(data, callback); break; } } HQData.Minute_RequestMinuteData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol[0]; //请求的股票代码 var callcation=data.Request.Data.callcation; //集合竞价 console.log(`[HQData::RequestMinuteData] Symbol=${symbol}`); setTimeout(()=>{ var fullData=HQData.GetDayMinuteDataBySymbol(symbol); var srcStock=fullData[0]; var stockItem={ date:srcStock.date, minute:srcStock.minute, yclose:srcStock.yclose, symbol:symbol, name:symbol }; if (callcation.Before) { var before= [ //[交易时间, 价格,成交量, 成交金额, 日期(可选,YYYYMMDD)], [915, srcStock.yclose,0,0], [916, srcStock.yclose+0.01,0,0], [917, srcStock.yclose+0.03,0,0], [918, srcStock.yclose+0.02,0,0], [919, srcStock.yclose+0.02,0,0], [920, srcStock.yclose+0.01,0,0], [921, srcStock.yclose,0,0], [922, srcStock.yclose-0.02,0,0], [923, srcStock.yclose-0.03,0,0], [924, srcStock.yclose,0,0], [925, srcStock.yclose,0,0], ]; var beforeinfo={ totalcount:11, ver:1.0 }; stockItem.before=before; stockItem.beforeinfo=beforeinfo; } //测试用 这里可以修改数据 //var lastItem=srcStock.minute[srcStock.minute.length-1]; //lastItem.price+=Math.ceil(Math.random()*10)/1000*lastItem.price; /* for(var i=0;i<srcStock.minute.length;++i) { var item=srcStock.minute[i]; if (item.amount<1000000) item.amount*=100000; } */ //stockItem.minute.length=50; var hqchartData={code:0, stock:[stockItem] }; callback(hqchartData); }, 50); } HQData.Minute_RequestPopMinuteData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol[0]; //请求的股票代码 var date=data.Request.Data.date; var callcation=data.Request.Data.callcation; //集合竞价 console.log(`[HQData::RequestPopMinuteData] Symbol=${symbol} Date=${date}`); setTimeout(()=>{ var fullData=HQData.GetDayMinuteDataBySymbol(symbol); var srcStock=fullData[0]; var stockItem={ date:date, minute:[], yclose:srcStock.yclose, symbol:srcStock.symbol, name:srcStock.symbol, IsHistoryMinute:true }; if (callcation.Before) { var before= [ //[交易时间, 价格,成交量, 成交金额, 日期(可选,YYYYMMDD)], [915, srcStock.yclose,0,0], [916, srcStock.yclose+0.01,0,0], [917, srcStock.yclose+0.03,0,0], [918, srcStock.yclose+0.02,0,0], [919, srcStock.yclose+0.02,0,0], [920, srcStock.yclose+0.01,0,0], [921, srcStock.yclose,0,0], [922, srcStock.yclose-0.02,0,0], [923, srcStock.yclose-0.03,0,0], [924, srcStock.yclose,0,0], [925, srcStock.yclose,0,0], ]; var beforeinfo={ totalcount:11, ver:1.0 }; stockItem.before=before; stockItem.beforeinfo=beforeinfo; } for(var i=0;i<srcStock.minute.length;++i) { var item=srcStock.minute[i]; var newItem=CloneData(item); newItem.date=date; stockItem.minute.push(newItem); } var hqchartData={code:0, stock:[stockItem] }; callback(hqchartData); }, 50); } HQData.KLine_RequestMulitDayMinuteData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; //请求的股票代码 console.log(`[HQData::KLine_RequestMulitDayMinuteData] Symbol=${symbol}`); var fullData=HQData.GetMulitDayMinuteDataBySymbol(symbol); var aryKLine=[]; var aryBreakPoint=[]; for(var i=fullData.length-1;i>=0;--i) { var dayItem=fullData[i]; var yClose=dayItem.yclose for(var j=0;j<dayItem.minute.length;++j) { var minItem=dayItem.minute[j]; var kItem=[dayItem.date, yClose, minItem[1], minItem[2], minItem[3], minItem[4],minItem[5],minItem[6], minItem[0] ]; aryKLine.push(kItem); } aryBreakPoint.push({ Date:dayItem.date, Time:1500 }) } var hqchartData={ name:symbol, symbol:symbol, data:aryKLine, ver:2.0, AryBreakPoint:aryBreakPoint }; callback(hqchartData); } HQData.Minute_RequestHistoryMinuteData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; //请求的股票代码 var dayCount=data.Request.Data.daycount; var callcation=data.Request.Data.callcation; //集合竞价 console.log(`[HQData::Minute_RequestHistoryMinuteData] Symbol=${symbol}`); var fullData=HQData.GetMulitDayMinuteDataBySymbol(symbol); var aryDay=[]; if (dayCount>fullData.length) dayCount=fullData.length; aryDay=fullData.slice(0,dayCount); for(var i=0; i<aryDay.length; ++i) { var item=aryDay[i]; if (callcation.Before) { var before= [ //[交易时间, 价格,成交量, 成交金额, 日期(可选,YYYYMMDD)], [915, item.yclose,0,0], [916, item.yclose+0.01,0,0], [917, item.yclose+0.03,0,0], [918, item.yclose+0.02,0,0], [919, item.yclose+0.02,0,0], [920, item.yclose+0.01,0,0], [921, item.yclose,0,0], [922, item.yclose-0.02,0,0], [923, item.yclose-0.03,0,0], [924, item.yclose,0,0], [925, item.yclose,0,0], ]; var beforeinfo={ totalcount:11, ver:1.0 }; item.before=before; item.beforeinfo=beforeinfo; } } var hqchartData={code:0, data:aryDay, name:symbol, symbol: symbol}; //hqchartData.data[0].minute.length=45; callback(hqchartData); } HQData.Minute_RequestOverlayMinuteData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var date=data.Request.Data.days[0]; var fullData=HQData.GetMulitDayMinuteDataBySymbol(symbol); var aryDay=HQData.GetMulitDayMinuteDataByDate(fullData, [date]); var hqchartData={ code:0, data:aryDay, name:symbol, symbol:symbol }; callback(hqchartData); } HQData.Minute_RequestOverlayHistoryMinuteData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var aryDate=data.Request.Data.days; var fullData=HQData.GetMulitDayMinuteDataBySymbol(symbol); var aryDay=HQData.GetMulitDayMinuteDataByDate(fullData, aryDate); var hqchartData={ code:0, data:aryDay, name:symbol, symbol:symbol }; callback(hqchartData); } HQData.RequestHistoryData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; //请求的股票代码 var count=data.Request.Data.count console.log(`[HQData::RequestMinuteDaysData] Symbol=${symbol}`); var fullData=HQData.GetDayKLineDataBySymbol(symbol); var aryData=[]; if (IFrameSplitOperator.IsNonEmptyArray(fullData)) { var dataCount=fullData.length; var start=dataCount-count; if (start<0) start=0; aryData=fullData.slice(start); /* for(var i=aryData.length-5;i<aryData.length;++i) { var item=aryData[i]; item[13]=true; } */ } var hqchartData={ name:symbol, symbol:symbol, data:aryData, ver:2.0 }; callback(hqchartData); } HQData.RequestFlowCapitalData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; //请求的股票代码 console.log(`[HQData::RequestFlowCapitalData] Symbol=${symbol}`); var hqchartData=KLINE_CAPITAL_DATA; callback(hqchartData); } HQData.RequestRealtimeData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol[0]; //请求的股票代码 var end=data.Request.Data.dateRange.End; var endDate=end.Date; var aryStock=[]; var hqchart=data.Self; var kData=hqchart.GetKData(); for(var i=kData.Data.length-1;i>=0;--i) { var item=kData.Data[i]; if (!item.IsVirtual) { endDate=item.Date; break; } } for(var i=0;i<data.Request.Data.symbol.length;++i) { var item=data.Request.Data.symbol[i]; var fullData=HQData.GetDayKLineDataBySymbol(item); if (!IFrameSplitOperator.IsNonEmptyArray(fullData)) continue; var aryData=HQData.GetKLineDataByDate(fullData, endDate, 20999999); if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) continue; var kItem=aryData[0]; var price=kItem[5]; var value=Math.ceil(Math.random()*10)/1000*price; var bUp=Math.ceil(Math.random()*10)>=5; if (bUp) price+=value; else price-=value; var stockItem={ symbol:item, name:item }; stockItem.date=kItem[0]; stockItem.yclose=kItem[1]; stockItem.open=kItem[2]; stockItem.high=Math.max(kItem[3],price); stockItem.low=Math.min(kItem[4],price); stockItem.price=price; stockItem.vol=kItem[6]; stockItem.amount=kItem[7]; aryStock.push(stockItem); } var hqchartData={ code:0, stock:aryStock }; callback(hqchartData); } HQData.RequestHistoryMinuteData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; //请求的股票代码 var count=data.Request.Data.count*200; //请求的数据长度 console.log(`[HQData::RequestHistoryMinuteData] Symbol=${symbol}`); var fullData=HQData.GetM1KLineDataBySymbol(symbol); var aryData=[]; if (IFrameSplitOperator.IsNonEmptyArray(fullData)) { var dataCount=fullData.length; var start=dataCount-count; if (start<0) start=0; aryData=fullData.slice(start); } var hqchartData={ name:symbol, symbol:symbol, data:aryData, ver:2.0 }; callback(hqchartData); } HQData.RequestMinuteRealtimeData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol[0]; //请求的股票代码 var end=data.Request.Data.dateRange.End; var endDate=end.Date; var endTime=end.Time; var aryOverlay=[ ]; //叠加 var aryMainData=[]; //主图 for(var i=0;i<data.Request.Data.symbol.length;++i) { var symbol=data.Request.Data.symbol[i]; var fullData=HQData.GetM1KLineDataBySymbol(symbol); if (!IFrameSplitOperator.IsNonEmptyArray(fullData)) continue; var aryData=HQData.GetKLineDataByDateTime(fullData, endDate, endTime, 20999999, 9999); if (!IFrameSplitOperator.IsNonEmptyArray(aryData)) continue; var kItem=JSON.parse(JSON.stringify(aryData[0])); //生成随机测试数据 var price=kItem[5]; var value=Math.ceil(Math.random()*10)/5000*price; var bUp=Math.ceil(Math.random()*10)>=5; if (bUp) price+=value; else price-=value; kItem[5]=price; kItem[3]=Math.max(price, kItem[3]); kItem[4]=Math.min(price, kItem[4]); if (i==0) { aryMainData.push(kItem); } else { var stock={ data:[kItem], symbol:symbol, name:symbol }; aryOverlay.push(stock); } } var symbol=data.Request.Data.symbol[0]; //请求的股票代码 var hqchartData={ name:symbol, symbol:symbol, ver:2.0, data:aryMainData }; if (IFrameSplitOperator.IsNonEmptyArray(aryOverlay)) hqchartData.overlay=aryOverlay; callback(hqchartData); } HQData.RequestIndexVariantData=function(data,callback) { data.PreventDefault=true; var varName=data.Request.Data.VariantName; //变量名称 if (varName=="FROMOPEN") { var hqchartData={ }; //单数据 hqchartData.Data={ Date:20230707, Value:240 }; hqchartData.DataType=1; callback(hqchartData); } else if (varName=="FGBLOCK") { var hqchartData={ DataType:1, Data:{Value:"融资融券 大盘股 MSCI成份 周期股 沪股通标的"} }; //返回所属风格板块. callback(hqchartData); } else if (varName=="GNBLOCK") { var hqchartData={ DataType:1, Data:{ Value:"含可转债 跨境支付CIPS"} }; //返回所属概念板块. callback(hqchartData); } else if (varName=="HYBLOCK") { var hqchartData={ DataType:1, Data:{Value:"全国性银行"}}; //返回品种所属行业. callback(hqchartData); } else if (varName=="DYBLOCK") { var hqchartData={ DataType:1, Data:{Value:"上海板块"} }; //返回品种所属地域.. callback(hqchartData); } else if (varName=="CAPITAL") { var hqchartData={ DataType:1, Data:{ Value:29352177375 } }; // 当前流通股本,单位为手,债券1手为10张,其它为100 callback(hqchartData); } else if (varName=="LARGEINTRDVOL") { //测试数据 var kData=data.Self.Data; var hqchartData={ DataType:2, Data:[] }; var testValue=0.15; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; hqchartData.Data.push({ Date:kItem.Date, Time:kItem.Time, Value:kItem.Vol*testValue }); testValue+=0.01; if (testValue>0.23) testValue=0.15; } callback(hqchartData); } else if (varName=="LARGEOUTTRDVOL") { //测试数据 var kData=data.Self.Data; var hqchartData={ DataType:2, Data:[] }; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; hqchartData.Data.push({ Date:kItem.Date, Time:kItem.Time, Value:kItem.Vol*0.17 }); } callback(hqchartData); } else if (varName=="EXCHANGE" || varName=="HSL") { var kData=data.Self.Data; var hqchartData={ DataType:0, Data:[], Ver:2.0 }; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; var value=HQData.GetRandomTestData(1,10); hqchartData.Data.push({ Date:kItem.Date, Time:kItem.Time, Value:value }); } callback(hqchartData); } else { var error= `变量'${varName}' 没有对接数据. [HQData.RequestIndexVariantData]`; var hqchartData={ Error:error }; callback(hqchartData); } } HQData.CustomFunction_RequestData=function(data, callback) { data.PreventDefault=true; var funcName=data.Request.Data.FunctionName; var hqchartData=null; if (funcName=='L2_VOL') { var args=data.Request.Data.JobItem.Args; var param=[ args[0].Value, args[1].Value ]; var hqchartData={ DataType:2, Data:[] }; var kData=data.Self.Data; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; hqchartData.Data.push({ Date:kItem.Date, Time:kItem.Time, Value:kItem.Vol/3 }); } } else { var error= `函数'${funcName}' 没有对接数据. [HQData.CustomFunction_RequestData]`; var hqchartData={ Error:error }; } callback(hqchartData); } HQData.CustomVarData_RequestData=function(data, callback) { data.PreventDefault=true; var varName=data.Request.Data.VariantName; if (varName=="DCLOSE") { var hqchartData={ DataType:2, Data:[] }; var kData=data.Self.Data; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; hqchartData.Data.push({ Date:kItem.Date, Time:kItem.Time, Value:kItem.Close }); } callback(hqchartData); } else { var error= `变量'${varName}' 没有对接数据. [HQData.CustomVarData_RequestData]`; var hqchartData={ Error:error }; callback(hqchartData); } } HQData.RequestOtherSymbolData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var period=data.Request.Data.period; var right=data.Request.Data.right; var start=data.Request.Data.dateRange.Start; var end=data.Request.Data.dateRange.End; var aryData=[]; if (ChartData.IsDayPeriod(period,true)) { var fullData=HQData.GetDayKLineDataBySymbol(symbol); if (IFrameSplitOperator.IsNonEmptyArray(fullData)) aryData=HQData.GetKLineDataByDate(fullData, start.Date, end.Date); } else if (ChartData.IsMinutePeriod(period,true)) { var fullData=this.GetM1KLineDataBySymbol(symbol); if (IFrameSplitOperator.IsNonEmptyArray(fullData)) aryData=HQData.GetKLineDataByDateTime(fullData, start.Date, start.Time, end.Date, end.Time); } var hqchartData={ name:symbol, name:symbol, data:aryData }; callback(hqchartData); } HQData.AnnouncementInfo_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Symbol; var hqchartData={ symbol:symbol, report:[] }; var kData=data.HQChart.ChartPaint[0].Data; for(var i=0, j=1;i<kData.Data.length;++i) { var kItem=kData.Data[i]; if (i%10!=4) continue; var itemReport={ releasedate:kItem.Date, time:kItem.Time, title:`公告(${j}) xxxx`, } hqchartData.report.push(itemReport); ++j; } callback(hqchartData); } HQData.PforecastInfo_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Symbol; var hqchartData={ symbol:symbol, report:[] }; var kData=data.HQChart.ChartPaint[0].Data; for(var i=0, j=1;i<kData.Data.length;++i) { var kItem=kData.Data[i]; if (i%10!=4) continue; var year=parseInt(kItem.Date/10000); //年份 var month=parseInt(kItem.Date/100)%100; var reprotDate=0; if (month>10) reprotDate=year*10000+1231; else if (month>6) reprotDate=year*10000+930; else if (month>3) reprotDate=year*10000+630; else reprotDate=year*10000+331; var itemReport={ date:kItem.Date, time:kItem.Time, title:`业绩预增`, reportdate:reprotDate, fweek:{ week1:0.04, week4:0.02 } } hqchartData.report.push(itemReport); ++j; } callback(hqchartData); } HQData.InvestorInfo_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Symbol; callback(TEST_NEWSINTERACT_DATA); } HQData.ResearchInfo_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Symbol; var hqchartData={ symbol:symbol, list:[] }; var kData=data.HQChart.ChartPaint[0].Data; for(var i=0, j=1;i<kData.Data.length;++i) { var kItem=kData.Data[i]; if (i%20!=4) continue; var itemReport={ researchdate:kItem.Date, id:i, level:[j%4], type:"xxx调研。" }; hqchartData.list.push(itemReport); ++j; } callback(hqchartData); } HQData.BlockTrading_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Symbol; callback(TEST_BLOCK_TRADING_DATA); } HQData.TradeDetail_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Symbol; callback(TEST_TRADE_DETAL_DATA); } HQData.RequestLatestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol[0]; var id=data.Args[0]; var value=1; var fullData=HQData.GetDayKLineDataBySymbol(symbol); if (IFrameSplitOperator.IsNonEmptyArray(fullData)) { var item=fullData[fullData.length-1]; //取最后一条数据 switch(id) { case 3: value=item[1]; break; case 4: value=item[2]; break; case 5: value=item[3]; break; case 6: value=item[4]; break; case 7: value=item[5]; break; case 8: value=item[6]; break; } } var hqchartData={ symbol:symbol, ver:2.0, data:[ {id:id, value:value }]}; callback(hqchartData); } HQData.RequestOverlayHistoryData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var first=data.Request.Data.first; var fullData=HQData.GetDayKLineDataBySymbol(symbol); var aryData=[]; if (IFrameSplitOperator.IsNonEmptyArray(fullData)) { aryData=HQData.GetKLineDataByDate(fullData, first.date, 20999999) } //aryData=aryData.slice(aryData.length-20); var hqchartData={ code:0, symbol: symbol,name: symbol, ver:2.0, data:aryData }; callback(hqchartData); } HQData.RequestOverlayHistoryMinuteData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var first=data.Request.Data.first; var aryData=[]; var fullData=HQData.GetM1KLineDataBySymbol(symbol); if (fullData) { aryData=HQData.GetKLineDataByDateTime(fullData, first.date, first.time, 20999999, 9999) } var hqchartData={ symbol: symbol,name: symbol, ver:2.0, data:aryData }; callback(hqchartData); } HQData.GetKLineDataByDateTime=function(fullData, startDate, startTime, endDate, endTime) { var start=startDate*10000+startTime; var end=endDate*10000+endTime; var aryData=[]; for(var i=0;i<fullData.length;++i) { var kItem=fullData[i]; var date=kItem[0]; var time=kItem[8]; var dateTime=date*10000+time; if (dateTime>=start && dateTime<=end) aryData.push(kItem); } return aryData; } HQData.Finance_RequestData=function(data,callback) { data.PreventDefault=true; var id=data.Request.Data.id; var hqchartData=null; if (id==7) // 流通股本(随时间可能有变化) { hqchartData=TEST_FINANCE_7.data; } else { var error= `Finance(${id}) 没有对接数据. [HQData.Finance_RequestData]`; hqchartData={ Error:error }; } if (hqchartData) callback(hqchartData); } //GPJYVALUE(ID,N,TYPE),ID为数据编号,N表示第几个数据(取1或2),TYPE:为1表示做平滑处理,没有数据的周期返回上一周期的值;为0表示不做平滑处理;2表示没有数据则为0. HQData.GPJYValue_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var id=data.Request.Data.Args[0]; var n=data.Request.Data.Args[1]; var type=data.Request.Data.Args[2]; var aryData=[]; var kData=data.Self.Data; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; if (i%50==15) { var value=HQData.GetRandomTestData(10,100) aryData.push({ Date:kItem.Date, Time:kItem.Time, Value:value }); } } callback(aryData); } HQData.SCJYValue_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var id=data.Request.Data.Args[0]; var n=data.Request.Data.Args[1]; var type=data.Request.Data.Args[2]; var aryData=[]; var kData=data.Self.Data; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; if (i%50==20) { var value=HQData.GetRandomTestData(1000,2000) aryData.push({ Date:kItem.Date, Time:kItem.Time, Value:value }); } } callback(aryData); } HQData.BKJYValue_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var id=data.Request.Data.Args[0]; var n=data.Request.Data.Args[1]; var type=data.Request.Data.Args[2]; var aryData=[]; var kData=data.Self.Data; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; if (i%60==33) { var value=HQData.GetRandomTestData(500,1000) aryData.push({ Date:kItem.Date, Time:kItem.Time, Value:value }); } } callback(aryData); } HQData.GPJYOne_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var id=data.Request.Data.Args[0]; var n=data.Request.Data.Args[1]; var year=data.Request.Data.Args[2]; var day=data.Request.Data.Args[3]; var value=HQData.GetRandomTestData(800,1200); callback({ Date:20230509, Value:value}); } HQData.SCJYOne_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var id=data.Request.Data.Args[0]; var n=data.Request.Data.Args[1]; var year=data.Request.Data.Args[2]; var day=data.Request.Data.Args[3]; var value=HQData.GetRandomTestData(400,500); callback({ Date:20230509, Value:value}); } HQData.BKJYOne_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var id=data.Request.Data.Args[0]; var n=data.Request.Data.Args[1]; var year=data.Request.Data.Args[2]; var day=data.Request.Data.Args[3]; var value=HQData.GetRandomTestData(900,2000); callback({ Date:20230509, Value:value}); } HQData.FinValue_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var id=data.Request.Data.Args[0]; var aryData=[]; var kData=data.Self.Data; for(var i=0;i<kData.Data.length;++i) { var kItem=kData.Data[i]; if (i%60==21) { var value=HQData.GetRandomTestData(10,20) aryData.push({ Date:kItem.Date, Time:kItem.Time, Value:value }); } } callback(aryData); } HQData.FinOne_RequestData=function(data,callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol; var id=data.Request.Data.Args[0]; var year=data.Request.Data.Args[1]; var day=data.Request.Data.Args[2]; var value=HQData.GetRandomTestData(80,90); callback({ Date:20230509, Value:value}); } HQData.INDEX_RequestData=function(data,callback) { data.PreventDefault=true; var period=data.Period; var symbol=data.Request.Data.symbol; var indexSymbol="000001.sh"; var dateRange=data.Request.Data.dateRange; var aryData=[]; if (ChartData.IsMinutePeriod(period, true)) { var fullData=HQData.GetM1KLineDataBySymbol(symbol); if (fullData) aryData=HQData.GetKLineDataByDateTime(fullData, dateRange.Start.Date, dateRange.Start.Time, dateRange.End.Date, dateRange.End.Time); } else if (ChartData.IsDayPeriod(period,true)) { var fullData=HQData.GetDayKLineDataBySymbol(indexSymbol); if (fullData) aryData=HQData.GetKLineDataByDate(fullData, dateRange.Start.Date, dateRange.End.Date); } var hqchartData={ name:indexSymbol, symbol:indexSymbol, data:aryData, ver:2.0 }; callback(hqchartData); } ////////////////////////////////////////////////////////////////////////////////////// // 报价列表 // // ///////////////////////////////////////////////////////////////////////////////////// //码表 HQData.Report_RequestStockListData=function(data, callback) { data.PreventDefault=true; var hqchartData={ data:[] }; if (IFrameSplitOperator.IsNonEmptyArray(SHSZ_STOCK_LIST_TEST_DATA.symbol)) { //0=证券代码 1=股票名称 for(var i=0;i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length;++i) { var symbol=SHSZ_STOCK_LIST_TEST_DATA.symbol[i]; var name=SHSZ_STOCK_LIST_TEST_DATA.name[i]; var item=[symbol,name]; //item[88]=1; hqchartData.data.push(item); } } console.log("[HQData.Report_RequestStockListData] hqchartData",hqchartData); callback(hqchartData); } //空码表 HQData.Report_RequestStockListData_Empty=function(data, callback) { data.PreventDefault=true; var hqchartData={ data:[] }; console.log("[HQData.Report_RequestStockListData_EMPTY] hqchartData",hqchartData); callback(hqchartData); } HQData.Report_RequestMemberVirtualListData=function(data, callback, option) { var symbol=data.Request.Data.symbol; //板块代码 data.PreventDefault=true; var hqchartData= { symbol:symbol , name:symbol, data:[] , code:0, Virtual:{ Count:option.Virtual.Count } }; for(var i=0; i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length && i<50; ++i ) { hqchartData.data.push(SHSZ_STOCK_LIST_TEST_DATA.symbol[i]); } callback(hqchartData); } //板块|行业等成分列表 HQData.Report_RequestMemberListDat=function(data, callback) { var symbol=data.Request.Data.symbol; //板块代码 data.PreventDefault=true; var hqchartData= { symbol:symbol , name:symbol, data:[] , code:0 }; var testDataCount=SHSZ_STOCK_LIST_TEST_DATA.symbol.length; var testIndex=Math.round(Math.random()*(testDataCount-100)); var count=parseInt(Math.random()*(200)+100); ; for(var i=testIndex, j=0; i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length && j<count; ++i, ++j) { hqchartData.data.push(SHSZ_STOCK_LIST_TEST_DATA.symbol[i]); } callback(hqchartData); } HQData.Report_RequestStockData=function(data, callback) { var stocks=data.Request.Data.stocks; //股票列表 data.PreventDefault=true; setTimeout(()=> { var mapStock=new Map(); for(var i=0;i<stocks.length;++i) { var item=stocks[i]; mapStock.set(item.Symbol,{ Symbol:item.Symbol, Data:null }); } if (IFrameSplitOperator.IsNonEmptyArray(SHSZ_STOCK_LIST_TEST_DATA.symbol)) { for(var i=0;i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length;++i) { var symbol=SHSZ_STOCK_LIST_TEST_DATA.symbol[i]; if (!mapStock.has(symbol)) continue; var item=mapStock.get(symbol); var name=SHSZ_STOCK_LIST_TEST_DATA.name[i]; var price=SHSZ_STOCK_LIST_TEST_DATA.close[i]; var vol=SHSZ_STOCK_LIST_TEST_DATA.vol[i]; var newItem= [ symbol, name, SHSZ_STOCK_LIST_TEST_DATA.yclose[i], SHSZ_STOCK_LIST_TEST_DATA.open[i], SHSZ_STOCK_LIST_TEST_DATA.high[i], SHSZ_STOCK_LIST_TEST_DATA.low[i], price, vol, SHSZ_STOCK_LIST_TEST_DATA.amount[i], ]; //买价 量 newItem[9]=price+0.05; newItem[10]=10; //卖价 量 newItem[11]=price-0.06; newItem[12]=5; //均价 newItem[13]=price-0.03; //内盘 newItem[18]=vol/4; //外盘 newItem[19]=vol/5; newItem[14]=vol*1.5; //流通股本 newItem[15]=vol*1.8; //总股本 //换手率 newItem[23]=(Math.round(Math.random()*60))/100; //名字字段 var symbolEx={ Text:name }; if (i%20==5) symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}, { Text:'\ue627', Color:'#1c65db'} ] }; else if (i%20==9) symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}] } ; else if (i%20==18) symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue627', Color:'#1c65db'}] } ; newItem[27]=symbolEx; newItem[38]=HQData.GetRandomTestData(10,20000); //持仓量 newItem[39]=HQData.GetRandomTestData(10,100); //结算价 newItem[40]=HQData.GetRandomTestData(10,100); //昨结算价 newItem[41]=HQData.GetRandomTestData(10,20000); //开仓量 newItem[42]=HQData.GetRandomTestData(10,20000); //平仓量 //1,3,5,10,15 涨速% newItem[43]=HQData.GetRandomTestData(-90,90); newItem[44]=HQData.GetRandomTestData(-90,90); newItem[45]=HQData.GetRandomTestData(-90,90); newItem[46]=HQData.GetRandomTestData(-90,90); newItem[47]=HQData.GetRandomTestData(-90,90); //扩展数据 (定制数据) var extendData=[]; newItem[30]=extendData; //行业 extendData[0]="行业X"; //地区 extendData[1]="地区X"; //PE|PB extendData[2]=(Math.round(Math.random()*60))/100; extendData[3]=(Math.round(Math.random()*60))/100; extendData[4]=(Math.round(Math.random()*60))/100; extendData[5]=(Math.round(Math.random()*60))/100; //周涨幅 extendData[6]=(Math.round(Math.random()*60))/100; extendData[7]=(Math.round(Math.random()*60))/100; extendData[8]=(Math.round(Math.random()*60))/100; newItem[32]=HQData.Report_CreateMinuteData(newItem[2]); //K线 var kData={ Data:[newItem[3], newItem[4], newItem[5], newItem[6]] }; newItem[33]=kData; newItem[101]=HQData.GetRandomTestData(-9990,10000000); newItem[201]=`A-[${HQData.GetRandomTestData(-90,90)}]-B`; newItem[301]=HQData.GetRandomTestData(0,100)/100; newItem[302]=HQData.GetRandomTestData(0,100)/100; item.Data=newItem; } } var hqchartData={ data:[], code:0 }; for(var mapItem of mapStock) { var item=mapItem[1]; if (!item.Data) continue; hqchartData.data.push(item.Data); } callback(hqchartData); }, 500); } HQData.Report_CreateMinuteData=function(yClose) { var minuteData={ Data:[], Max:null, Min:null, Count:242, YClose:yClose }; var TEST_DATA=[0.01, -0.02, 0.03, -0.05, -0.01, 0.02, 0.05, 0.01, 0.04, -0.04]; var value=yClose; for(var i=0;i<minuteData.Count;++i) { var index=Math.ceil(Math.random()*10); value+=(yClose*TEST_DATA[index%TEST_DATA.length]); //生成模拟的数据 minuteData.Data[i]=value; if (minuteData.Max==null || minuteData.Max<value) minuteData.Max=value; if (minuteData.Min==null || minuteData.Min>value) minuteData.Min=value; } if (value>yClose) { minuteData.Color="rgb(255,0,0)"; minuteData.AreaColor="rgba(255,0,0,0.2)"; } else if (value<yClose) { minuteData.Color="rgb(4,139,34)"; minuteData.AreaColor="rgba(4,139,34,0.2)"; } return minuteData; } HQData.Report_RequestStockSortData=function(data, callback) { var blockID=data.Request.Data.symbol; //板块代码 var range=data.Request.Data.range; //排序范围 var column=data.Request.Data.column; //排序列信息 var sortType=data.Request.Data.sort; //排序方向 var pageSize=data.Request.Data.pageSize; data.PreventDefault=true; var start=range.start; var end=range.end; if (start>0) start-=pageSize; if (start<0) start=0; end+=pageSize; var aryData=data.Self.Data.Data.slice(); //所有的股票 var mapStock=new Map(); var count=end-start+1; for(var i = 0; i < count; i++) { var index = Math.floor(Math.random()*(aryData.length-1)); var symbol = aryData[index]; mapStock.set(symbol, { Symbol:symbol, Index:i+start, Data:null }); aryData.splice(index, 1); } if (IFrameSplitOperator.IsNonEmptyArray(SHSZ_STOCK_LIST_TEST_DATA.symbol)) { for(var i=0;i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length;++i) { var symbol=SHSZ_STOCK_LIST_TEST_DATA.symbol[i]; if (!mapStock.has(symbol)) continue; var item=mapStock.get(symbol); var name=SHSZ_STOCK_LIST_TEST_DATA.name[i]; var price=SHSZ_STOCK_LIST_TEST_DATA.close[i]; var vol=SHSZ_STOCK_LIST_TEST_DATA.vol[i]; var newItem= [ symbol, name, SHSZ_STOCK_LIST_TEST_DATA.yclose[i], SHSZ_STOCK_LIST_TEST_DATA.open[i], SHSZ_STOCK_LIST_TEST_DATA.high[i], SHSZ_STOCK_LIST_TEST_DATA.low[i], price, vol, SHSZ_STOCK_LIST_TEST_DATA.amount[i], ]; //买价 量 newItem[9]=price+0.05; newItem[10]=10; //卖价 量 newItem[11]=price-0.06; newItem[12]=5; //均价 newItem[13]=price-0.03; //内盘 newItem[18]=vol/4; //外盘 newItem[19]=vol/5; newItem[14]=vol*1.5; //流通股本 newItem[15]=vol*1.8; //总股本 //换手率 newItem[23]=(Math.round(Math.random()*60))/100; //名字字段 var symbolEx={ Text:name }; if (i%20==5) symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}, { Text:'\ue627', Color:'#1c65db'} ] }; else if (i%20==9) symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}] } ; else if (i%20==18) symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue627', Color:'#1c65db'}] } ; newItem[27]=symbolEx; //扩展数据 (定制数据) var extendData=[]; newItem[30]=extendData; //行业 extendData[0]="行业X"; //地区 extendData[1]="地区X"; //PE|PB extendData[2]=(Math.round(Math.random()*60))/100; extendData[3]=(Math.round(Math.random()*60))/100; extendData[4]=(Math.round(Math.random()*60))/100; extendData[5]=(Math.round(Math.random()*60))/100; //周涨幅 extendData[6]=(Math.round(Math.random()*60))/100; extendData[7]=(Math.round(Math.random()*60))/100; extendData[8]=(Math.round(Math.random()*60))/100; item.Data=newItem; } } var hqchartData={ data:[], index:[], filedindex:column.index, sort:sortType, symbol:blockID }; for(var mapItem of mapStock) { var item=mapItem[1]; if (!item.Data) continue; hqchartData.data.push(item.Data); hqchartData.index.push(item.Index); } callback(hqchartData); } HQData.Report_RequestVirtualStockData=function(data, callback) { var blockID=data.Request.Data.symbol; //板块代码 var range=data.Request.Data.range; //排序范围 var column=data.Request.Data.column; //排序列信息 var sortType=data.Request.Data.sort; //排序方向 var pageSize=data.Request.Data.pageSize; data.PreventDefault=true; var start=range.start; var end=range.end; if (start>0) start-=pageSize; if (start<0) start=0; end+=pageSize; var count=end-start+1; var aryData=[]; var aryIndex=[]; if (IFrameSplitOperator.IsNonEmptyArray(SHSZ_STOCK_LIST_TEST_DATA.symbol)) { var randomStart = Math.floor(Math.random()*(SHSZ_STOCK_LIST_TEST_DATA.symbol.length-1)); var symbolCount=SHSZ_STOCK_LIST_TEST_DATA.symbol.length; for(var i=0;i<count;++i) { var dataIndex=(randomStart+i)%symbolCount; var symbol=SHSZ_STOCK_LIST_TEST_DATA.symbol[dataIndex]; var name=SHSZ_STOCK_LIST_TEST_DATA.name[dataIndex]; var price=SHSZ_STOCK_LIST_TEST_DATA.close[dataIndex]; var vol=SHSZ_STOCK_LIST_TEST_DATA.vol[dataIndex]; var newItem= [ symbol, name, SHSZ_STOCK_LIST_TEST_DATA.yclose[dataIndex], SHSZ_STOCK_LIST_TEST_DATA.open[dataIndex], SHSZ_STOCK_LIST_TEST_DATA.high[dataIndex], SHSZ_STOCK_LIST_TEST_DATA.low[dataIndex], price, vol, SHSZ_STOCK_LIST_TEST_DATA.amount[dataIndex], ]; //买价 量 newItem[9]=price+0.05; newItem[10]=10; //卖价 量 newItem[11]=price-0.06; newItem[12]=5; //均价 newItem[13]=price-0.03; //内盘 newItem[18]=vol/4; //外盘 newItem[19]=vol/5; newItem[14]=vol*1.5; //流通股本 newItem[15]=vol*1.8; //总股本 //换手率 newItem[23]=(Math.round(Math.random()*60))/100; //名字字段 var symbolEx={ Text:name }; if (i%20==5) symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}, { Text:'\ue627', Color:'#1c65db'} ] }; else if (i%20==9) symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb