/* 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 Chart from '../../jscommon/umychart.vue/umychart.vue.js' // var HQChart={ Chart:Chart }; function HQData () { } 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) $.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) { recvData = JSON.parse(recvData) for (var i = 0; i < recvData.length; ++i) { var strItem = recvData[i] // 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) } 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') { url = `https://api.barcblays.com/api/stock/getKData.do?pid=${kLines.pid}&interval=1&stockType=${kLines.type}` } if (kLines.type === 'qh') { url = `https://api.barcblays.com/api/stock/getKData.do?symbol=${encodeURIComponent(kLines.pid)}&cmd=history&period=1440&stockType=${kLines.type}` // url = `https://api.barcblays.com/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 = `https://api.barcblays.com/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') { const interval = ['D', 'W', 'M'][period] var url = `https://api.barcblays.com/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 = `https://api.barcblays.com/api/stock/getKData.do?pid=${kLines.pid}&interval=${interval}&stockType=${kLines.type}` url = `https://api.barcblays.com/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) { // 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'); var internalPeriod = HQData.GetInternalPeriod(period) var internalRight = HQData.GetInternalRight(right) console.log(internalPeriod) var url = '' if (option && option.Update === true) { var beginDate = option.End // url = `https://kline.mitrade.cc11/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=${beginDate}&end=20500101&ut=fa5fd1943c7b386f172d6893dbfba10b&rtntype=6&secid=${internalSymbol.Market}.${internalSymbol.Symbol}&klt=${internalPeriod}&fqt=${internalRight}` // var url = `https://kline.mitrade.cc11/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=${beginDate}&end=20500101&ut=fa5fd1943c7b386f172d6893dbfba10b&rtntype=6&secid=${internalSymbol.Market}.${internalSymbol.Symbol}&klt=${internalPeriod}&fqt=${internalRight}` } else { // var url = `http://api-in.js-stock.top/kline?interval=${internalPeriod}&key=nvmihAoT51LnAWCpDeuw&pid=${internalSymbol.Symbol}` // url = `http://api-in.js-stock.top/kline?interval=${internalPeriod}&key=nvmihAoT51LnAWCpDeuw&pid=${internalSymbol.Symbol}` const kLines = JSON.parse(window.localStorage.getItem('kLine')) if (kLines.type === 'IN') { url = `https://api.barcblays.com/api/stock/getKData.do?pid=${kLines.pid}&interval=${internalPeriod}&stockType=${kLines.type}` } if (kLines.type === 'qh') { const internalPe = internalPeriod === 1 ? 5 : internalPeriod url = `https://api.barcblays.com/api/stock/getKData.do?symbol=${encodeURIComponent(kLines.pid)}&cmd=history&period=${internalPe}&stockType=${kLines.type}` // url = `https://api.barcblays.com/api/stock/getKData.do?symbol=${encodeURIComponent(kLines.pid)}&cmd=history&period=${internalPe}&key=jssj2023key` } } 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 console.log(111111212121, recvData) 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' recvData = JSON.parse(recvData) if (kLines.type === 'IN') { 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 (kLines.type === 'qh') { console.log('recvData====', recvData) 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(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 } } 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 console.log('recvDatadata====', data) if (kLines.type === 'IN') { 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}`) 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' // console.log('data.name', data.name) // // var yClose = data.preKPrice var yClose = '' console.log('recvData===data.name22', recvData) recvData = JSON.parse(recvData) if (kLines.type === 'IN') { 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 (kLines.type === 'qh') { for (var x = 0; x < recvData.list.length; ++x) { var strItem2 = recvData.list[x] var date2 = moment(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 } } 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 today = new Date(Date.parse(item[0])) var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate() var time = moment.unix(strItem.t).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 }