You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

策略代码中inBuy[1]与无下标的inBuy有何区别

Pine量化策略代码中inBuy[1]与无下标inBuy的差异

问题涉及的两段策略代码如下:

inBuy := not inBuy[1] and close < l1Long[1] ? true : inBuy[1]
inBuy := inBuy[1] and close > stopPrice ? false : inBuy

核心定义差异

  • inBuy[1]:指代前一根K线(bar)全部计算完成后,最终落盘存储的inBuy历史序列值。这个值在当前K线的整个计算周期内是固定常量,不会被当前K线的任何赋值操作改动。
  • 无下标的inBuy:指代当前K线计算流程中,inBuy变量在代码执行到当前位置时的实时值,会随着当前K线内逐行执行的赋值操作动态更新。

第二行代码末尾无下标inBuy的实际作用

这是逐bar执行类量化脚本(典型如TradingView Pine Script)的常规写法,第二行是三元条件赋值逻辑,执行顺序如下:

  1. 优先判断条件inBuy[1] and close > stopPrice是否成立
  2. 如果条件成立,直接将当前bar的inBuy值更新为false,对应触发止损、从持仓状态转为空仓的逻辑
  3. 如果条件不成立,就保留执行这行代码之前,当前bar已经计算得到的inBuy值——也就是第一行代码运行完后给当前bar赋的inBuy结果,不会回退覆盖成前一根bar的历史值。

实际运行逻辑示例

假设前一根bar最终的inBuy[1] = false(上一根K线结束时为空仓):

  • 第一行代码判断开多条件:not inBuy[1]为true,如果同时满足当前收盘价小于前一根bar的l1Long阈值,就给当前bar的inBuy赋值为true(开多仓);不满足开仓条件就赋值为和前一根一致的false。
  • 第二行代码判断止损条件:因为inBuy[1]是false,false and 任意判断结果都为false,止损条件不触发,直接保留第一行算出的当前inBuy值作为当前bar的最终状态。

再假设前一根bar最终的inBuy[1] = true(上一根K线结束时处于持仓状态):

  • 第一行代码判断开多条件:not inBuy[1]为false,开仓条件不成立,给当前bar的inBuy先赋值为和前一根一致的true(保持持仓)。
  • 第二行代码判断止损条件:inBuy[1]为true,如果当前收盘价大于止损价stopPrice,就把当前inBuy更新为false(止损平仓);如果没触发止损,就保留之前的true值继续持仓。

内容的提问来源于stack exchange,提问作者Gao Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:51:17