如何在TradingView轻量图表十字线回调中获取昨日K线并计算涨跌幅?
获取TradingView昨日K线数据并计算涨跌幅
要实现显示自昨日收盘价以来的涨跌幅,核心是获取昨日K线的收盘价,你可以通过K线系列的data()方法获取完整历史数据,再根据时间筛选出昨日的K线。以下是修改后的实现代码:
// 全局变量存储昨日收盘价 let yesterdayClose = null; // 初始化或数据更新时获取昨日数据 const updateYesterdayClose = () => { const allCandles = candleSeries.data(); if (!allCandles || allCandles.length < 2) return; // 计算昨日时间范围(UTC时区,按需调整) const today = new Date(); const yesterday = new Date(today.setDate(today.getDate() - 1)); const yesterdayStart = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate()).getTime(); const yesterdayEnd = yesterdayStart + 24 * 60 * 60 * 1000; // 从历史数据中筛选昨日K线 const yesterdayCandle = allCandles.find(candle => { return candle.time >= yesterdayStart && candle.time < yesterdayEnd; }); if (yesterdayCandle) { yesterdayClose = yesterdayCandle.close; } }; // 订阅十字光标移动事件 chart.subscribeCrosshairMove((param) => { if (param.time) { const data = param.seriesData.get(candleSeries); const vdata = param.seriesData.get(volumeSeries); // 计算并格式化涨跌幅信息 let changeInfo = ''; if (yesterdayClose && data.close) { const change = data.close - yesterdayClose; const changePercent = (change / yesterdayClose) * 100; const color = change >= 0 ? '#26a69a' : '#ef5350'; changeInfo = `<span style="color: ${color}; margin-left: 10px;"> ${change >= 0 ? '+' : ''}${change.toFixed(2)} (${changePercent.toFixed(2)}%) </span>`; } // 更新DOM内容 stockInfoRow.innerHTML = ` <div style="font-size: 20px; margin: 4px 0px; color: #20262E">${symbol}</div> <div style="font-size: 14px; margin: 4px 0px; color: #20262E"> O${data.open} H${data.high} L${data.low} C${data.close} Vol${formatVolume(vdata.value)} ${changeInfo} </div> `; } }); // 初始化时加载昨日数据 updateYesterdayClose(); // 订阅数据更新事件,实时同步昨日收盘价 chart.subscribeDataChanged(() => { updateYesterdayClose(); });
关键说明:
- 昨日数据筛选:通过时间戳范围匹配昨日K线,若图表使用本地时区,需调整时间计算逻辑以匹配时区。
- 涨跌幅可视化:用颜色区分涨跌(绿色涨、红色跌),同时显示绝对涨跌额和涨跌幅百分比。
- 数据同步:通过
subscribeDataChanged监听数据更新,确保昨日收盘价随行情数据实时刷新。
内容的提问来源于stack exchange,提问作者Robert Sjödahl
相关产品推荐
相关产品推荐

