1分钟图表交易策略如何查看5秒/1秒级利润?request.security返回零求助
1分钟策略里跟踪5秒/1秒周期的盈亏方法
首先说你遇到的request.security返回0的问题,大概率是两个原因:要么平台回测时不提供这么低周期的历史数据,要么你没在低周期上下文里正确传递持仓信息来计算盈亏。下面给你具体解决办法:
正确用request.security实现低周期盈亏跟踪
要在5秒/1秒周期里算利润,得把1分钟主框架的持仓状态(多空、入场价)传到低周期,然后在低周期里用实时收盘价算浮动盈亏。直接上代码示例:
//@version=5 strategy("1min策略+5秒盈亏跟踪", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, commission_type=strategy.commission.percent, commission_value=0.1) // 1分钟级别的买卖信号(你可以换成自己的策略逻辑) 开多 = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) 开空 = ta.crossunder(ta.sma(close, 5), ta.sma(close, 20)) if (开多) strategy.entry("多单", strategy.long) if (开空) strategy.entry("空单", strategy.short) // 获取当前1分钟框架下的持仓状态 持仓多 = strategy.position_size > 0 持仓空 = strategy.position_size < 0 入场均价 = strategy.position_avg_price // 定义盈亏计算的小函数 计算盈亏(_持仓多, _入场价, 当前价) => if _持仓多 (当前价 - _入场价) / _入场价 * 100 // 多单盈亏百分比 else if _持仓空 (_入场价 - 当前价) / _入场价 * 100 // 空单盈亏百分比 else 0.0 // 请求5秒周期的数据,计算该周期内的盈亏 5秒盈亏 = request.security(syminfo.tickerid, "5", 计算盈亏(持仓多, 入场均价, close)) // 把5秒盈亏画在图表上,方便查看 plot(5秒盈亏, title="5秒盈亏(%)", color=color.blue, linewidth=2) // 最后一根K线显示当前盈亏(可选) if barstate.islast label.new(bar_index, high, str.tostring(5秒盈亏) + "%", color=color.yellow)
关键注意事项
- 数据权限问题:很多平台回测时不支持1秒/5秒的历史数据,只在实时行情里提供。如果换15秒周期测试能出数据,那就是平台限制,没法在回测里用更低周期。
- 持仓状态同步:必须把主框架的持仓多/空、入场价传到低周期,不然低周期里不知道你有没有持仓,算出来的盈亏肯定是0。
- 性能问题:请求1秒数据会让回测速度变慢很多,建议先测5秒没问题再试1秒。
- 别碰calc_on_every_tick:这个确实只在实时/正向测试生效,回测时用不了,所以必须用request.security走低周期计算。
排查返回0的小技巧
先测下低周期的收盘价能不能拿到,把这段代码加到策略里:
5秒收盘价 = request.security(syminfo.tickerid, "5", close) plot(5秒收盘价, title="5秒收盘价", color=color.red)
如果5秒收盘价是0,那就是平台不给这个周期的回测数据,只能换周期或者用实时测试。
内容的提问来源于stack exchange,提问作者Kaamran Raahemifar
相关产品推荐
相关产品推荐

