TradingView Pine Script回测商品期货(金银等)显示无数据问题求助
问题原因排查
首先明确:TradingView本身完全支持商品期货策略回测,你遇到的“均线plot正常显示、回测面板无数据”的情况,属于几类常见的适配问题,并非平台不支持商品期货回测的通用限制:
- 数据权限的匹配错位。你提到的沪金、沪银、NO1(豆粕)这类国内商品期货,平台的权限规则是:基础K线数据(用于计算均线、绘图)对免费账户开放,但回测引擎运行需要的全量历史成交、逐笔匹配级数据,是按账户等级分级开放的。免费账户一般仅能获取最近3个月的期货回测数据集,超出权限范围后,回测引擎拿不到计算需要的完整数据,就会直接显示无结果;但因为绘图只需要调用当前屏幕可见的K线收盘价计算SMA,不受这个权限限制,和你观察到的现象完全匹配。
- 代码逻辑的兼容性冲突。你提供的SMA策略代码本身存在和期货品种回测逻辑不兼容的问题:
- 代码中设置了
strategy.risk.allow_entry_in(strategy.direction.long),限制策略仅允许开多单,但后续逻辑同时写入了均线交叉下破后的空单开仓指令。在股票、外汇、加密货币品种上,回测引擎遇到这种规则冲突时会自动跳过不符合方向限制的开单指令,但在商品期货的回测引擎逻辑里,这种规则冲突会直接被判定为策略无效,终止回测流程。 - 代码中设置的
default_qty_type = strategy.percent_of_equity(按权益百分比计算开仓量),没有适配商品期货的合约乘数,部分大乘数的合约在计算时会出现单值为0的无效仓位,导致回测引擎无法生成有效交易记录。 - 时间判断条件
time > start使用的是平台默认UTC时区,和国内商品期货的交易所本地时区(Asia/Shanghai)存在8小时时差,会导致部分时段的开仓条件完全无法触发,最终回测结果为空。
- 代码中设置了
- 合约类型选择偏差。如果你当前选的是NO1的近月交割合约、或者非回测专用的普通连续合约,这类数据集本身不开放全量回测接口,需要切换到平台标注的回测专用主连合约数据集,才能正常运行回测。
可直接落地的修正方案
- 先移除逻辑冲突的代码:要么删除
strategy.risk.allow_entry_in(strategy.direction.long)这行放开交易方向限制,要么删除后续的空单开仓逻辑,避免规则矛盾。 - 调整开仓量计算方式:把按权益百分比计算的参数改为固定合约数模式,即设置
default_qty_type = strategy.fixed,搭配default_qty_value = 1指定每次开仓1手,适配商品期货的交易规则。 - 给时间判断加上时区参数:将
start = timestamp(2020, 1, 30, 0, 0)修改为start = timestamp("Asia/Shanghai", 2020, 1, 30, 0, 0),消除时差带来的条件触发异常。 - 回测前确认当前账户对应品种的数据权限,免费账户如果需要更长周期的期货回测,需要升级对应档位的账号权限。
内容的提问来源于stack exchange,提问作者user14384765
相关产品推荐
相关产品推荐

