dcc
2024-05-17 b8f6f514b675fa6a006dfafbc99303b3c5c8ba85
src/eastmoney/HQData.js
@@ -1,459 +1,700 @@
/*
   Copyright (c) 2018 jones
    http://www.apache.org/licenses/LICENSE-2.0
   开源项目 https://github.com/jones2000/HQChart
   jones_2000@163.com
   行情数据对接,使用东方财富网页数据做为案例的测试数据源
   教程中所有的实例中使用的数据都来自互联网,或测试数据。仅用于学习HQChart图形使用. 教程禁止用于商业产品
*/
import $, { hasData } from 'jquery'
import HQChart from 'hqchart'
import $ from "jquery";
// import $, { hasData } from 'jquery'
import HQChart from "hqchart";
import moment from "moment";
import apiRrl from "@/axios/api.url";
//源码调试用
//import Chart from '../../jscommon/umychart.vue/umychart.vue.js'
//var HQChart={ Chart:Chart };
// 源码调试用
// import Chart from '../../jscommon/umychart.vue/umychart.vue.js'
// var HQChart={ Chart:Chart };
function HQData()  { }
function HQData() {}
window.globalVar = apiRrl.baseURL;
HQData.Explain = "东财财富网接口";
HQData.Explain="东财财富网接口";
HQChart.Chart.JSConsole.Chart.Log = () => {};
HQChart.Chart.JSConsole.Complier.Log = () => {};
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);
  };
HQData.Log=HQChart.Chart.JSConsole.Chart.Log;
  // 美股分时图坐标
  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轴刻度信息
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); }
  // 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().CreateUSAData=()=>{ return HQData.CreateUSAData(HQChart.Chart.JSChart.GetMinuteTimeStringData()); }  //替换交易时间段
    HQChart.Chart.JSChart.GetMinuteCoordinateData().GetUSAData=(upperSymbol,width)=> { return HQData.GetUSAData(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轴刻度信息
    //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().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().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().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: "花生"
  });
    //港股分时图坐标
    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轴刻度信息
  // 芝加哥期货交易所
  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: "小型道指"
  });
    //外汇分时图坐标
    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 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: "低硫柴油"
  });
    //期货
    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:'花生' });
  // 自定义类型
  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=盘后
};
    //芝加哥期货交易所
    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:'小型道指' });
