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

Pine Script技术问询:如何遍历5个订单ID找到未开仓的多单ID?

在Pine Script中筛选未关联持仓的独立订单ID

你需要基于同一个多单开仓条件,从5个独立的strategy.order订单ID里找出未被strategy.opentrades.entry_id()关联到当前持仓的ID——因为每个订单需要独立平仓逻辑,无法使用金字塔加仓功能。

你当前把持仓订单ID拼接成字符串的方式不利于后续判断,换成数组存储会更高效、易维护,以下是具体实现方案:

实现步骤

  • 用数组存储当前持仓的订单ID,方便快速判断某个ID是否已在持仓中
  • 定义所有可用的目标订单ID列表
  • 遍历可用ID,找到第一个未在持仓数组中的ID,用于触发新的开仓指令

完整代码示例

//@version=5
strategy("独立订单开仓筛选", overlay=true, initial_capital=10000, default_qty_type=strategy.cash, default_qty_value=2000, pyramiding=0)

// 定义所有可用的5个订单ID
var string[] availableOrderIds = array.new_string(5, "order_1", "order_2", "order_3", "order_4", "order_5")

// 多单开仓条件(替换成你的实际条件)
longCondition = ta.crossover(ta.sma(close, 5), ta.sma(close, 20))

// 存储当前持仓的订单ID数组
var string[] openTradeOrderIds = array.new_string()
if barstate.islast
    // 清空数组并重新填充当前持仓的订单ID
    array.clear(openTradeOrderIds)
    for idx = 0 to strategy.opentrades - 1
        array.push(openTradeOrderIds, strategy.opentrades.entry_id(idx))

// 筛选未持仓的订单ID
string freeOrderId = na
for id in availableOrderIds
    if not array.includes(openTradeOrderIds, id)
        freeOrderId = id
        break  // 找到第一个可用ID就停止遍历

// 触发开仓:当满足条件且有可用ID时
if longCondition and not na(freeOrderId)
    strategy.entry(freeOrderId, strategy.long)

// 示例独立平仓逻辑(每个ID对应自己的平仓条件,此处用固定止损示例)
for id in availableOrderIds
    if strategy.opentrades > 0 
        for idx = 0 to strategy.opentrades - 1
            if strategy.opentrades.entry_id(idx) == id
                strategy.exit(id + "_exit", id, stop=strategy.opentrades.entry_price(idx) * 0.95)

代码解释

  1. 可用订单ID数组:availableOrderIds预定义了5个独立的订单ID,可根据需求修改命名规则
  2. 持仓ID数组维护:每次最后K线时,清空并重新收集当前所有持仓的订单ID,确保数据实时准确
  3. 筛选逻辑:遍历可用ID,用array.includes()判断是否已在持仓中,找到第一个未被使用的ID就停止遍历,避免无效循环
  4. 独立平仓:遍历每个订单ID,针对该ID对应的持仓设置独立平仓规则(示例用了固定止损,可替换为你需要的平仓条件)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:05:33