/* Copyright (c) 2018 jones http://www.apache.org/licenses/LICENSE-2.0 开源项目 https://github.com/jones2000/HQChart jones_2000@163.com 行情数据对接,使用东方财富网页数据做为案例的测试数据源 教程中所有的实例中使用的数据都来自互联网,或测试数据。仅用于学习HQChart图形使用. 教程禁止用于商业产品 */ import $ from "jquery"; // import $, { hasData } from 'jquery' import HQChart from "hqchart"; import moment from "moment"; import apiRrl from "@/axios/api.url"; // 源码调试用 // import Chart from '../../jscommon/umychart.vue/umychart.vue.js' // var HQChart={ Chart:Chart }; function HQData() { } window.globalVar = apiRrl.baseURL; HQData.Explain = "东财财富网接口"; HQChart.Chart.JSConsole.Chart.Log = () => { }; HQChart.Chart.JSConsole.Complier.Log = () => { }; HQData.Log = HQChart.Chart.JSConsole.Chart.Log; HQData.SetMinuteChartCoordinate = function () { HQChart.Chart.MARKET_SUFFIX_NAME.IsShowAvPrice = upperSymbol => { return HQData.IsShowAvPrice(upperSymbol); }; HQChart.Chart.MARKET_SUFFIX_NAME.IsEnableRight = (period, symbol) => { return HQData.IsEnableRight(period, symbol); }; // 美股分时图坐标 HQChart.Chart.JSChart.GetMinuteTimeStringData().CreateUSAData = () => { return HQData.CreateUSAData( HQChart.Chart.JSChart.GetMinuteTimeStringData() ); }; // 替换交易时间段 HQChart.Chart.JSChart.GetMinuteCoordinateData().GetUSAData = ( upperSymbol, width ) => { return HQData.GetUSAData(upperSymbol, width); }; // 替换X轴刻度信息 // A股分时图坐标 HQChart.Chart.JSChart.GetMinuteTimeStringData().CreateSHSZData = () => { return HQData.CreateSHSZData( HQChart.Chart.JSChart.GetMinuteTimeStringData() ); }; // 替换交易时间段 HQChart.Chart.JSChart.GetMinuteCoordinateData().GetSHSZData = ( upperSymbol, width ) => { return HQData.GetSHSZData(upperSymbol, width); }; // 替换X轴刻度信息 // 北交所 HQChart.Chart.JSChart.GetMinuteTimeStringData().CreateBJData = () => { return HQData.CreateSHSZData( HQChart.Chart.JSChart.GetMinuteTimeStringData() ); }; // 替换交易时间段 HQChart.Chart.JSChart.GetMinuteCoordinateData().GetBJData = ( upperSymbol, width ) => { return HQData.GetSHSZData(upperSymbol, width); }; // 替换X轴刻度信息 // 港股分时图坐标 HQChart.Chart.JSChart.GetMinuteTimeStringData().CreateHKData = () => { return HQData.CreateHKData(HQChart.Chart.JSChart.GetMinuteTimeStringData()); }; // 替换交易时间段 HQChart.Chart.JSChart.GetMinuteCoordinateData().GetHKData = ( upperSymbol, width ) => { return HQData.GetHKData(upperSymbol, width); }; // 替换X轴刻度信息 // 外汇分时图坐标 HQChart.Chart.JSChart.GetMinuteTimeStringData().CreateForeignExchangeData = () => { return HQData.CreateForeignExchangeData( HQChart.Chart.JSChart.GetMinuteTimeStringData() ); }; // 替换交易时间段 HQChart.Chart.JSChart.GetMinuteCoordinateData().GetForeignExchangeData = ( upperSymbol, width ) => { return HQData.GetForeignExchangeData(upperSymbol, width); }; // 替换X轴刻度信息 // 期货 var chinaFutrues = HQChart.Chart.JSChart.GetChinaFuturesTimeData(); chinaFutrues.AddNewFutures({ Suffix: ".SHF", Symbol: "WR", Time: 9, Decimal: 2, Name: "线材" }); // obj= { Suffix:后缀, Symbol:品种代码, Time:交易时间段, Decimal:小数位数, Name:名字 } chinaFutrues.AddNewFutures({ Suffix: ".DCE", Symbol: "BB", Time: 9, Decimal: 2, Name: "胶合板" }); chinaFutrues.AddNewFutures({ Suffix: ".DCE", Symbol: "JD", Time: 9, Decimal: 2, Name: "鸡蛋" }); chinaFutrues.AddNewFutures({ Suffix: ".DCE", Symbol: "LH", Time: 9, Decimal: 2, Name: "生猪" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "WH", Time: 9, Decimal: 0, Name: "强麦" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "PM", Time: 9, Decimal: 0, Name: "普麦" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "RI", Time: 9, Decimal: 0, Name: "早籼稻" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "RS", Time: 9, Decimal: 0, Name: "菜籽" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "JR", Time: 9, Decimal: 0, Name: "粳稻" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "LR", Time: 9, Decimal: 0, Name: "晚籼稻" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "LR", Time: 9, Decimal: 0, Name: "晚籼稻" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "SM", Time: 9, Decimal: 0, Name: "锰硅" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "SF", Time: 9, Decimal: 0, Name: "硅铁" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "AP", Time: 9, Decimal: 0, Name: "苹果" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "CJ", Time: 9, Decimal: 0, Name: "红枣" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "UR", Time: 9, Decimal: 0, Name: "尿素" }); chinaFutrues.AddNewFutures({ Suffix: ".CZC", Symbol: "PK", Time: 9, Decimal: 0, Name: "花生" }); // 芝加哥期货交易所 var futrues = HQChart.Chart.JSChart.GetInternalTimeData("CBOTTimeData"); futrues.AddNewFutures({ Symbol: "ZW", Time: 3, Decimal: 2, Name: "小麦" }); futrues.AddNewFutures({ Symbol: "XW", Time: 4, Decimal: 2, Name: "迷你小麦" }); futrues.AddNewFutures({ Symbol: "ZC", Time: 3, Decimal: 2, Name: "玉米" }); futrues.AddNewFutures({ Symbol: "XC", Time: 4, Decimal: 2, Name: "迷你玉米" }); futrues.AddNewFutures({ Symbol: "ZS", Time: 3, Decimal: 2, Name: "大豆" }); futrues.AddNewFutures({ Symbol: "XK", Time: 4, Decimal: 2, Name: "迷你大豆" }); futrues.AddNewFutures({ Symbol: "ZL", Time: 3, Decimal: 2, Name: "豆油" }); futrues.AddNewFutures({ Symbol: "ZM", Time: 3, Decimal: 2, Name: "豆粕" }); futrues.AddNewFutures({ Symbol: "ZO", Time: 3, Decimal: 2, Name: "燕麦" }); futrues.AddNewFutures({ Symbol: "ZR", Time: 3, Decimal: 2, Name: "稻谷" }); futrues.AddNewFutures({ Symbol: "ZL", Time: 3, Decimal: 2, Name: "豆油" }); futrues.AddNewFutures({ Symbol: "NQ", Time: 5, Decimal: 2, Name: "小型纳指" }); futrues.AddNewFutures({ Symbol: "ES", Time: 5, Decimal: 2, Name: "小型标普" }); futrues.AddNewFutures({ Symbol: "YM", Time: 5, Decimal: 0, Name: "小型道指" }); // 美国洲际交易所 // var futrues = HQChart.Chart.JSChart.GetInternalTimeData('IPETimeData') var lIndex = futrues.TIME_SPLIT.length; futrues.TIME_SPLIT[lIndex] = HQData.GetCustomTradeTimeData("IPE_G"); futrues.TIME_SPLIT2[lIndex] = HQData.GetCustomTradeTimeData("IPE_G_2"); futrues.AddNewFutures({ Symbol: "G", Time: lIndex, Decimal: 0, Name: "低硫柴油" }); // 自定义类型 HQChart.Chart.JSChart.GetMinuteTimeStringData().GetET = upperSymbol => { return HQData.GetETTimeData( upperSymbol, HQChart.Chart.JSChart.GetMinuteTimeStringData() ); }; // 当天所有的交易时间点 HQChart.Chart.JSChart.GetMinuteCoordinateData().GetETData = upperSymbol => { return HQData.GetETData(upperSymbol); }; // X轴刻度设置 HQChart.Chart.MARKET_SUFFIX_NAME.GetETDecimal = symbol => { return HQData.GetETDecimal(symbol); }; // 不同品种,使用不同小数位数 HQChart.Chart.MARKET_SUFFIX_NAME.IsETShowAvPrice = symbol => { return false; }; // 提示信息是否显示均线数值 HQChart.Chart.MARKET_SUFFIX_NAME.GetETMarketStatus = symbol => { return 2; }; // 获取市场状态 0=闭市 1=盘前 2=盘中 3=盘后 }; HQData.NetworkFilter = function (data, callback) { HQData.Log(`[HQData::NetworkFilter] ${HQData.Explain}`, data); switch (data.Name) { case "MinuteChartContainer::RequestMinuteData": // 分时图数据对接 HQData.RequestMinuteData(data, callback); break; case "MinuteChartContainer::RequestHistoryMinuteData": HQData.RequestMinuteDaysData(data, callback); break; case "KLineChartContainer::RequestHistoryData": // 日线全量数据下载 HQData.RequestHistoryData(data, callback); break; case "KLineChartContainer::RequestRealtimeData": // 日线实时数据更新 HQData.RequestRealtimeData(data, callback); break; case "KLineChartContainer::RequestFlowCapitalData": // 流通股本 HQData.RequestFlowCapitalData(data, callback); break; case "KLineChartContainer::ReqeustHistoryMinuteData": // 分钟全量数据下载 HQData.RequestHistoryMinuteData(data, callback); break; case "KLineChartContainer::RequestMinuteRealtimeData": // 分钟增量数据更新 HQData.RequestMinuteRealtimeData(data, callback); break; } }; HQData.RequestMinuteData = function (data, callback) { data.PreventDefault = true; var symbol = data.Request.Data.symbol[0]; // 请求的股票代码 // var dayCount = data.Request.Data.daycount console.log(`[HQData::RequestMinuteData] Symbol=${symbol}`); var obj = HQData.GetMinuteApiUrl(symbol, 1); console.log(obj, "======"); $.ajax({ url: obj.Url, type: "GET", success: function (recvData) { HQData.RecvMinuteData(recvData, callback, { Data: data, Obj: obj }); } }); }; HQData.RecvMinuteData = function (recvData, callback, option) { // var data = recvData.data var stock = { symbol: option.Obj.Symbol, minute: [] }; // stock.name = data.name // stock.yclose = data.preClose stock.name = "12312"; stock.yclose = "123"; var symbol = option.Obj.Symbol; var symbolUpper = symbol.toUpperCase(); var isStockA = HQData.IsSHSZ(symbolUpper); // var isChinaFutrues = HQData.IsChinaFutures(symbolUpper) var isLME = HQChart.Chart.MARKET_SUFFIX_NAME.IsLME(symbolUpper); // 伦敦金属交易所 // if (isChinaFutrues) stock.yclearing = data.preSettlement // 期货昨结算价 // for (var i = 0; i < data.trends.length; ++i) { if (typeof recvData === 'string') { recvData = JSON.parse(recvData); } console.log('recvData: ', recvData) // var date = moment.unix(strItem.t || strItem.id).format("YYYYMMDD"); // // // var open = parseFloat(strItem.o || strItem.open); // var close = parseFloat(strItem.c || strItem.close); // var high = parseFloat(strItem.h || strItem.high); // var low = parseFloat(strItem.l || strItem.low); // var vol = parseFloat(strItem.v || strItem.vol) * 100; for (var i = 0; i < recvData.length; ++i) { var strItem = recvData[i]; strItem.t = strItem.t || strItem.id; strItem.c = strItem.c || strItem.close; strItem.h = strItem.h || strItem.high; strItem.l = strItem.l || strItem.low; strItem.v = strItem.v || strItem.vol; // console.log(strItem) // var item = strItem.split(',') // console.log('查看', item) // var today = new Date(Date.parse(item[0])); // 不兼容 safari 浏览器 var today = new Date(strItem.t); // 同时兼容 safari 浏览器 var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate(); var time = today.getHours() * 100 + today.getMinutes(); var stockItem = { date: date, time: time, open: parseFloat(strItem.o), high: parseFloat(strItem.h), low: parseFloat(strItem.l), // price: parseFloat(item[4]), vol: parseFloat(strItem.vo) // amount: parseFloat(item[6]), // avprice: parseFloat(item[7]) }; if (isStockA) stockItem.vol *= 100; if (isLME) stockItem.avprice = null; stock.date = date; stock.minute.push(stockItem); // stock.minute= stockItem; } var hqchartData = { stock: [stock], code: 0 }; if (option.Data.Self.IsDestroy === false) { HQData.Log("[HQData.RecvMinuteDaysData] hqchartData ", hqchartData); callback(hqchartData); } }; HQData.RequestMinuteDaysData = function (data, callback) { data.PreventDefault = true; var symbol = data.Request.Data.symbol; // 请求的股票代码 var dayCount = data.Request.Data.daycount; var symbolUpper = symbol.toUpperCase(); console.log(`[HQData::RequestMinuteDaysData] Symbol=${symbol}`); var obj = HQData.GetMinuteApiUrl(symbol, dayCount); $.ajax({ url: obj.Url, type: "GET", success: function (recvData) { if ( HQChart.Chart.MARKET_SUFFIX_NAME.IsSHFE(symbolUpper) || HQChart.Chart.MARKET_SUFFIX_NAME.IsDCE(symbolUpper) || HQChart.Chart.MARKET_SUFFIX_NAME.IsCZCE(symbolUpper) || HQChart.Chart.MARKET_SUFFIX_NAME.IsCFFEX(symbolUpper) ) { HQData.RecvMinuteDaysDataV2(recvData, callback, { Data: data, Obj: obj }); } else { HQData.RecvMinuteDaysData(recvData, callback, { Data: data, Obj: obj }); } } }); }; HQData.RecvMinuteDaysData = function (recvData, callback, option) { var data = recvData.data; var aryDayData = []; var itemDay = null; var yClose = data.preClose; var symbol = option.Obj.Symbol; var symbolUpper = symbol.toUpperCase(); var isStockA = HQData.IsSHSZ(symbolUpper); var xDatetime = HQChart.Chart.JSChart.GetMinuteTimeStringData().GetTimeData( symbol ); var firstTime = xDatetime[0]; // 第1个数据的时间 var minuteCount = xDatetime.length; var i = 0; for (i = 0; i < data.trends.length; ++i) { var strItem = data.trends[i]; var item = strItem.split(","); // var today = new Date(Date.parse(item[0])); // 不兼容 safari 浏览器 var today = new Date(Date.parse(item[0].replace(/-/g, "/"))); // 同时兼容 safari 浏览器 var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate(); var time = today.getHours() * 100 + today.getMinutes(); if (time === firstTime) break; } for (var j = 0; i < data.trends.length; ++i, ++j) { var strItem = data.trends[i]; var item = strItem.split(","); // var today = new Date(Date.parse(item[0])); // 不兼容 safari 浏览器 var today = new Date(Date.parse(item[0].replace(/-/g, "/"))); // 同时兼容 safari 浏览器 var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate(); var time = today.getHours() * 100 + today.getMinutes(); if (j % minuteCount === 0) { if (itemDay && itemDay.minute.length > 0) aryDayData.push(itemDay); itemDay = { minute: [], date: date, yclose: yClose }; } var price = parseFloat(item[4]); var stockItem = { date: date, time: time, open: price, high: price, low: price, price: price, amount: parseFloat(item[6]), vol: parseFloat(item[5]), avprice: parseFloat(item[7]) }; if (isStockA) stockItem.vol *= 100; itemDay.minute.push([ stockItem.time, stockItem.open, stockItem.high, stockItem.low, stockItem.price, stockItem.vol, stockItem.amount, stockItem.avprice, stockItem.date ]); } if (itemDay && itemDay.minute.length > 0) aryDayData.push(itemDay); aryDayData = aryDayData.reverse(); var hqchartData = { symbol: option.Obj.Symbol, name: data.name, data: aryDayData, code: 0 }; if (option.Data.Self.IsDestroy === false) { HQData.Log("[HQData.RecvMinuteDaysData] hqchartData ", hqchartData); callback(hqchartData); } }; // 期货模式 HQData.RecvMinuteDaysDataV2 = function (recvData, callback, option) { var data = recvData.data; var aryDayData = []; var yClose = data.preClose; var symbol = option.Obj.Symbol; var symbolUpper = symbol.toUpperCase(); var yClearing = data.preSettlement; // 期货昨结算价 var xDatetime = HQChart.Chart.JSChart.GetMinuteTimeStringData().GetTimeData( symbol ); var endTime = xDatetime[xDatetime.length - 1]; // 最后个数据的时间 var minuteCount = xDatetime.length; var itemDay = { minute: [], date: null, yclose: yClose, yclearing: yClearing }; for (var i = 0; i < data.trends.length; ++i) { var strItem = data.trends[i]; var item = strItem.split(","); var today = new Date(Date.parse(item[0])); var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate(); var time = today.getHours() * 100 + today.getMinutes(); var price = parseFloat(item[4]); var stockItem = { date: date, time: time, open: price, high: price, low: price, price: price, amount: parseFloat(item[6]), vol: parseFloat(item[5]), avprice: parseFloat(item[7]) }; itemDay.date = date; itemDay.minute.push([ stockItem.time, stockItem.open, stockItem.high, stockItem.low, stockItem.price, stockItem.vol, stockItem.amount, stockItem.avprice, stockItem.date ]); if (time === endTime) { if (itemDay && itemDay.minute.length > 0) aryDayData.push(itemDay); itemDay = { minute: [], date: null, yclose: yClose, yclearing: yClearing }; } } if (itemDay && itemDay.minute.length > 0) aryDayData.push(itemDay); var preClose = null, preAvprice = null, preDate = null; for (var i = 0; i < aryDayData.length - 1; ++i) { var itemDay = aryDayData[i]; var newMinuteData = HQData.CorrectMinuteData(itemDay.minute, xDatetime); if (newMinuteData) { for (var j = 0; j < newMinuteData.length; ++j) { var item = newMinuteData[j]; if (item.length === 1) { item[1] = item[2] = item[3] = item[4] = preClose; item[5] = item[6] = 0; item[7] = preAvprice; item[8] = preDate; } else { preClose = item[4]; preAvprice = item[7]; preDate = item[8]; } } itemDay.minute = newMinuteData; } else { var item = itemDay.minute[itemDay.minute.length - 1]; preClose = item[4]; preAvprice = item[7]; preDate = item[8]; } } aryDayData = aryDayData.reverse(); var hqchartData = { symbol: option.Obj.Symbol, name: data.name, data: aryDayData, code: 0 }; if (option.Data.Self.IsDestroy === false) { HQData.Log("[HQData.RecvMinuteDaysData] hqchartData ", hqchartData); callback(hqchartData); } }; HQData.CorrectMinuteData = function (minuteData, xDatetime) { if (minuteData.length === xDatetime.length) return null; var mapData = new Map(); for (var i = 0; i < xDatetime.length; ++i) { var item = xDatetime[i]; mapData.set(item, { Index: i, Time: item, Data: null }); } for (var i = 0; i < minuteData.length; ++i) { var item = minuteData[i]; var time = item[0]; var findItem = mapData.get(time); findItem.Data = item; } var newMinuteData = []; for (var item of mapData) { var value = item[1]; if (value.Data) newMinuteData[value.Index] = value.Data; else newMinuteData[value.Index] = [value.Time]; } return newMinuteData; }; // HQChart内置代码转成东方财富代码 HQData.GetInternalSymbol = function (symbol) { var aryData = symbol.split("."); var symbolUpper = symbol.toUpperCase(); var arySymbol = ""; arySymbol = aryData[0].split("_"); // console.log(symbol,aryData,arySymbol,66666666666) if (arySymbol.length === 3) { arySymbol[0] = arySymbol[0] + "_" + arySymbol[1]; arySymbol[1] = arySymbol[2]; } var market = parseInt(arySymbol[1]); var internalSymbol = arySymbol[0]; if (internalSymbol.indexOf("-") > 0) { var aryValue = internalSymbol.split("-"); internalSymbol = aryValue[1]; } return { Market: market, Symbol: internalSymbol }; /* if (HQChart.Chart.MARKET_SUFFIX_NAME.IsUSA(symbolUpper)) //美股 { var market= 105; var set106Market=new Set( ["RENN", "DIDI","BABA","ZH"] ); var set100Market=new Set ( ["DJIA", "SPX", "NDX"] ) if (set106Market.has(aryData[0])) market=106; else if (set100Market.has(aryData[0])) market=100; return { Market:market, Symbol:aryData[0].toUpperCase() }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsSZ(symbolUpper)) { return { Market:0, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsSH(symbolUpper)) { return { Market:1, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsHK(symbolUpper)) //港股 { var market=116; var set100Market=new Set ( ["HSI"] ); if (set100Market.has(aryData[0])) market=100; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsForeignExchange(symbolUpper)) //外汇 { var market=119; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsSHFE(symbolUpper)) { var market=113; //上期能源 if (symbolUpper.indexOf("SC")==0 || symbolUpper.indexOf("NR")==0 || symbolUpper.indexOf("LU")==0 ||symbolUpper.indexOf("BC")==0) market=142; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsDCE(symbolUpper)) { var market=114; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsCZCE(symbolUpper)) { var market=115; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsCFFEX(symbolUpper)) { var market=8; var arySymbol=aryData[0].split('_'); return { Market:market, Symbol:arySymbol[1] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsCBOT(symbolUpper)) { var market=103; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsNYMEX(symbolUpper)) { var market=102; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsCOMEX(symbolUpper)) { var market=101; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsNYBOT(symbolUpper)) { var market=108; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsLME(symbolUpper)) { var market=109; var arySymbol=aryData[0].split('_'); return { Market:market, Symbol:arySymbol[1] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsTOCOM(symbolUpper)) { var market=111; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsIPE(symbolUpper)) { var market=112; return { Market:market, Symbol:aryData[0] }; } else if (HQChart.Chart.MARKET_SUFFIX_NAME.IsET(symbolUpper)) { var market=100; var set100Market=new Set ( ["UDI"] ); if (set100Market.has(aryData[0])) market=100; return { Market:market, Symbol:aryData[0] }; } */ }; HQData.GetMinuteApiUrl = function (symbol, dayCount) { var internalSymbol = HQData.GetInternalSymbol(symbol); console.log("查看", internalSymbol); // var url=`http://push2his.eastmoney.com/api/qt/stock/trends2/get?fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13&fields2=f51,f52,f53,f54,f55,f56,f57,f58&secid=${internalSymbol.Market}.${internalSymbol.Symbol}&ndays=1&iscr=0&iscca=0` // var url = `http://api.mifeng.ws/api/futures/kline?time=1&period=day&symbol=FCPO&type=1` // ==== var url = ""; const kLines = JSON.parse(window.localStorage.getItem("kLine")); console.log("kLines===", kLines); // if (kLines.type === 'IN' ||kLines.type === 'US') { // debugger; if (kLines.type == "HJ") { url = window.globalVar + `api/stock/getKData.do?pid=8888&interval=1&stockType=${kLines.name}`; } else { url = window.globalVar + `api/stock/getKData.do?pid=${kLines.pid}&interval=1&stockType=${kLines.type}`; } // } // if (kLines.type === 'qh') { // url = window.globalVar+`api/stock/getKData.do?symbol=${encodeURIComponent(kLines.pid)}&cmd=history&period=1440&stockType=${kLines.type}` // url = window.globalVar+`api/stock/getKData.do?pid=${kLines.pid}&interval=${interval}&stockType=${kLines.type}` // url = `http://api-v1-f.js-stock.top/getkine?symbol=${encodeURIComponent(kLines.pid)}&cmd=history&period=1440&key=jssj2023key` // } // var url = window.globalVar+`api/stock/getKData.do?pid=${kLines.pid}&interval=${interval}&stockType=${kLines.type}` // var url = `http://api-in.js-stock.top/kline?interval=D&key=nvmihAoT51LnAWCpDeuw&pid=${internalSymbol.Symbol}` return { Url: url, Symbol: symbol, InternalSymbol: internalSymbol, DayCount: dayCount }; }; HQData.IsSHSZ = function (symbol) { // 是否是A股 return HQChart.Chart.MARKET_SUFFIX_NAME.IsSHSZ(symbol); }; HQData.IsChinaFutures = function (symbol) { // 国内期货 return HQChart.Chart.MARKET_SUFFIX_NAME.IsChinaFutures(symbol); }; HQData.IsShowAvPrice = function (upperSymbol) { // 是否显示均价 if (HQChart.Chart.MARKET_SUFFIX_NAME.IsLME(upperSymbol)) return false; if (upperSymbol === "UDI_100.ET") return false; return true; }; // 是否显示第2个成交量图 HQData.IsShowVolChart = function (upperSymbol) { if (HQChart.Chart.MARKET_SUFFIX_NAME.IsForeignExchange(upperSymbol)) return false; if (upperSymbol === "UDI_100.ET") return false; return true; }; /// //////////////////////////////////////////////////////////////////////////////////////// // // 美国洲际交易所 重柴油 // HQData.GetCustomTradeTimeData = function (key) { // 美国洲际交易所 重柴油 数据从7:50开始,是盘前数据吗???? if (key === "IPE_G") { // 7:50-6:00 var data = { Name: "7:50-6:00", Data: [ { Start: 750, End: 2359 }, { Start: 0, End: 600 } ], Coordinate: { // 完整模式 Full: [ { Value: 800, Text: "8:00" }, { Value: 1000, Text: "10:00" }, { Value: 1200, Text: "12:00" }, { Value: 1400, Text: "14:00" }, { Value: 1600, Text: "16:00" }, { Value: 1800, Text: "18:00" }, { Value: 2000, Text: "20:00" }, { Value: 2200, Text: "22:00" }, { Value: 0, Text: "0:00" }, { Value: 200, Text: "2:00" }, { Value: 400, Text: "4:00" }, { Value: 600, Text: "6:00" } ], // 简洁模式 Simple: [ { Value: 800, Text: "8:00" }, { Value: 1200, Text: "12:00" }, { Value: 1600, Text: "16:00" }, { Value: 2000, Text: "20:00" }, { Value: 0, Text: "0:00" }, { Value: 400, Text: "4:00" }, { Value: 600, Text: "6:00" } ], // 最小模式 Min: [ { Value: 800, Text: "8:00" }, { Value: 2000, Text: "20:00" }, { Value: 600, Text: "6:00" } ] } }; return data; } else if (key === "IPE_G_2") { // ID=0 08:50-07:00 var data = { Name: "08:50-07:00", Data: [ { Start: 850, End: 2359 }, { Start: 0, End: 700 } ], Coordinate: { // 完整模式 Full: [ { Value: 900, Text: "9:00" }, { Value: 1100, Text: "11:00" }, { Value: 1300, Text: "13:00" }, { Value: 1500, Text: "15:00" }, { Value: 1700, Text: "17:00" }, { Value: 1900, Text: "19:00" }, { Value: 2100, Text: "21:00" }, { Value: 2300, Text: "23:00" }, { Value: 1, Text: "1:00" }, { Value: 300, Text: "3:00" }, { Value: 500, Text: "5:00" }, { Value: 700, Text: "7:00" } ], // 简洁模式 Simple: [ { Value: 900, Text: "9:00" }, { Value: 1300, Text: "13:00" }, { Value: 1700, Text: "17:00" }, { Value: 2100, Text: "21:00" }, { Value: 1, Text: "1:00" }, { Value: 500, Text: "5:00" }, { Value: 700, Text: "7:00" } ], // 最小模式 Min: [ { Value: 900, Text: "9:00" }, { Value: 2100, Text: "21:00" }, { Value: 700, Text: "7:00" } ] } }; return data; } }; /// ///////////////////////////////////////////////////////////////////////// // 美股走势图X轴坐标 // /// ///////////////////////////////////////////////////////////////////////// HQData.CreateUSAData = function (minuteStringData) { const TIME_SPLIT = [ { Start: 2130, End: 2359 }, { Start: 0, End: 400 } ]; return minuteStringData.CreateTimeData(TIME_SPLIT); }; HQData.GetUSAData = function (upperSymbol, width) { const SHZE_MINUTE_X_COORDINATE = { // 完整模式 Full: [ [0, 0, "rgb(200,200,200)", "21:30"], [30, 1, "RGB(200,200,200)", "22:00"], [60, 0, "RGB(200,200,200)", "22:30"], [90, 1, "RGB(200,200,200)", "23:00"], [120, 0, "RGB(200,200,200)", "23:30"], [150, 1, "RGB(200,200,200)", "00:00"], [180, 0, "RGB(200,200,200)", "00:30"], [210, 1, "RGB(200,200,200)", "01:00"], [240, 0, "RGB(200,200,200)", "01:30"], [270, 1, "RGB(200,200,200)", "02:00"], [300, 0, "RGB(200,200,200)", "02:30"], [330, 1, "RGB(200,200,200)", "03:00"], [360, 0, "RGB(200,200,200)", "03:30"], [390, 1, "RGB(200,200,200)", "04:00"] ], // 简洁模式 Simple: [ [0, 0, "rgb(200,200,200)", "21:30"], [90, 1, "RGB(200,200,200)", "23:00"], [150, 1, "RGB(200,200,200)", "00:00"], [270, 1, "RGB(200,200,200)", "02:00"], [390, 1, "RGB(200,200,200)", "04:00"] ], // 最小模式 Min: [ [0, 0, "rgb(200,200,200)", "21:30"], [210, 1, "RGB(200,200,200)", "01:00"], [390, 1, "RGB(200,200,200)", "04:00"] ], Count: 391, //! ! 一共的分钟数据个数,不要填错了 MiddleCount: 195, // Count/2 就可以。 GetData: function (width) { if (width < 200) return this.Min; else if (width < 400) return this.Simple; return this.Full; } }; return SHZE_MINUTE_X_COORDINATE; }; /// ///////////////////////////////////////////////////////////////////////// // A股走势图X轴坐标 // /// //////////////////////////////////////////////////////////////////////// HQData.CreateSHSZData = function (minuteStringData) { const TIME_SPLIT = [ { Start: 930, End: 1130 }, { Start: 1301, End: 1500 } ]; return minuteStringData.CreateTimeData(TIME_SPLIT); }; HQData.GetSHSZData = function (upperSymbol, width) { const SHZE_MINUTE_X_COORDINATE = { // 完整模式 Full: [ [0, 0, "rgb(200,200,200)", "09:30"], [31, 0, "RGB(200,200,200)", "10:00"], [61, 0, "RGB(200,200,200)", "10:30"], [91, 0, "RGB(200,200,200)", "11:00"], [120, 1, "RGB(200,200,200)", "11:30"], [150, 0, "RGB(200,200,200)", "13:30"], [180, 0, "RGB(200,200,200)", "14:00"], [210, 0, "RGB(200,200,200)", "14:30"], [240, 1, "RGB(200,200,200)", "15:00"] // 15:00 ], // 简洁模式 Simple: [ [0, 0, "rgb(200,200,200)", "09:30"], [61, 0, "RGB(200,200,200)", "10:30"], [120, 1, "RGB(200,200,200)", "11:30"], [180, 0, "RGB(200,200,200)", "14:00"], [240, 1, "RGB(200,200,200)", "15:00"] ], // 最小模式 Min: [ [0, 0, "rgb(200,200,200)", "09:30"], [120, 1, "RGB(200,200,200)", "11:30"], [240, 1, "RGB(200,200,200)", "15:00"] ], Count: 241, //! ! 一共的分钟数据个数,不要填错了 MiddleCount: 121, // Count/2 就可以。 GetData: function (width) { if (width < 200) return this.Min; else if (width < 400) return this.Simple; return this.Full; } }; return SHZE_MINUTE_X_COORDINATE; }; /// //////////////////////////////////////////////////////////////////////////////////// // 港股走势图X轴坐标 // /// //////////////////////////////////////////////////////////////////////////////////// HQData.CreateHKData = function (minuteStringData) { const TIME_SPLIT = [ { Start: 930, End: 1200 }, { Start: 1301, End: 1600 } ]; return minuteStringData.CreateTimeData(TIME_SPLIT); }; HQData.GetHKData = function (upperSymbol, width) { const HK_MINUTE_X_COORDINATE = { // 完整模式 Full: [ [0, 1, "RGB(200,200,200)", "09:30"], [30, 0, "RGB(200,200,200)", "10:00"], [60, 1, "RGB(200,200,200)", "10:30"], [90, 0, "RGB(200,200,200)", "11:00"], [120, 1, "RGB(200,200,200)", "11:30"], [151, 0, "RGB(200,200,200)", "13:00"], [181, 1, "RGB(200,200,200)", "13:30"], [211, 0, "RGB(200,200,200)", "14:00"], [241, 1, "RGB(200,200,200)", "14:30"], [271, 0, "RGB(200,200,200)", "15:00"], [301, 1, "RGB(200,200,200)", "15:30"], [331, 1, "RGB(200,200,200)", "16:00"] ], // 简洁模式 Simple: [ [0, 1, "RGB(200,200,200)", "09:30"], [60, 1, "RGB(200,200,200)", "10:30"], [120, 1, "RGB(200,200,200)", "11:30"], [211, 0, "RGB(200,200,200)", "14:00"], [271, 0, "RGB(200,200,200)", "15:00"], [331, 1, "RGB(200,200,200)", "16:00"] ], // 最小模式 Min: [ [0, 1, "RGB(200,200,200)", "09:30"], [151, 0, "RGB(200,200,200)", "13:00"], [331, 1, "RGB(200,200,200)", "16:00"] ], Count: 331, MiddleCount: 150, GetData: function (width) { if (width < 200) return this.Min; else if (width < 450) return this.Simple; return this.Full; } }; return HK_MINUTE_X_COORDINATE; }; /// ///////////////////////////////////////////////////////////////////////////////////// // 外汇走势图X轴坐标 // /// ///////////////////////////////////////////////////////////////////////////////////// HQData.CreateForeignExchangeData = function (minuteStringData) { // 外汇 5:00 - 4:59 const TIME_SPLIT = [ { Start: 500, End: 2359 }, { Start: 0, End: 459 } ]; return minuteStringData.CreateTimeData(TIME_SPLIT); }; HQData.GetForeignExchangeData = function (upperSymbol, width) { const FOREX_MINUTE_X_COORDINATE = { // 完整模式 Full: [ [0, 1, "RGB(200,200,200)", "05:00"], [120, 1, "RGB(200,200,200)", "07:00"], [240, 1, "RGB(200,200,200)", "09:00"], [360, 1, "RGB(200,200,200)", "11:00"], [480, 0, "RGB(200,200,200)", "13:00"], [600, 1, "RGB(200,200,200)", "15:00"], [720, 1, "RGB(200,200,200)", "17:00"], [840, 1, "RGB(200,200,200)", "19:00"], [960, 1, "RGB(200,200,200)", "21:00"], [1080, 1, "RGB(200,200,200)", "23:00"], [1200, 1, "RGB(200,200,200)", "01:00"], [1320, 1, "RGB(200,200,200)", "03:00"], [1439, 1, "RGB(200,200,200)", "04:59"] ], // 简洁模式 Simple: [ [0, 1, "RGB(200,200,200)", "06:00"], [240, 1, "RGB(200,200,200)", "10:00"], [480, 0, "RGB(200,200,200)", "14:00"], [720, 1, "RGB(200,200,200)", "18:00"], [960, 1, "RGB(200,200,200)", "22:00"], [1200, 1, "RGB(200,200,200)", "02:00"] ], // 最小模式 Min: [ [0, 1, "RGB(200,200,200)", "06:00"], [480, 0, "RGB(200,200,200)", "14:00"], [960, 1, "RGB(200,200,200)", "22:00"] ], Count: 1440, MiddleCount: 600, GetData: function (width) { if (width < 200) return this.Min; else if (width < 450) return this.Simple; return this.Full; } }; return FOREX_MINUTE_X_COORDINATE; }; /// ///////////////////////////////////////////////////////////////////// // 美元指数 // /// //////////////////////////////////////////////////////////////////// HQData.GetETTimeData = function (upperSymbol, minuteStringData) { if (upperSymbol === "UDI_100.ET") { // 美元指数 6:00 - 5:59 const TIME_SPLIT = [ { Start: 600, End: 2359 }, { Start: 0, End: 559 } ]; return minuteStringData.CreateTimeData(TIME_SPLIT); } }; HQData.GetETData = function (upperSymbol) { if (upperSymbol === "UDI_100.ET") { const data = { // 完整模式 Full: [ [0, 1, "RGB(200,200,200)", "06:00"], [120, 1, "RGB(200,200,200)", "08:00"], [240, 1, "RGB(200,200,200)", "10:00"], [360, 1, "RGB(200,200,200)", "12:00"], [480, 0, "RGB(200,200,200)", "14:00"], [600, 1, "RGB(200,200,200)", "16:00"], [720, 1, "RGB(200,200,200)", "18:00"], [840, 1, "RGB(200,200,200)", "20:00"], [960, 1, "RGB(200,200,200)", "22:00"], [1080, 1, "RGB(200,200,200)", "0:00"], [1200, 1, "RGB(200,200,200)", "02:00"], [1320, 1, "RGB(200,200,200)", "04:00"], [1439, 1, "RGB(200,200,200)", "05:59"] ], // 简洁模式 Simple: [ [0, 1, "RGB(200,200,200)", "06:00"], [240, 1, "RGB(200,200,200)", "10:00"], [480, 0, "RGB(200,200,200)", "14:00"], [720, 1, "RGB(200,200,200)", "18:00"], [960, 1, "RGB(200,200,200)", "22:00"], [1200, 1, "RGB(200,200,200)", "02:00"], [1439, 1, "RGB(200,200,200)", "05:59"] ], // 最小模式 Min: [ [0, 1, "RGB(200,200,200)", "06:00"], [720, 1, "RGB(200,200,200)", "18:00"], [1439, 1, "RGB(200,200,200)", "05:59"] ], Count: 1440, MiddleCount: 600, GetData: function (width) { if (width < 200) return this.Min; else if (width < 450) return this.Simple; return this.Full; } }; return data; } }; HQData.GetETDecimal = function (symbol) { var upperSymbol = symbol.toUpperCase(); if (upperSymbol === "UDI_100.ET") return 2; return 2; }; /// //////////////////////////////////////////////////////////////////////////////// // K线数据对接 // /// ////////////////////////////////////////////////////////////////////////////// HQData.GetKLineApiUrl = function (symbol, period, right, option) { console.log(111111, symbol, period, right, option); // https://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61&beg=0&end=20500101&ut=fa5fd1943c7b386f172d6893dbfba10b&rtntype=6&secid=0.300059&klt=101&fqt=0 var internalSymbol = HQData.GetInternalSymbol(symbol); // console.log(internalSymbol,'caonima'); // if (!internalSymbol.Market) { // internalSymbol.Market = '106' // internalSymbol.Symbol = 'BRK_A' // } // var internalPeriod = HQData.GetInternalPeriod(period) // var internalRight = HQData.GetInternalRight(right) const kLines = JSON.parse(window.localStorage.getItem("kLine")); // if (kLines.type === 'IN' ||kLines.type === 'US') { const interval = ["D", "W", "M"][period]; if (kLines.type === 'HJ') { url = window.globalVar + `api/stock/getKData.do?pid=8888&interval=${interval}&stockType=${kLines.name}`; } else { var url = window.globalVar + `api/stock/getKData.do?pid=${kLines.pid}&interval=${interval}&stockType=${kLines.type}`; } // var url = // window.globalVar + // `api/stock/getKData.do?pid=${kLines.pid}&interval=${interval}&stockType=${kLines.type}`; // } const interval2 = [1440, 10080, 10080][period]; // const interval2 = [1440, 10080, 43200][period] // if (kLines.type === 'qh') { // var url = window.globalVar+`api/stock/getKData.do?pid=${kLines.pid}&interval=${interval}&stockType=${kLines.type}` // url = window.globalVar+`api/stock/getKData.do?symbol=${encodeURIComponent(kLines.pid)}&cmd=history&period=${interval2}&stockType=${kLines.type}` // } if (option && option.Update === true) { var beginDate = option.End; console.log("这是", beginDate); // var url = `http://api.mifeng.ws/api/futures/kline?time=1&period=day&symbol=FCPO&type=1` // var url = `http://api-in.js-stock.top/kline?interval=D&key=nvmihAoT51LnAWCpDeuw&pid=${internalSymbol.Symbol}` } else { // var url = `http://api.mifeng.ws/api/futures/kline?time=1&period=day&symbol=FCPO&type=1` // var url = `http://api-in.js-stock.top/kline?interval=D&key=nvmihAoT51LnAWCpDeuw&pid=${internalSymbol.Symbol}` } return { Url: url, Symbol: symbol, InternalSymbol: internalSymbol, Period: period, Right: right }; }; HQData.GetMinuteKLineApiUrl = function (symbol, period, right, option) { var internalSymbol = HQData.GetInternalSymbol(symbol); var internalPeriod = HQData.GetInternalPeriod(period); var internalRight = HQData.GetInternalRight(right); console.log(internalPeriod); var url = ""; if (option && option.Update === true) { var beginDate = option.End; } else { const kLines = JSON.parse(window.localStorage.getItem("kLine")); if (kLines.type === 'HJ') { url = window.globalVar + `api/stock/getKData.do?pid=8888&interval=${internalPeriod}&stockType=${kLines.name}`; } else { url = window.globalVar + `api/stock/getKData.do?pid=${kLines.pid}&interval=${internalPeriod}&stockType=${kLines.type}`; } // url = // window.globalVar + // `api/stock/getKData.do?pid=${kLines.pid}&interval=${internalPeriod}&stockType=${kLines.type}`; } return { Url: url, Symbol: symbol, InternalSymbol: internalSymbol, Period: period, Right: right }; }; HQData.GetInternalPeriod = function (periodID) { var MAP_PERIOD = new Map([ [0, 101], // day [1, 102], // week [2, 103], // month [4, 1], // 1min [5, 5], // 5min [6, 15], // 15min [7, 30], // 30min [8, 60] // 60min ]); return MAP_PERIOD.get(periodID); }; HQData.GetInternalRight = function (right) { if (right === 0) return 0; else if (right === 1) return 1; else return 2; }; // 是否支持复权 HQData.IsEnableRight = function (period, symbol) { var symbolUpper = null; symbolUpper = symbol.toUpperCase(); // var symbolUpper = symbol.toUpperCase() if (HQChart.Chart.MARKET_SUFFIX_NAME.IsSHSZStockA(symbolUpper)) return true; if (HQChart.Chart.MARKET_SUFFIX_NAME.IsBJStock(symbol)) return true; var aryData = symbol.split("."); symbolUpper = symbol.toUpperCase(); // var symbolUpper = symbol.toUpperCase() var arySymbol = aryData[0].split("_"); var market = parseInt(arySymbol[1]); if (HQChart.Chart.MARKET_SUFFIX_NAME.IsHK(symbolUpper)) { if (market === 100) return false; // 指数不支持复权 return true; } if (HQChart.Chart.MARKET_SUFFIX_NAME.IsUSA(symbolUpper)) { if (market === 100) return false; // 指数不支持复权 return true; } return false; }; HQData.RequestFlowCapitalData = function (data, callback) { data.PreventDefault = true; var hqChartData = { code: 0, stock: [] }; // 如果没有数据就填空 if (data.Self.IsDestroy === false) { callback(hqChartData); } }; HQData.RequestHistoryData = function (data, callback) { data.PreventDefault = true; var symbol = data.Request.Data.symbol; // 请求的股票代码 var period = data.Self.Period; // 周期 var right = data.Self.Right; // 复权 console.log(`[HQData::RequestHistoryData] Symbol=${symbol}`); var obj = HQData.GetKLineApiUrl(symbol, period, right, null); $.ajax({ url: obj.Url, type: "GET", success: function (recvData) { HQData.RecvHistoryData(recvData, callback, { Data: data, Obj: obj }); } }); }; HQData.RecvHistoryData = function (recvData, callback, option) { // var data = recvData.data var hqChartData = { code: 0, data: [] }; hqChartData.symbol = option.Obj.Symbol; // hqChartData.name = data.name hqChartData.name = "123"; // console.log('data.name', data.name) const kLines = JSON.parse(window.localStorage.getItem("kLine")); // var yClose = data.preKPrice var yClose = "500"; if (typeof recvData === 'string') { recvData = JSON.parse(recvData); } if (kLines.type === "SZHB") { recvData = recvData.data; recvData.reverse(); for (var i = 0; i < recvData.length; ++i) { var strItem = recvData[i]; // var item = strItem.split(',') // var today = new Date(strItem.t) // var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate() var date = moment.unix(strItem.id).format("YYYYMMDD"); // var open = parseFloat(strItem.open); var close = parseFloat(strItem.close); var high = parseFloat(strItem.high); var low = parseFloat(strItem.low); var vol = parseFloat(strItem.vol) * 100; var amount = parseFloat(Math.random() * 100 + ""); // var newItem = [date, yClose, open, high, low, close, vol, amount]; hqChartData.data.push(newItem); // yClose = close; } } else { for (var i = 0; i < recvData.length; ++i) { var strItem = recvData[i]; strItem.t = strItem.t || strItem.id; strItem.c = strItem.c || strItem.close; strItem.h = strItem.h || strItem.high; strItem.l = strItem.l || strItem.low; strItem.v = strItem.v || strItem.vol; // var item = strItem.split(',') // var today = new Date(strItem.t) // var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate() var date = moment.unix(strItem.t).format("YYYYMMDD"); // var open = parseFloat(strItem.o); var close = parseFloat(strItem.c); var high = parseFloat(strItem.h); var low = parseFloat(strItem.l); var vol = parseFloat(strItem.v) * 100; var amount = parseFloat(Math.random() * 100 + ""); // var newItem = [date, yClose, open, high, low, close, vol, amount]; hqChartData.data.push(newItem); // yClose = close; } } if (option.Data.Self.IsDestroy === false) { HQData.Log("[HQData.RecvHistoryData] hqchartData ", hqChartData); callback(hqChartData); } }; HQData.RequestRealtimeData = function (data, callback) { data.PreventDefault = true; var symbol = data.Request.Data.symbol[0]; // 请求的股票代码 var period = data.Self.Period; // 周期 var right = data.Self.Right; // 复权 var dateRange = data.Self.ChartPaint[0].Data.GetDateRange(); var option = { Update: true }; if (dateRange && dateRange.End && dateRange.End.Date > 0) option.End = dateRange.End.Date; console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}`); var obj = HQData.GetKLineApiUrl(symbol, period, right, option); $.ajax({ url: obj.Url, type: "GET", success: function (recvData) { HQData.RecvRealtimeData(recvData, callback, { Data: data, Obj: obj }); } }); }; HQData.RecvRealtimeData = function (recvData, callback, option) { var data = recvData.data; // var stock = { symbol: option.Obj.Symbol, name: 'K线图' } // var stock = { symbol: option.Obj.Symbol, name: data.name || "" }; // var yClose = data[0].c // for (var i = 0; i < data.length; ++i) { // var item = data[i] // // var item = strItem.split(',') // // var today = new Date(item.t) // // var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate() // var date = moment.unix(item.t).format('YYYYMMDD') // var open = parseFloat(item.o) // var close = parseFloat(item.c) // var high = parseFloat(item.h) // var low = parseFloat(item.l) // var vol = parseFloat(item.vo) // var amount = parseFloat(item.v) // stock.yclose = yClose // stock.open = open // stock.high = high // stock.low = low // stock.price = close // stock.vol = vol // stock.amount = amount // stock.date = date // yClose = close // } const kLines = JSON.parse(window.localStorage.getItem("kLine")); // var yClose = data.preKPrice; var yClose = '123'; console.log("recvDatadata====", data); if (kLines.type === "IN" || kLines.type === "US") { for (var i = 0; i < data.klines.length; ++i) { var strItem = data.klines[i]; var item = strItem.split(","); // var today = new Date(Date.parse(item[0])) // var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate() var date = moment.unix(Date.parse(item[0])).format("YYYYMMDD"); var open = parseFloat(item[1]); var close = parseFloat(item[2]); var high = parseFloat(item[3]); var low = parseFloat(item[4]); var vol = parseFloat(item[5]) * 100; var amount = parseFloat(item[6]); stock.yclose = yClose; stock.open = open; stock.high = high; stock.low = low; stock.price = close; stock.vol = vol; stock.amount = amount; stock.date = date; yClose = close; } } // if (kLines.type === 'qh') { // for (var x = 0; x < recvData.list.length; ++x) { // var strItem2 = recvData.list[x] // // var item = strItem.split(',') // // var today = new Date(strItem.t) // // var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate() // var date2 = moment.unix(strItem2.ctm).format('YYYYMMDD') // // // var open2 = parseFloat(strItem2.open) // var close2 = parseFloat(strItem2.close) // var high2 = parseFloat(strItem2.high) // var low2 = parseFloat(strItem2.low) // var vol2 = 100 // // var vol2 = parseFloat(strItem2.v) * 100 // var amount2 = parseFloat((Math.random() * 100) + '') // // // var newItem2 = [date2, yClose, open2, high2, low2, close2, vol2, amount2] // hqChartData.data.push(newItem2) // // // yClose = close // } // } var hqchartData = { code: 0, stock: [stock] }; // if (option.Data.Self.IsDestroy === false) { HQData.Log("[HQData.RecvRealtimeData] hqchartData ", hqchartData); callback(hqchartData); // } }; HQData.RequestHistoryMinuteData = function (data, callback) { data.PreventDefault = true; var symbol = data.Request.Data.symbol; // 请求的股票代码 var period = data.Self.Period; // 周期 var right = data.Self.Right; // 复权 console.log(`[HQData::RequestHistoryMinuteData] Symbol=${symbol}`, data.Request); var obj = HQData.GetMinuteKLineApiUrl(symbol, period, right, null); $.ajax({ url: obj.Url, type: "GET", success: function (recvData) { HQData.RecvHistoryMinuteData(recvData, callback, { Data: data, Obj: obj }); } }); }; HQData.RecvHistoryMinuteData = function (recvData, callback, option) { var hqChartData = { code: 0, data: [] }; hqChartData.symbol = option.Obj.Symbol; // hqChartData.name = data.name const kLines = JSON.parse(window.localStorage.getItem("kLine")); hqChartData.name = "123"; var yClose = ""; console.log("recvData===data.name22", recvData, kLines); if (typeof recvData === 'string') { recvData = JSON.parse(recvData); } if (kLines.type === "SZHB") { recvData = recvData.data; recvData.reverse(); for (var i = 0; i < recvData.length; ++i) { var strItem = recvData[i]; // var item = strItem.split(',') // var today = new Date(strItem.t) // var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate() var date = moment.unix(strItem.id).format("YYYYMMDD"); var time = moment.unix(strItem.id).format("HHmm"); var open = parseFloat(strItem.open); var close = parseFloat(strItem.close); var high = parseFloat(strItem.high); var low = parseFloat(strItem.low); var vol = parseFloat(strItem.vol) * 100; var amount = parseFloat(Math.random() * 100 + ""); // var newItem = [date, yClose, open, high, low, close, vol, amount, time]; hqChartData.data.push(newItem); // yClose = close; } } else { for (var i = 0; i < recvData.length; ++i) { var strItem = recvData[i]; // var item = strItem.split(',') // var today = new Date(strItem.t) // var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate() var date = moment.unix(strItem.t).format("YYYYMMDD"); var time = moment.unix(strItem.t).format("HHmm"); var open = parseFloat(strItem.o); var close = parseFloat(strItem.c); var high = parseFloat(strItem.h); var low = parseFloat(strItem.l); var vol = parseFloat(strItem.v) * 100; var amount = parseFloat(Math.random() * 100 + ""); // var newItem = [date, yClose, open, high, low, close, vol, amount, time]; hqChartData.data.push(newItem); // yClose = close; } } if (option.Data.Self.IsDestroy === false) { HQData.Log("[HQData.RecvHistoryData] hqchartData ", hqChartData); callback(hqChartData); } }; HQData.RequestMinuteRealtimeData = function (data, callback) { data.PreventDefault = true; var symbol = data.Request.Data.symbol[0]; // 请求的股票代码 var period = data.Self.Period; // 周期 var right = data.Self.Right; // 复权 var dateRange = data.Self.ChartPaint[0].Data.GetDateRange(); var option = { Update: true }; if (dateRange && dateRange.End && dateRange.End.Date > 0) option.End = dateRange.End.Date; console.log(`[HQData::RequestMinuteRealtimeData] Symbol=${symbol}`); var obj = HQData.GetMinuteKLineApiUrl(symbol, period, right, option); $.ajax({ url: obj.Url, type: "GET", success: function (recvData) { HQData.RecvMinuteRealtimeData(recvData, callback, { Data: data, Obj: obj }); } }); }; HQData.RecvMinuteRealtimeData = function (recvData, callback, option) { var data = recvData.data; var hqChartData = { code: 0, data: [], ver: 2.0, symbol: option.Obj.Symbol, name: data.name }; // 更新数据使用2.0版本格式 var yClose = data.preKPrice; console.log("212121132", recvData); for (var i = 0; i < data.klines.length; ++i) { var strItem = data.klines[i]; var item = strItem.split(","); var time = moment.unix(item[0]).format("HHmm"); var open = parseFloat(item[1]); var close = parseFloat(item[2]); var high = parseFloat(item[3]); var low = parseFloat(item[4]); var vol = parseFloat(item[5]) * 100; var amount = parseFloat(item[6]); var newItem = [date, yClose, open, high, low, close, vol, amount, time]; hqChartData.data.push(newItem); yClose = close; } if (option.Data.Self.IsDestroy === false) { HQData.Log("[HQData.RecvMinuteRealtimeData] hqchartData ", hqChartData); callback(hqChartData); } }; export default { HQData: HQData };