TradingView网格策略:按层级设置最大开仓数技术问询
实现分层级控制最大开仓数的做空网格策略
要给每个价格层级单独设置最大开仓数,核心思路是为每个层级的订单标记唯一标识,实时统计该标识对应的当前持仓数量,开仓前判断是否达到上限。以下是具体实现方案:
步骤1:定义层级参数
为每个层级设置最大开仓数,同时给每个层级的订单分配唯一的entryid(用于后续统计持仓):
// 定义各层级最大开仓数 maxShort1 = 3 maxShort2 = 3 maxShort3 = 2 // 可根据需求设置其他层级 // ... 继续定义maxShort4到maxShort10 // 各层级订单标识 short1Id = "Short1" short2Id = "Short2" // ... 继续定义short3Id到short10Id
步骤2:统计层级当前持仓数
通过遍历strategy.opentrades,统计对应entryid的订单数量,得到该层级当前的实际持仓数:
// 封装统计持仓数的函数,避免重复代码 getPositionCount(entryId) => count = 0 for i = 0 to strategy.opentrades - 1 if strategy.opentrades.entryid(i) == entryId count += 1 count // 统计各层级当前持仓数 short1Current = getPositionCount(short1Id) short2Current = getPositionCount(short2Id) // ... 继续统计Short3到Short10的持仓数
步骤3:修改开仓逻辑
在原有开仓条件基础上,增加当前持仓数小于层级最大开仓数的判断:
// Short1开仓逻辑(替换你原有的Short1代码) if (short1Condition) // short1Condition是你原有的价格触发条件 and short1Current < maxShort1 strategy.entry(short1Id, strategy.short) // Short2开仓逻辑(替换你原有的Short2代码) if (short2Condition) and short2Current < maxShort2 strategy.entry(short2Id, strategy.short) // ... 替换Short3到Short10的开仓逻辑,加入对应层级的持仓数判断
步骤4:平仓逻辑(保持原有逻辑即可)
平仓时无需额外修改计数,因为每次开仓前都会重新统计当前持仓数,确保数据实时准确。如果使用strategy.exit或strategy.close,只要指定对应层级的entryid即可:
// Short1平仓示例 if (closeShort1Condition) strategy.exit("Exit " + short1Id, short1Id) // 第二个参数指定要平仓的订单标识
关键注意事项
- 确保每个层级的订单
entryid唯一,避免统计时混同不同层级的持仓。 - 遍历
strategy.opentrades统计持仓的方式,能自动处理部分平仓、强制平仓等特殊情况,比手动维护计数器更可靠。
内容的提问来源于stack exchange,提问作者Victor Vasquez
相关产品推荐
相关产品推荐

