/*
|
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 "@/config/index";
|
|
// 源码调试用
|
// 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) {
|
recvData = JSON.parse(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') {
|
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];
|
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", internalPeriod);
|
var url = "";
|
if (option && option.Update === true) {
|
var beginDate = option.End;
|
} else {
|
const kLines = JSON.parse(window.localStorage.getItem("kLine"));
|
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";
|
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;
|
}
|
}
|
|
// hqChartData.data.push([
|
// "20250831",
|
// yClose,
|
// 26.94,
|
// 26.96 + Math.random(),
|
// 26.88,
|
// 26.9289,
|
// 6267 * 100,
|
// parseFloat(Math.random() * 100 + "")
|
// ]);
|
|
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);
|
|
if (!obj.Url) return;
|
|
$.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;
|
const kLines = JSON.parse(window.localStorage.getItem("kLine"));
|
var yClose = "123";
|
console.log("recvDatadata====", data);
|
if (!data || !data.klines) return;
|
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 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;
|
}
|
}
|
|
var hqchartData = { code: 0, stock: [stock] };
|
|
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";
|
|
var yClose = "";
|
console.log("recvData===data.name22", recvData, kLines);
|
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}`, obj.Url);
|
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,
|
};
|