tradingview 日周月K线数据少一天、一周、一月。

根据tradingview文档的说明通过getbars函数,使用websocket提交请求历史数据,得到历史数据返回之后渲染历史数据,发现日周月k线分别少一天,一周,一月。商品配置时区设置的是上海,请问此现象是否和配置商品交易时间有关,少数据的原因是什么?配置商品时需要注意什么?以下是tradingview配置项

img

img

以下是渲染历史数据的代码

img

以下回答引自ChatGPT
这种现象可能与配置商品交易时间有关。具体而言,可能是因为在一些特定的交易日或时段,市场暂停交易或者交易时间缩短导致数据不完整。
另外,如果你使用的是TradingView提供的历史数据服务,可能还需要注意以下几点:
TradingView的历史数据服务并非全部覆盖市场上所有产品和期间,可能存在一些数据空缺或不准确的情况。
历史数据的时间戳和时区等信息应该正确设置,否则可能会导致数据不完整或者错误。对于不同的市场和交易所,时区可能有所不同,需要仔细核对相关文档和资料。
如果你需要使用实时数据,可能还需要考虑一些其他的问题,例如网络延迟、数据更新频率等等。

请把代码发出来,不要图片形式的,方便复制

“Devil组”引证GPT后的撰写:

  • 根据提供的信息,很可能是由于商品的交易时间与数据源的交易时间不同导致的。可以检查一下数据源的交易时间是否与商品交易时间匹配。
  • 另外,在商品配置中设置了session参数,它控制了每个交易日的开始和结束时间。如果商品的交易时间不是按照24小时制进行的,则需要在session参数中指定商品的交易时间。
  • 最后,还需要注意的是,不同的数据源可能会提供不同的数据质量和数据可用性。如果发现缺少数据或者数据不准确,建议尝试更换其他数据源。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
您好,根据您的描述,可能有以下几个可能的原因导致您得到的历史数据少了一天、一周、一月:

  1. 交易所关闭时间:交易所在每周的周末、公共假期等时间段通常会关闭交易,这可能导致您在这些时间段请求的历史数据少了一天、一周、一月。
  2. 数据质量问题:交易所提供的历史数据有可能存在数据质量问题,例如数据缺失、重复等,这也可能导致您得到的历史数据少了一天、一周、一月。
  3. 时间戳问题:在请求历史数据时,您使用的时间戳可能存在问题。例如,您的时间戳可能与交易所的时间戳存在差异,导致您请求的历史数据不完整。

为了解决这个问题,您可以尝试以下步骤:

  1. 检查您的交易所配置是否正确:确认您的商品配置中时区设置为上海,并且您正在使用的交易所在该时区内运营。
  2. 确认您的时间戳是否正确:使用正确的时间戳请求历史数据,确保您的时间戳与交易所的时间戳保持一致。
  3. 检查您的数据源是否可靠:确认您的数据源是否可靠,尝试从其他数据源请求历史数据以确认数据是否完整。

最后,建议您在使用TradingView时仔细阅读相关文档和使用说明,以确保正确配置您的商品和交易所,并正确使用API请求历史数据。

                //渲染历史数据
                getBars: (symbolInfo,resolution,periodParams,onHistoryCallback,onErrorCallback) => {
                    
                    // 请求k线数据
                    testArr.map(item => {
                        let barValue = {};
                        // 时间戳
                        barValue.time = item.time * 1000;
                        // 开
                        barValue.open = item.open;
                        // 高
                        barValue.high = item.high;
                        // 低
                        barValue.low = item.low;
                        // 收
                        barValue.close = item.close;
                        // 成交量
                        barValue.volume = item.volume
                        bar.push(barValue);
                    })
                    console.log(bar)

                    onHistoryCallback(bar)


                },

定义一个testArr数组,当getBars函数里添加了“periodParams”参数时,当执行到bar.push(barValue)时,bar数组为什么会被改变,不等于源数组testArr,此时就会出现少一周的数据的情况?当getBars函数里没有添加了“periodParams”参数时,控制台报错:onHistoryCallback is not a function。而打印出来的bar数组没有被改变,依旧等于testArr。请问我应该如何设置periodParams以让bar数组不会被改变,让bar数据正常渲染到图表里?

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可能性1. 交易时区问题

根据你所提供的配置,你已经将商品配置时区设置为上海时区。 因此,任何缺少数据的问题并不是由交易时区引起的。

可能性2. 数据请求问题

我们需要确定数据是否实际上是不可用的,或者只是在客户端显示上存在问题。 如果数据在交易时区内丢失,则可能是因为数据请求问题而不是配置问题。

你可以通过以下两种方法来检查客户端请求是否已正确进行:

  • 通过网络桥接器(Bridge)检查查询是否成功。 在这种情况下,你会看到一条带有响应信息的出站消息。 如果没有,则说明数据未在k线中显示,那么你必须修复查询。

  • 尝试通过TradingView验证数据是否在服务器上可用。 在这种情况下,可能需要进一步研究Websocket API文档,以查找以正确方式格式化查询请求的方法。

以下是一个示例代码,说明如何使用TradingView Websocket API通过python获取历史数据:

import websocket
import json
def on_open(ws):
    print('connected')
    data = {
        "ticks_history": "frxEURUSD",
        "adjust_start_time": 1,
        "count": 100,
        "granularity": 60,
        "end": "latest",
    }
    ws.send(json.dumps(data))
    def on_message(ws, message):
        print(message)
    def on_close(ws):
        print('disconnected')
        ws.close()
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("wss://ws.binaryws.com/websockets/v3?app_id=1089", on_open=on_open, on_message=on_message, on_close=on_close)
    ws.run_forever()

可能性3. 数据丢失问题

如果TradingView API的输出表明数据没有丢失,就可能是对于一些原因,您的客户端可能无法完全渲染数据。

以下是一些在这种情况下尝试的解决方案:

  • 使用不同时间段的k线图查看缺少的数据是否出现在另一个期间。

  • 使用TradingView应用展示其他图表数据,检查客户端渲染是否相同。

  • 根据你遇到问题的k线图的数据解析其数据。

希望这些信息可以帮助你解决问题。
如果我的回答解决了您的问题,请采纳!