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

TradingView Pine Script:金字塔加仓前校验前次入场价格问题求助

解决Pine Script金字塔加仓中前次入场价格无法保留的问题

嘿,我太懂你这个痛点了!在Pine Script里普通变量每次运行到新K线都会被重置,这就是为啥你的lastBuy每次都回到0的原因。别慌,用var关键字声明持久化变量就能搞定——它会在脚本运行全程保留变量值,不会随K线刷新重置。

下面给你一套完整的实现思路和代码示例:

核心要点

  • 用var声明需要跨K线保存的变量(比如前次买入价、加仓次数)
  • 设定加仓价格折扣阈值(比如比前次买入价低2%才加仓)
  • 区分第一次买入和后续加仓的逻辑
  • 平仓时重置持久化变量,为下一轮交易做准备

完整代码示例

//@version=5
strategy("金字塔加仓摊平策略", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.1)

// 输入参数
float discountPerc = input.float("加仓折扣百分比", title="加仓折扣百分比", defval=2.0, minval=0.1, maxval=10.0, tooltip="本次买入价需比前次低该百分比才允许加仓")
int maxAddTimes = input.int("最大加仓次数", title="最大加仓次数", defval=3, minval=1, maxval=5)

// 持久化变量:跨K线保留值
var float lastBuyPrice = na  // 记录前次买入价格,初始为na表示未持仓
var int buyTimes = 0         // 记录已加仓次数

// 入场条件:第一次买入 或 满足折扣条件且未达最大加仓次数
enterCondition = na(lastBuyPrice) or (close <= lastBuyPrice * (1 - discountPerc/100) and buyTimes < maxAddTimes)

// 买入逻辑
if (enterCondition)
    strategy.entry("Buy", strategy.long)
    // 更新持久化变量:记录当前买入价,加仓次数+1
    lastBuyPrice = strategy.position_avg_price
    buyTimes += 1
    label.new(bar_index, low, str.tostring(buyTimes) + "次买入", color=color.green, textcolor=color.white)

// 平仓条件:这里用简单的止盈止损示例,你可以换成自己的逻辑
exitCondition = close >= lastBuyPrice * 1.05 or close <= lastBuyPrice * 0.95
if (exitCondition)
    strategy.close("Buy")
    // 重置持久化变量,准备下一轮交易
    lastBuyPrice := na
    buyTimes := 0

// 图表上标记前次买入价
if not na(lastBuyPrice)
    line.new(bar_index, lastBuyPrice, bar_index+10, lastBuyPrice, color=color.red, width=2, style=line.style_dashed)

代码解释

  1. 持久化变量:var float lastBuyPrice = na和var int buyTimes = 0这两个变量不会随K线刷新重置,会一直保存到脚本停止运行。
  2. 加仓条件校验:close <= lastBuyPrice * (1 - discountPerc/100)确保本次买入价比前次低设定的百分比,同时限制了最大加仓次数避免过度加仓。
  3. 平仓重置:平仓时把lastBuyPrice设回na,buyTimes设回0,这样下一次交易可以重新开始计数。
  4. 可视化标记:用虚线标记前次买入价,用标签显示加仓次数,方便在图表上观察策略执行情况。

你可以根据自己的需求调整入场、平仓条件,以及加仓的参数,核心就是用var来保留需要跨K线的状态变量~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:48:15