【问题标题】:How to draw shapes with a future timestamp in the Tradingview api?如何在 Tradingview api 中绘制带有未来时间戳的形状?
【发布时间】:2019-09-16 10:34:56
【问题描述】:

我正在尝试使用 JavaScript API 在 TradingView 屏幕中绘制具有两个任意日期点的形状(trend_line 使用 createMultipointShape() 图表方法)。我可以在屏幕上放置带有已经过去的时间戳的形状;这没有任何问题。

但是,当绘制具有未来时间戳的形状时,TradingView 会在当前日期切断形状。

例如,带有点:{time: 1567330140, price: 11500} (2019-09-01) 和 {time: 1569835740, price: 11500} (2019-09-30) TradingView 显示以下输出: TradingView chart with line cut off at the current date; magenta dashed line is what is drawn, current date is 2019-09-16.

当我手工绘制这个形状时,没有这样的限制。看来我将来无法绘制任何形状,而不仅仅是trend_line。有没有办法解决?文档只指定了这一点:

createMultipointShape(点,选项)

points:对象数组 [{time, [price], [channel]},...]

 time: unix time. The only mandatory argument.

horizontal_ray 确实有效(根据定义,这条线永远持续下去),但它不能解决我在点之间有一条线的问题。

【问题讨论】:

    标签: javascript charts tradingview-api


    【解决方案1】:

    要在未来绘制形状,您必须确保 pointtime 与当前正在打印的任何 bin/interval 蜡烛对齐,并让 time 成为该未来时间的确切时间戳蜡烛打开。

    在您的示例中,1569835740 * 1000(转换为 ms 的时间戳)为 Mon Sep 30 2019 09:29:00 - 因此,如果我们打印 1 小时条,则时间戳需要准确为 9:00:00 而不是 9:29:00

    首先以毫秒 (x1000) 为单位获取您的时间:1569835740000

    知道毫秒中的 1 小时是 3600000,我们可以找出余数,看看我们还剩多少:

    1569835740000 % 3600000 = 1740000

    删除剩余部分以获得我们良好的时间戳(以毫秒为单位),然后转换回所需的电视格式:

    time = (1569835740-1740000) / 1000

    如果使用多个不兼容的时间框架,您可能必须根据当前图表间隔动态调整余数计算。

    完整代码:

    let time = 1569835740
    
    time = time * 1000
    
    let rem = time % 3600000
    
    time = (time - rem) / 1000
    
    widget.chart().createMultipointShape([
                {
                    time: 1567330140
                    , price: 10500
                },
                {
                    time: time
                    , price: 10500
                }
            ], {
                shape: 'trend_line',
            })
    

    结果:

    【讨论】:

    • 感谢您抽出宝贵时间回答。但是,它似乎并没有在我的最后工作:当我在“现在”之前的日期尝试这个时,我最终得到一个正好停在那里的图表(例如 9 月 16 日:image);当我在未来的日期(例如 9 月 18 日:image)尝试此操作时,它不起作用,并且该行以当前时间戳结束。我为这个测试硬编码了时间戳,即.setDate(18); .setMonth(8); .setHours(0, 0, 0, 0);,它应该绕过上面提出的问题,对吧?
    • 您是否尝试过插入提供的代码并查看它最终打印的内容?还有你使用的是什么版本的图表库
    • 我刚刚更新到 TV lib 的最新版本(1.14;2019-06-14),但没有运气。我尝试了您提供的确切代码(稍作修改;参见pastebin);这不起作用,所以我只是硬编码了这些点([{time: 1567330140, price: 10500}, {time: 1569834000, price: 10500}]),但这也会截断所有间隔上的线。更改剩余模式(例如 6 小时或 1 天)也不起作用。这可能与 UTC 偏移量(我的末尾为 +2)或数据源(自定义数据馈送适配器)有关吗?
    • 嗯,是的,我会先尝试将所有内容都转换为 UTC,如果您使用 6 小时或 1D 间隔,那么 +2h 时区会搞砸。
    • 为了隔离问题,我在 tradingview lib (index.html) 的演示页面中尝试了这个。还是和以前一样的问题;见pastebin.com/98aEv3Y2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2021-11-23
    相关资源
    最近更新 更多