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

如何使entryHigh在未持仓时保持初始值,持仓后重新计算开新仓?

解决未持仓时保留entryHigh初始值的方法

核心思路是用变量持久化和状态控制,避免无持仓时重复覆盖entryHigh的值:

  1. 用var关键字初始化entryHigh,确保它不会在每根K线重置为na
  2. 增加状态判断,控制只有在「从未设置过entryHigh」或者「已经完成一次交易(持仓后平仓)」时,才允许重新计算entryHigh

修正后的代码示例

//@version=5
strategy("Keep EntryHigh Example", overlay=true)

inSession = true // 替换成你的实际交易时段判断逻辑

// 持久化变量:仅脚本启动时初始化一次,后续K线不会重置
var float entryHigh = na
var bool canUpdateEntry = true // 控制是否允许更新entryHigh的标志

strategy.cancel_all()

if (inSession and close < open and barstate.isconfirmed)
    // 无持仓且允许更新时,才设置entryHigh
    if (strategy.opentrades == 0 and canUpdateEntry)
        entryHigh := high[0]
        canUpdateEntry := false // 设置后禁止再次更新,直到交易完成
        strategy.entry("FirstRed", strategy.long, qty=1, limit=entryHigh, stop=entryHigh)

// 持仓平仓后,重置标志允许下次重新计算
if (strategy.opentrades == 0 and not canUpdateEntry)
    if (strategy.closedtrades > 0)
        canUpdateEntry := true

代码逻辑说明

  • var float entryHigh = na:用var声明的变量不会随每根K线重置,保证值能持续保留
  • canUpdateEntry标志:
    • 初始为true,允许第一次设置entryHigh
    • 一旦设置entryHigh就把标志设为false,无持仓时不会再更新该值
    • 当交易完成(持仓平仓,strategy.closedtrades计数增加),再把标志设为true,允许下一次交易前重新计算entryHigh

简化方案(无需额外标志)

如果只需要「一旦设置entryHigh,无持仓时就不再改变,直到完成过一次交易后才允许更新」,可以直接用持仓历史判断:

//@version=5
strategy("Simplified Keep EntryHigh", overlay=true)

inSession = true

var float entryHigh = na

strategy.cancel_all()

if (inSession and close < open and barstate.isconfirmed)
    if (strategy.opentrades == 0)
        // 仅当entryHigh未设置,或已经完成过交易时,才更新
        if (na(entryHigh) or strategy.closedtrades > 0)
            entryHigh := high[0]
        strategy.entry("FirstRed", strategy.long, qty=1, limit=entryHigh, stop=entryHigh)

这个方案更简洁,利用strategy.closedtrades判断是否完成过交易,无持仓且没完成过交易时,会一直保留之前的entryHigh值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:46:08