HQData.NetworkFilter = function(data, callback) {
  HQData.Log(`[HQData::NetworkFilter] ${HQData.Explain}`, data);
    //美国洲际交易所
    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:'低硫柴油' });
  switch (data.Name) {
    case "MinuteChartContainer::RequestMinuteData": // 分时图数据对接
      HQData.RequestMinuteData(data, callback);
      break;
    case "MinuteChartContainer::RequestHistoryMinuteData":
      HQData.RequestMinuteDaysData(data, callback);
      break;
    //自定义类型
    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=盘后
    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;
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;
  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.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);
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;
    $.ajax(
    {
        url: obj.Url,
        type: "GET",
        success:function(recvData)
        {
            HQData.RecvMinuteData(recvData, callback, { Data:data, Obj:obj });
    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];
        }
    });
}
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;
    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)
    {
        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();
        var stockItem=
        {
            date:date,
            time:time,
            open:parseFloat(item[1]),
            high:parseFloat(item[2]),
            low:parseFloat(item[3]),
            price:parseFloat(item[4]),
            vol:parseFloat(item[5]),
            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);
      }
      itemDay.minute = newMinuteData;
    } else {
      var item = itemDay.minute[itemDay.minute.length - 1];
      preClose = item[4];
      preAvprice = item[7];
      preDate = item[8];
    }
  }
    var hqchartData={stock:[stock], code:0 };
  aryDayData = aryDayData.reverse();
    if (option.Data.Self.IsDestroy==false)
   {
        HQData.Log("[HQData.RecvMinuteDaysData] hqchartData ", hqchartData)
      callback(hqchartData);
    }
}
  var hqchartData = {
    symbol: option.Obj.Symbol,
    name: data.name,
    data: aryDayData,
    code: 0
  };
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);
  if (option.Data.Self.IsDestroy === false) {
    HQData.Log("[HQData.RecvMinuteDaysData] hqchartData ", hqchartData);
    callback(hqchartData);
  }
};
    $.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.CorrectMinuteData = function(minuteData, xDatetime) {
  if (minuteData.length === xDatetime.length) return null;
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 mapData = new Map();
  for (var i = 0; i < xDatetime.length; ++i) {
    var item = xDatetime[i];
    mapData.set(item, { Index: i, Time: item, Data: null });
  }
    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();
  for (var i = 0; i < minuteData.length; ++i) {
    var item = minuteData[i];
    var time = item[0];
        if (j%minuteCount==0)
        {
            if (itemDay && itemDay.minute.length>0) aryDayData.push(itemDay);
            itemDay={ minute:[], date:date, yclose: yClose };
        }
    var findItem = mapData.get(time);
    findItem.Data = item;
  }
        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]),
        }
  var newMinuteData = [];
  for (var item of mapData) {
    var value = item[1];
        if (isStockA) stockItem.vol*=100;
    if (value.Data) newMinuteData[value.Index] = value.Data;
    else newMinuteData[value.Index] = [value.Time];
  }
        itemDay.minute.push([stockItem.time, stockItem.open, stockItem.high, stockItem.low, stockItem.price, stockItem.vol, stockItem.amount, stockItem.avprice, stockItem.date]);
    }
  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 (itemDay && itemDay.minute.length>0) aryDayData.push(itemDay);
  if (internalSymbol.indexOf("-") > 0) {
    var aryValue = internalSymbol.split("-");
    internalSymbol = aryValue[1];
  }
    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;
}
HQData.GetInternalSymbol=function(symbol)   //HQChart内置代码转成东方财富代码
{
    var aryData=symbol.split(".");
    var symbolUpper=symbol.toUpperCase();
    var arySymbol=aryData[0].split('_');
    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 };
    /*
  return { Market: market, Symbol: internalSymbol };
  /*
    if (HQChart.Chart.MARKET_SUFFIX_NAME.IsUSA(symbolUpper))    //美股
    {
@@ -461,15 +702,15 @@
        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))
@@ -502,8 +743,8 @@
        var market=113;
        //上期能源
        if (symbolUpper.indexOf("SC")==0 || symbolUpper.indexOf("NR")==0 ||
            symbolUpper.indexOf("LU")==0 ||symbolUpper.indexOf("BC")==0)
        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] };
@@ -572,849 +813,963 @@
        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}`
HQData.GetMinuteApiUrl=function(symbol, dayCount)
{
    var internalSymbol=HQData.GetInternalSymbol(symbol);
    //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://kline.workingman.icu/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=${dayCount}&iscr=0&iscca=0`
  return {
    Url: url,
    Symbol: symbol,
    InternalSymbol: internalSymbol,
    DayCount: dayCount
  };
};
    return { Url:url, Symbol:symbol, InternalSymbol:internalSymbol, DayCount:dayCount };
}
HQData.IsSHSZ = function(symbol) {
  // 是否是A股
  return HQChart.Chart.MARKET_SUFFIX_NAME.IsSHSZ(symbol);
};
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.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;
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;
}
  return true;
};
HQData.IsShowVolChart=function(upperSymbol) //是否显示第2个成交量图
{
    if (HQChart.Chart.MARKET_SUFFIX_NAME.IsForeignExchange(upperSymbol)) return false;
    if (upperSymbol=="UDI_100.ET") return false;
    return true;
}
///////////////////////////////////////////////////////////////////////////////////////////
//
/// ////////////////////////////////////////////////////////////////////////////////////////
//
//  美国洲际交易所 重柴油
//
HQData.GetCustomTradeTimeData=function(key)
{
    if (key=="IPE_G")   //美国洲际交易所 重柴油 数据从7:50开始,是盘前数据吗????
    {
        //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' }
                ]
            }
        };
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")
    {
        var data=//ID=0 08:50-07:00
        {
            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;
  } 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;
    }
}
    return data;
  }
};
////////////////////////////////////////////////////////////////////////////
/// /////////////////////////////////////////////////////////////////////////
// 美股走势图X轴坐标
//
////////////////////////////////////////////////////////////////////////////
HQData.CreateUSAData=function(minuteStringData)
{
    const TIME_SPLIT =
    [
        { Start: 2130, End: 2359 },
        { Start: 0, End: 400 }
    ];
/// /////////////////////////////////////////////////////////////////////////
HQData.CreateUSAData = function(minuteStringData) {
  const TIME_SPLIT = [
    { Start: 2130, End: 2359 },
    { Start: 0, End: 400 }
  ];
    return minuteStringData.CreateTimeData(TIME_SPLIT);
}
  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"],
        ],
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 就可以。
    Count: 391, //! ! 一共的分钟数据个数,不要填错了
    MiddleCount: 195, // Count/2 就可以。
        GetData: function (width)
        {
            if (width < 200) return this.Min;
            else if (width < 400) return this.Simple;
    GetData: function(width) {
      if (width < 200) return this.Min;
      else if (width < 400) return this.Simple;
            return this.Full;
        }
    };
      return this.Full;
    }
  };
    return SHZE_MINUTE_X_COORDINATE;
}
  return SHZE_MINUTE_X_COORDINATE;
};
////////////////////////////////////////////////////////////////////////////
/// /////////////////////////////////////////////////////////////////////////
// A股走势图X轴坐标
//
///////////////////////////////////////////////////////////////////////////
HQData.CreateSHSZData=function(minuteStringData)
{
    const TIME_SPLIT =
    [
        { Start: 930, End: 1130 },
        { Start: 1301, End: 1500 }
    ];
/// ////////////////////////////////////////////////////////////////////////
HQData.CreateSHSZData = function(minuteStringData) {
  const TIME_SPLIT = [
    { Start: 930, End: 1130 },
    { Start: 1301, End: 1500 }
  ];
    return minuteStringData.CreateTimeData(TIME_SPLIT);
}
  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"]
    ],
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 就可以。
        Count: 241,         //!! 一共的分钟数据个数,不要填错了
        MiddleCount: 121,   // Count/2 就可以。
    GetData: function(width) {
      if (width < 200) return this.Min;
      else if (width < 400) return this.Simple;
        GetData: function (width)
        {
            if (width < 200) return this.Min;
            else if (width < 400) return this.Simple;
      return this.Full;
    }
  };
            return this.Full;
        }
    };
  return SHZE_MINUTE_X_COORDINATE;
};
    return SHZE_MINUTE_X_COORDINATE;
}
///////////////////////////////////////////////////////////////////////////////////////
/// ////////////////////////////////////////////////////////////////////////////////////
// 港股走势图X轴坐标
//
///////////////////////////////////////////////////////////////////////////////////////
HQData.CreateHKData=function(minuteStringData)
{
    const TIME_SPLIT =
    [
        { Start: 930, End: 1200 },
        { Start: 1301, End: 1600 }
    ];
/// ////////////////////////////////////////////////////////////////////////////////////
HQData.CreateHKData = function(minuteStringData) {
  const TIME_SPLIT = [
    { Start: 930, End: 1200 },
    { Start: 1301, End: 1600 }
  ];
    return minuteStringData.CreateTimeData(TIME_SPLIT);
}
  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"]
        ],
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,
    Count: 331,
    MiddleCount: 150,
        GetData: function (width)
        {
            if (width < 200) return this.Min;
            else if (width < 450) return this.Simple;
    GetData: function(width) {
      if (width < 200) return this.Min;
      else if (width < 450) return this.Simple;
            return this.Full;
        }
    };
    return HK_MINUTE_X_COORDINATE;
}
      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 },
/// /////////////////////////////////////////////////////////////////////////////////////
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.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"],
        ],
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,
      Count: 1440,
      MiddleCount: 600,
        GetData: function (width)
        {
            if (width < 200) return this.Min;
            else if (width < 450) return this.Simple;
      GetData: function(width) {
        if (width < 200) return this.Min;
        else if (width < 450) return this.Simple;
            return this.Full;
        }
    }
        return this.Full;
      }
    };
    return FOREX_MINUTE_X_COORDINATE;
}
    return data;
  }
};
HQData.GetETDecimal = function(symbol) {
  var upperSymbol = symbol.toUpperCase();
  if (upperSymbol === "UDI_100.ET") return 2;
////////////////////////////////////////////////////////////////////////
//  美元指数
  return 2;
};
/// ////////////////////////////////////////////////////////////////////////////////
// K线数据对接
//
///////////////////////////////////////////////////////////////////////
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 },
        ];
/// //////////////////////////////////////////////////////////////////////////////
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
        return minuteStringData.CreateTimeData(TIME_SPLIT);
  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) {
  // 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' ||kLines.type === 'US') {
    url =
      window.globalVar +
      `api/stock/getKData.do?pid=${kLines.pid}&interval=${internalPeriod}&stockType=${kLines.type}`;
    // }
    // if (kLines.type === 'qh') {
    // const internalPe = internalPeriod === 1 ? 5 : internalPeriod
    // url = window.globalVar+`api/stock/getKData.do?symbol=${encodeURIComponent(kLines.pid)}&cmd=history&period=${internalPe}&stockType=${kLines.type}`
    // url = window.globalVar+`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.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.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];
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)
{
    //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);
    var internalPeriod=HQData.GetInternalPeriod(period);
    var internalRight=HQData.GetInternalRight(right);
    if (option && option.Update==true)
    {
        var beginDate=option.End;
        var url=`http://kline.workingman.icu/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}`;
      hqChartData.data.push(newItem);
      //
      yClose = close;
    }
    else
    {
        var url=`http://kline.workingman.icu/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=${internalSymbol.Market}.${internalSymbol.Symbol}&klt=${internalPeriod}&fqt=${internalRight}`;
  }
  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 });
    }
  });
};
    return { Url:url, Symbol:symbol, InternalSymbol:internalSymbol, Period:period, Right:right };
}
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')
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 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)
    var internalSymbol=HQData.GetInternalSymbol(symbol);
    var internalPeriod=HQData.GetInternalPeriod(period);
    var internalRight=HQData.GetInternalRight(right);
  //   stock.yclose = yClose
  //   stock.open = open
  //   stock.high = high
  //   stock.low = low
  //   stock.price = close
  //   stock.vol = vol
  //   stock.amount = amount
  //   stock.date = date
    if (option && option.Update==true)
    {
        var beginDate=option.End;
        var url=`http://kline.workingman.icu/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}`;
  //   yClose = close
  // }
  const kLines = JSON.parse(window.localStorage.getItem("kLine"));
  var yClose = data.preKPrice;
  console.log("recvDatadata====", data);
  if (kLines.type === "IN" || kLines.type === "US") {
    for (var i = 0; i < data.klines.length; ++i) {
      var strItem = data.klines[i];
      var item = strItem.split(",");
      // var today = new Date(Date.parse(item[0]))
      // var date = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate()
      var date = moment.unix(Date.parse(item[0])).format("YYYYMMDD");
      var open = parseFloat(item[1]);
      var close = parseFloat(item[2]);
      var high = parseFloat(item[3]);
      var low = parseFloat(item[4]);
      var vol = parseFloat(item[5]) * 100;
      var amount = parseFloat(item[6]);
      stock.yclose = yClose;
      stock.open = open;
      stock.high = high;
      stock.low = low;
      stock.price = close;
      stock.vol = vol;
      stock.amount = amount;
      stock.date = date;
      yClose = close;
    }
    else
    {
        var url=`http://kline.workingman.icu/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=${internalSymbol.Market}.${internalSymbol.Symbol}&klt=${internalPeriod}&fqt=${internalRight}`;
  }
  // 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
      });
    }
  });
};
    return { Url:url, Symbol:symbol, InternalSymbol:internalSymbol, Period:period, Right:right };
}
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";
HQData.GetInternalPeriod=function(periodID)
{
    var MAP_PERIOD=new Map(
        [
            [0, 101],   //day
            [1, 102],   //week
            [2, 103],   //month
  var yClose = "";
  console.log("recvData===data.name22", recvData, kLines);
  recvData = JSON.parse(recvData);
            [4, 1],    //1min
            [5, 5],    //5min
            [6, 15],   //15min
            [7, 30],   //30min
            [8, 60],   //60min
        ]
    );
  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];
    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=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(".");
    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;
      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");
    if (HQChart.Chart.MARKET_SUFFIX_NAME.IsUSA(symbolUpper))
    {
        if (market==100) return false;  //指数不支持复权
        return true;
      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;
    }
  }
    return false;
}
  if (option.Data.Self.IsDestroy === false) {
    HQData.Log("[HQData.RecvHistoryData] hqchartData ", hqChartData);
    callback(hqChartData);
  }
};
HQData.RequestFlowCapitalData=function(data,callback)
{
    data.PreventDefault=true;
    var hqChartData={code:0, stock:[]}; //如果没有数据就填空
   if (data.Self.IsDestroy==false)
   {
      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();
HQData.RequestHistoryData=function(data, callback)
{
    data.PreventDefault=true;
    var symbol=data.Request.Data.symbol; //请求的股票代码
    var period=data.Self.Period;    //周期
    var right=data.Self.Right;      //复权
  var option = { Update: true };
  if (dateRange && dateRange.End && dateRange.End.Date > 0)
    option.End = dateRange.End.Date;
    console.log(`[HQData::RequestHistoryData] Symbol=${symbol}`);
    var obj=HQData.GetKLineApiUrl(symbol,period, right, null);
  console.log(`[HQData::RequestMinuteRealtimeData] Symbol=${symbol}`);
  var obj = HQData.GetMinuteKLineApiUrl(symbol, period, right, option);
    $.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;
    var yClose=data.preKPrice;;
    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 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];
        hqChartData.data.push(newItem);
        yClose=close;
  $.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版本格式
    if (option.Data.Self.IsDestroy==false)
   {
        HQData.Log("[HQData.RecvHistoryData] hqchartData ", hqChartData)
      callback(hqChartData);
    }
}
  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(",");
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 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 option={ Update:true };
    if (dateRange && dateRange.End && dateRange.End.Date>0) option.End=dateRange.End.Date;
    var newItem = [date, yClose, open, high, low, close, vol, amount, time];
    hqChartData.data.push(newItem);
    console.log(`[HQData::RequestRealtimeData] Symbol=${symbol}`);
    var obj=HQData.GetKLineApiUrl(symbol,period, right, option);
    yClose = close;
  }
    $.ajax(
    {
        url: obj.Url,
        type: "GET",
        success:function(recvData)
        {
            HQData.RecvRealtimeData(recvData, callback, { Data:data, Obj:obj });
        }
    });
}
  if (option.Data.Self.IsDestroy === false) {
    HQData.Log("[HQData.RecvMinuteRealtimeData] hqchartData ", hqChartData);
    callback(hqChartData);
  }
};
HQData.RecvRealtimeData=function(recvData, callback, option)
{
    var data=recvData.data;
    var stock={symbol:option.Obj.Symbol, name:data.name };
    var yClose=data.preKPrice;
    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 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] };
    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 data=recvData.data;
    var hqChartData={code:0, data:[]};
    hqChartData.symbol=option.Obj.Symbol;
    hqChartData.name=data.name;
    var yClose=data.preKPrice;;
    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=today.getHours()*100+today.getMinutes();
        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.RecvHistoryMinuteData] 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;
    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=today.getHours()*100+today.getMinutes();
        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
}
export default {
  HQData: HQData
};