UNPKG

hqchart

Version:

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

1,350 lines (1,141 loc) 147 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; //集合竞价 var bBuySellBar=data.Request.Data.IsShowBuySellBar; console.log(`[HQData::RequestMinuteData] Symbol=${symbol}, Update=${data.Self.DataStatus.LatestDay}`); if (data.Self.DataStatus.LatestDay) //增量更新模式 { HQData.Minute_RequestMinuteUpdateData(data, callback); return; } setTimeout(()=>{ var fullData=HQData.GetDayMinuteDataBySymbol(symbol); var srcStock=fullData[0]; var stockItem={ date:srcStock.date, minute:srcStock.minute.slice(), 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 before=[]; var beforeinfo={ totalcount:60*10, ver:2.0 }; //9:15-9:25 集合竞价15分钟 1s一个数据 var price=srcStock.yclose+0.01; var date=new Date(2021,5,2, 9,15, 0); var mapTest=new Map( [ [91505, [91505,price+0.01, 400, 300, 1, 800]], [91550, [91550,price+0.02, 550, 600, 0, 1500]], [91603, [91603,price+0.03, 300, 600, 1, 3600]], [91613, [91613,price+0.03, 150, 320, 1, 3600]], [91623, [91623,price+0.04, 200, 400, 1, 3600]], [91635, [91635,price+0.05, 100, 100, 1, 3600]], [91640, [91640,price+0.03, 350, 210, 2, 1600]], [91711, [91711,price+0.02, 3210, 350, 2, 3700]], [91731, [91731,price+0.04, 110, 450, 1, 3700]], [91825, [91825,price-0.01, 210, 650, 2, 3700]], [91855, [91855,price-0.02, 330, 440, 1, 1000]], [91915, [91915,price-0.03, 630, 640, 1, 1200]], [92022, [92022,price+0.01, 260, 550, 2, 1000]], [92304, [92304,price-0.02, 300, 100, 2, 1000]], [92314, [92314,price-0.03, 550, 150, 2, 1000]], [92344, [92344,price-0.04, 550, 150, 1, 1000]], [92357, [92357,price-0.05, 250, 750, 1, 1500]], [92405, [92405,price-0.07, 450, 50, 2, 1000]], [92435, [92435,price-0.08, 650, 250, 1, 1000]], [92458, [92458,price-0.12, 350, 350, 2, 1000]], ]) for(var i=0;i<beforeinfo.totalcount; ++i) //1s一个数据 { var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); var item=[ time, null, null, null, null, null ]; if (mapTest.has(time)) { item=mapTest.get(time); } date.setSeconds(date.getSeconds()+1); before.push(item); } */ if (symbol=="000001.sh") //指数 { var before=[]; var beforeinfo={ totalcount:60*10, ver:3.0, TimeConfig:{ AryTime:[{ Start:91500, End:92459, Date:srcStock.date }]} }; //9:15-9:25 集合竞价15分钟 1s一个数据 var price=srcStock.yclose+0.01; var vol=0; var date=new Date(2021,5,2, 9,15, 0); var testData={ Up:1, Max:srcStock.yclose*1.02, Min:srcStock.yclose*0.98 }; for(var i=0;i<beforeinfo.totalcount; ++i) //3s一个数据 { var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); vol=HQData.GetRandomTestData(100,500)*1000; var item=[ time, price, price+0.04, vol, 3, vol*1.3 ]; before.push(item); if (price>testData.Max && testData.Up===1) testData.Up=0; else if (price<testData.Min && testData.Up===0) testData.Up=1; var value=HQData.GetRandomTestData(1,10)/100; if (testData.Up==1) price+=value; else price-=value; date.setSeconds(date.getSeconds()+3); time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); if (time>92500) break; } } else //股票 { var before=[]; var beforeinfo={ totalcount:60*10, ver:2.0, TimeConfig:{ AryTime:[{ Start:91500, End:92459, Date:srcStock.date }]} }; //9:15-9:25 集合竞价15分钟 1s一个数据 var price=srcStock.yclose+0.01; var date=new Date(2021,5,2, 9,15, 0); before= [ [91505,price+0.01, 400, 300, 1, 800], [91550,price+0.02, 550, 600, 0, 1500], [91603,price+0.03, 300, 600, 1, 3600], [91613,price+0.03, 150, 320, 1, 3600], [91623,price+0.04, 200, 400, 1, 3600], [91635,price+0.05, 100, 100, 1, 3600], [91640,price+0.03, 350, 210, 2, 1600], [91711,price+0.02, 3210, 350, 2, 3700], [91731,price+0.04, 110, 450, 1, 3700], [91825,price-0.01, 210, 650, 2, 3700], [91855,price-0.02, 330, 440, 1, 1000], [91915,price-0.03, 630, 640, 1, 1200], [92022,price+0.01, 260, 550, 2, 1000], [92304,price-0.02, 300, 100, 2, 1000], [92314,price-0.03, 550, 150, 2, 1000], [92344,price-0.04, 550, 150, 1, 1000], [92357,price-0.05, 250, 750, 1, 1500], [92405,price-0.07, 450, 50, 2, 1000], [92435,price-0.08, 650, 250, 1, 1000], [92458,price-0.12, 350, 350, 2, 1000], ]; } stockItem.before=before; stockItem.beforeinfo=beforeinfo; } //盘中 //stockItem.minute.length=50; //测试用 这里可以修改数据 //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; } */ if (bBuySellBar) //盘口分析 { var lastPrice=srcStock.yclose; if (stockItem.minute.length>0) lastPrice=stockItem.minute[stockItem.minute.length-1].price; var aryBuy=[]; var value=lastPrice+0.01; for(var i=0;i<10;++i) { aryBuy.push({Price:value, Type:1, Vol:HQData.GetRandomTestData(1000,10000) }); value+=0.02; } var arySell=[]; for(var i=0;i<10;++i) { arySell.push({Price:value, Type:2, Vol:HQData.GetRandomTestData(1000,10000) }); value+=0.02; } stockItem.BuySellData={ AryBuy:aryBuy, ArySell:arySell }; } //盘后 if (callcation.After) { var price=stockItem.minute[stockItem.minute.length-1].price; /* var afterData=[] var afterInfo={ ver:2.0, totalcount:60*3 } //14:57-15:00 var date=new Date(2021,5,2, 14,57, 0); var mapTest=new Map( [ [145708, [145708,price+0.01, 400, 300, 1, 800]], [145718, [145718,price+0.02, 550, 600, 0, 1500]], [145738, [145738,price+0.02, 150, 800, 0, 1500]], [145748, [145748,price+0.02, 150, 800, 0, 1500]], [145803, [145803,price+0.03, 300, 600, 1, 3600]], [145815, [145815,price+0.03, 350, 210, 2, 1600]], [145826, [145826,price+0.02, 1210, 350, 2, 2700]], [145833, [145833,price+0.01, 260, 550, 2, 1000]], [145845, [145845,price+0.02, 160, 750, 2, 1000]], [145858, [145858,price-0.01, 460, 650, 2, 1500]], [145905, [145905,price-0.02, 160, 450, 1, 1500]], [145928, [145928,price-0.02, 260, 250, 1, 1500]], [145948, [145948,price-0.02, 860, 150, 1, 1500]], ]) for(var i=0;i<afterInfo.totalcount; ++i) //1s一个数据 { var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); var item=[ time, null, null, null, null, null ]; if (mapTest.has(time)) { item=mapTest.get(time); } date.setSeconds(date.getSeconds()+1); afterData.push(item); } */ if (symbol=="000001.sh") //指数 { var afterData=[] var afterInfo={ ver:3.0, totalcount:60*3, TimeConfig:{ AryTime:[{ Start:145700, End:145959, Date:srcStock.date }]} } //14:57-15:00 var date=new Date(2021,5,2, 14,57, 0); var vol=0; for(var i=0;i<afterInfo.totalcount; ++i) //1s一个数据 { var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); vol=HQData.GetRandomTestData(100,500)*1000; var item=[ time, price, price+0.04, vol, 3, vol*1.3 ]; afterData.push(item); date.setSeconds(date.getSeconds()+3); var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); if (time>145959) break; } } else { var afterData=[] var afterInfo={ ver:2.0, totalcount:60*3, TimeConfig:{ AryTime:[{ Start:145700, End:145959, Date:srcStock.date }]} } //14:57-15:00 if (stockItem.minute.length>=240) { afterData= [ [145708,price+0.01, 400, 300, 1, 800], [145718,price+0.02, 550, 600, 0, 1500], [145738,price+0.02, 150, 800, 0, 1500], [145748,price+0.02, 150, 800, 0, 1500], [145803,price+0.03, 300, 600, 1, 3600], [145815,price+0.03, 350, 210, 2, 1600], [145826,price+0.02, 1210, 350, 2, 2700], [145833,price+0.01, 260, 550, 2, 1000], [145845,price+0.02, 160, 750, 2, 1000], [145858,price-0.01, 460, 650, 2, 1500], [145905,price-0.02, 160, 450, 1, 1500], [145928,price-0.02, 260, 250, 1, 1500], [145948,price-0.02, 860, 150, 1, 1500], ]; } } stockItem.after=afterData; stockItem.afterinfo=afterInfo; } var hqchartData={code:0, stock:[stockItem] }; var time=new Date(); if (time.getSeconds()%3==1) hqchartData.LatestPointFlash={ FlashCount:2 }; callback(hqchartData); }, 50); } //增量更新 HQData.Minute_RequestMinuteUpdateData=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol[0]; //请求的股票代码 var callcation=data.Request.Data.callcation; //集合竞价 var bBuySellBar=data.Request.Data.IsShowBuySellBar; console.log(`[HQData::Minute_RequestMinuteUpdateData] Symbol=${symbol}`); var endTime=0; if (data.DateRange) { endTime=data.DateRange.End.Time; } setTimeout(()=> { var fullData=HQData.GetDayMinuteDataBySymbol(symbol); var srcStock=fullData[0]; var stockItem={ date:srcStock.date, minute:[], yclose:srcStock.yclose, symbol:symbol, name:symbol }; var lastItem=null; for(var i=0;i<srcStock.minute.length;++i) { var item=srcStock.minute[i]; if (item.time>=endTime) { //0=日期 1=时间 2=开 3=高 4=低 5=收 6=均价 7=量 8=金额 9=涨幅 10=涨跌 var minItem=[srcStock.date, item.time, item.open, item.high, item.low, item.price, item.avprice , item.vol, item.amount ]; stockItem.minute.push(minItem); lastItem=minItem; if (stockItem.minute.length>3) break; } } if (callcation.Before) { if (symbol=="000001.sh") //指数 { var before=[]; var beforeinfo={ totalcount:60*10, ver:3.0, TimeConfig:{ AryTime:[{ Start:91500, End:92459, Date:srcStock.date }]} }; //9:15-9:25 集合竞价15分钟 1s一个数据 var price=srcStock.yclose+0.01; var vol=0; var date=new Date(2021,5,2, 9,15, 0); var testData={ Value:0.01, Up:1, Max:srcStock.yclose*1.02, Min:srcStock.yclose*0.98 }; for(var i=0;i<beforeinfo.totalcount; ++i) //3s一个数据 { vol=HQData.GetRandomTestData(100,500)*1000; var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); var item=[ time, price, price+0.04, vol, 3, vol*1.3 ]; before.push(item); if (price>testData.Max && testData.Up===1) testData.Up=0; else if (price<testData.Min && testData.Up===0) testData.Up=1; var value=HQData.GetRandomTestData(1,10)/100; if (testData.Up==1) price+=value; else price-=value; date.setSeconds(date.getSeconds()+3); time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); if (time>92500) break; } } else { var beforeinfo={ totalcount:60*10, ver:2.0, TimeConfig:{ AryTime:[{ Start:91500, End:92459, Date:srcStock.date }]} }; //9:15-9:25 集合竞价15分钟 1s一个数据 var price=srcStock.yclose-0.01; var before= [ [92344,price-0.03, 150, 150, 2, 1000], [92357,price-0.04, 250, 250, 2, 1500], [92405,price-0.05, 350, 350, 1, 1000], [92435,price-0.06, 450, 450, 1, 1000], [92458,price-0.07, 550, 550, 2, 1000], ]; } stockItem.before=before; stockItem.beforeinfo=beforeinfo; } if (callcation.After) { if (symbol=="000001.sh") //指数 { var afterData=[] var afterInfo={ ver:3.0, totalcount:60*3, TimeConfig:{ AryTime:[{ Start:145700, End:145959, Date:srcStock.date }]} } //14:57-15:00 if (IFrameSplitOperator.IsNonEmptyArray(lastItem) && lastItem[1]>=1457) { var price=lastItem[5]; var date=new Date(2021,5,2, 14,57, 0); var vol=0; for(var i=0;i<afterInfo.totalcount; ++i) //1s一个数据 { var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); vol=HQData.GetRandomTestData(100,500)*1000; var item=[ time, price, price+0.04, vol, 3, vol*1.3 ]; afterData.push(item); date.setSeconds(date.getSeconds()+3); var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); if (time>145959) break; } } } else { var afterInfo={ totalcount:60*10, ver:2.0, TimeConfig:{ AryTime:[{ Start:145700, End:145959, Date:srcStock.date }]} }; //9:15-9:25 集合竞价15分钟 1s一个数据 var afterData=[]; if (IFrameSplitOperator.IsNonEmptyArray(lastItem) && lastItem[1]>=1457) { var price=lastItem[5]; afterData= [ [145708,price+0.01, 400, 300, 1, 800], [145718,price+0.02, 550, 600, 0, 1500], [145738,price+0.02, 150, 800, 0, 1500], [145748,price+0.02, 150, 800, 0, 1500], [145803,price+0.03, 300, 600, 1, 3600], [145815,price+0.03, 350, 210, 2, 1600], [145826,price+0.02, 1210, 350, 2, 2700], [145833,price+0.01, 260, 550, 2, 1000], [145845,price+0.02, 160, 750, 2, 1000], [145858,price-0.01, 460, 650, 2, 1500], [145905,price-0.02, 160, 450, 1, 1500], [145928,price-0.02, 260, 250, 1, 1500], [145948,price-0.02, 860, 150, 1, 1500], ]; } } stockItem.after=afterData; stockItem.afterinfo=afterInfo; } if (bBuySellBar && lastItem) //盘口分析 { var lastPrice=lastItem[4]; var aryBuy=[]; var value=lastPrice+0.01; for(var i=0;i<10;++i) { aryBuy.push({Price:value, Type:1, Vol:HQData.GetRandomTestData(1000,10000) }); value+=0.02; } var arySell=[]; for(var i=0;i<10;++i) { arySell.push({Price:value, Type:2, Vol:HQData.GetRandomTestData(1000,10000) }); value+=0.02; } stockItem.BuySellData={ AryBuy:aryBuy, ArySell:arySell }; } var hqchartData={code:0, stock:[stockItem], dataType:1 }; hqchartData.LatestPointFlash={ FlashCount:2 }; callback(hqchartData); }, 50); } HQData.Minute_RequestMinuteDataV2=function(data, callback) { data.PreventDefault=true; var symbol=data.Request.Data.symbol[0]; //请求的股票代码 var callcation=data.Request.Data.callcation; //集合竞价 console.log(`[HQData::Minute_RequestMinuteDataV2] 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 TEST_BEFORE_DATA= [ [8.52, 50000, 30000, 1, 200000], [8.53, 55000, 40000, 0, 80000], [8.52, 40000, 60000, 1, 80000], [8.55, 30000, 21000, 2, 44000], [8.51, 21000, 25000, 2, 40000], [8.50, 36000, 55000, 2, 60000], [8.49, 10000, 20000, 2, 33000], ]; var date=new Date(parseInt(stockItem.date/10000),(stockItem.date/100%100-1),stockItem.date%100, 9, 15, 0); var count=10*60; //9:15-9:25 var before=[]; for(var i=0, j=0;i<count;++i) { var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); var testIndex=j%TEST_BEFORE_DATA.length; var testData=TEST_BEFORE_DATA[testIndex]; var item=[ time, null, null, null, null, null ]; if (i%20==0 || i==count-1) { item=[ time, testData[0], testData[1], testData[2], testData[3], (testData[1]+testData[2])*1.5 ]; ++j; } before.push(item); date.setSeconds(date.getSeconds()+1); } //before.length=200; var beforeinfo={ totalcount:count, ver:2.0 }; stockItem.before=before; stockItem.beforeinfo=beforeinfo; var TEST_AFTER_DATA= [ [8.51, 40000, 30000, 1, 80000], [8.51, 55000, 60000, 0, 150000], [8.51, 30000, 60000, 1, 160000], [8.51, 35000, 21000, 2, 50000], [8.51, 21000, 35000, 2, 70000], [8.51, 26000, 55000, 2, 100000], [8.51, 30000, 10000, 2, 50000], ]; var date=new Date(parseInt(stockItem.date/10000),(stockItem.date/100%100-1),stockItem.date%100, 14, 57, 0); var count=3*60; //14:57-15:00 var after=[]; for(var i=0,j=0;i<count;++i) { var time=date.getHours()*10000+date.getMinutes()*100+date.getSeconds(); var testIndex=j%TEST_AFTER_DATA.length; var testData=TEST_AFTER_DATA[testIndex]; var item=[ time, null, null, null, null, null ]; if (i%10==0 || i==count-1) { item=[ time, testData[0], testData[1], testData[2], testData[3], (testData[1]+testData[2])*1.5 ]; ++j; } after.push(item); date.setSeconds(date.getSeconds()+1); } var afterinfo={ totalcount:count, ver:2.0 }; stockItem.after=after; stockItem.afterinfo=afterinfo; } //stockItem.minute.length=0; 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; //集合竞价 var bBuySellBar=data.Request.Data.IsShowBuySellBar; 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 stockItem=aryDay[i]; if (callcation.Before) { var before=[]; var beforeinfo={ totalcount:60*10, ver:2.0, TimeConfig:{ AryTime:[{ Start:91500, End:92459, Date:stockItem.date }]} }; //9:15-9:25 集合竞价15分钟 1s一个数据 var price=stockItem.yclose+0.01; before= [ [91505,price+0.01, 400, 300, 1, 800], [91550,price+0.02, 550, 600, 0, 1500], [91603,price+0.03, 300, 600, 1, 3600], [91613,price+0.03, 150, 320, 1, 3600], [91623,price+0.04, 200, 400, 1, 3600], [91635,price+0.05, 100, 100, 1, 3600], [91640,price+0.03, 350, 210, 2, 1600], [91711,price+0.02, 3210, 350, 2, 3700], [91731,price+0.04, 110, 450, 1, 3700], [91825,price-0.01, 210, 650, 2, 3700], [91855,price-0.02, 330, 440, 1, 1000], [91915,price-0.03, 630, 640, 1, 1200], [92022,price+0.01, 260, 550, 2, 1000], [92304,price-0.02, 300, 100, 2, 1000], [92314,price-0.03, 550, 150, 2, 1000], [92344,price-0.04, 550, 150, 1, 1000], [92357,price-0.05, 250, 750, 1, 1500], [92405,price-0.07, 450, 50, 2, 1000], [92435,price-0.08, 650, 250, 1, 1000], [92458,price-0.12, 350, 350, 2, 1000], ]; stockItem.before=before; stockItem.beforeinfo=beforeinfo; } if (callcation.After) { var afterInfo={ totalcount:60*10, ver:2.0, TimeConfig:{ AryTime:[{ Start:145700, End:145959, Date:stockItem.date }]} }; //9:15-9:25 集合竞价15分钟 1s一个数据 var price=stockItem.minute[stockItem.minute.length-1][4]; var afterData= [ [145708,price+0.01, 400, 300, 1, 800], [145718,price+0.02, 550, 600, 0, 1500], [145738,price+0.02, 150, 800, 0, 1500], [145748,price+0.02, 150, 800, 0, 1500], [145803,price+0.03, 300, 600, 1, 3600], [145815,price+0.03, 350, 210, 2, 1600], [145826,price+0.02, 1210, 350, 2, 2700], [145833,price+0.01, 260, 550, 2, 1000], [145845,price+0.02, 160, 750, 2, 1000], [145858,price-0.01, 460, 650, 2, 1500], [145905,price-0.02, 160, 450, 1, 1500], [145928,price-0.02, 260, 250, 1, 1500], [145948,price-0.02, 860, 150, 1, 1500], ]; stockItem.after=afterData; stockItem.afterinfo=afterInfo; } /* 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; } */ } if (bBuySellBar) //盘口分析 { var dayItem=aryDay[0]; var lastPrice=dayItem.minute[dayItem.minute.length-1][4]; var aryBuy=[]; var value=lastPrice+0.01; for(var i=0;i<10;++i) { aryBuy.push({Price:value, Type:1, Vol:HQData.GetRandomTestData(1000,10000) }); value+=0.02; } var arySell=[]; for(var i=0;i<10;++i) { arySell.push({Price:value, Type:2, Vol:HQData.GetRandomTestData(1000,10000) }); value+=0.02; } dayItem.BuySellData={ AryBuy:aryBuy, ArySell:arySell }; } 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; } } var bVer3=true; if (bVer3) { 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 stockItem={ symbol:item, name:item, data:[] }; 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 newKItem=[ ]; newKItem[0]=kItem[0]; newKItem[1]=kItem[1]; newKItem[2]=kItem[2]; newKItem[3]=Math.max(kItem[3],price); newKItem[4]=Math.min(kItem[4],price); newKItem[5]=price; newKItem[6]=kItem[6]; newKItem[7]=kItem[7]; stockItem.data.push(newKItem); aryStock.push(stockItem); } var hqchartData={ code:0, stock:aryStock, Ver:3.0 }; } else { 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, }; } var time=new Date(); //if (time.getSeconds()%3==1) hqchartData.LatestPointFlash={ FlashCount:2 }; 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); }