Pine Script中如何查询特定价位未结订单以避免重复提交buy stop订单
Pine Script实现特定价位未结订单查询方案
核心逻辑
通过遍历当前所有未结订单,匹配订单类型和价位两个维度,确认无重复订单后再提交新的挂单请求。
实现步骤
- 调用
strategy.opentrades获取当前未结订单总数量,遍历所有订单 - 对单条订单,先通过
strategy.opentrades.type(idx)判断订单类型是否为strategy.order_type_stoplong(即buy stop类型) - 校验订单价位是否与目标提交价位一致,为避免浮点精度误差,判定两个价格差值小于品种最小变动单位
syminfo.mintick即视为同价位 - 遍历完成后无匹配结果,再执行新buy stop订单的提交逻辑
可直接运行的示例代码
//@version=5 strategy("防重复buy stop挂单示例", overlay=true) // 自定义参数配置 target_buy_stop_price = input.float(300.00, "目标挂单价位", minval=0) order_qty = input.float(1, "挂单数量", minval=0) // 检查同价位是否存在未结buy stop订单的自定义函数 has_duplicate_buystop(price) => duplicate = false for i = 0 to strategy.opentrades - 1 order_type = strategy.opentrades.type(i) order_price = strategy.opentrades.stop(i) if order_type == strategy.order_type_stoplong and math.abs(order_price - price) < syminfo.mintick duplicate := true break duplicate // 无重复订单时提交挂单 if not has_duplicate_buystop(target_buy_stop_price) strategy.order("MyBuyStop", strategy.long, qty=order_qty, stop=target_buy_stop_price)
注意事项
- 该实现仅支持Pine Script v5版本,更低版本无未结订单遍历接口,无法实现该需求
- 价格比较必须做精度容错,直接用
==判断相等会因为浮点运算误差出现同价位判定失败的问题 - 该功能仅能在
strategy策略脚本中使用,indicator指标脚本无法调用订单相关接口
内容的提问来源于stack exchange,提问作者masoud mohammadpoor
相关产品推荐
相关产品推荐

