如何在TradingView绘制bid-ask、DOM实时走势并留存bid/ask历史数据?
TradingView Bid/Ask历史走势指标实现方案
完全可以实现对应需求,核心逻辑是用Pine Script内置的实时报价变量捕获当前bid/ask值,存入变量缓存后在图表上绘制连续轨迹即可,不需要依赖TradingView官方未开放的历史bid/ask接口。
核心实现思路
- 调用Pine Script内置变量
syminfo.bid和syminfo.ask实时获取当前最优买价、卖价 - 用
var关键字声明数组类型的缓存变量,每根K线闭合(或者每一次报价更新时)将当前bid/ask值写入数组 - 调用
plot()函数将数组中存储的历史bid/ask值分别绘制为两条连续曲线,可自定义颜色区分(比如bid用绿色,ask用红色) - 可选优化:添加价差计算逻辑,将bid-ask的差值在副图单独绘制,更直观查看流动性变化
基础代码示例
//@version=5 indicator("Bid/Ask历史轨迹", overlay=true, max_labels_count=500) // 实时获取bid/ask current_bid = syminfo.bid current_ask = syminfo.ask // 声明数组缓存历史数据 var array<float> bid_history = array.new_float() var array<float> ask_history = array.new_float() // 实时更新缓存(tick级更新,也可改为barstate.islast只在K线收盘更新降低性能消耗) if barstate.isrealtime array.unshift(bid_history, current_bid) array.unshift(ask_history, current_ask) // 限制缓存长度避免性能溢出,最多保留最近1000条记录 if array.size(bid_history) > 1000 array.pop(bid_history) array.pop(ask_history) // 绘制曲线 plot(current_bid, color=color.new(color.green, 0), linewidth=2, title="Bid价格") plot(current_ask, color=color.new(color.red, 0), linewidth=2, title="Ask价格") // 可选:绘制历史点标记 for i = 0 to array.size(bid_history) - 1 plot(array.get(bid_history, i), color=color.new(color.green, 80), style=plot.style_circles, linewidth=1) plot(array.get(ask_history, i), color=color.new(color.red, 80), style=plot.style_circles, linewidth=1)
注意事项
- 该实现的数据仅存在于当前页面会话中,刷新页面后历史记录会清空,符合需求
- 注意:该指标仅在实盘行情加载后才会开始记录数据,加载前的历史bid/ask数据无法回溯
- 如果需要降低性能占用,可以将tick级更新改为K线级更新,仅在每根K线生成时记录一次bid/ask值
- 数据保留长度可自行调整代码中的1000条阈值,数值越大内存占用越高
内容的提问来源于stack exchange,提问作者Augustas Šadzevičius
相关产品推荐
相关产品推荐

