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

TradingView策略开发:如何通过输入字段设置可变Savepoint并触发自动平仓?

问题描述

需要在TradingView策略中实现5个可变百分比止损止盈点(Savepoint),规则如下:

  • 自定义信号触发开仓后,设置5个百分比形式的Savepoint(如1%、2%等)
  • 价格达到入场价+对应百分比利润时,激活该Savepoint
  • 若价格回落至「已激活的最高Savepoint - 0.1%」时,自动平仓

交易示例(ETH/USDT)

Investement: 100$
Initial Crypto Price: 1000
Selling Crypto Price: 1020
Investment Fee: 0%
Exit Fee: 0,1%

Savepoint1: 0,7%
Savepoint2: 1,3%
Savepoint3: 2,2%
Savepoint4: 3,1%
Savepoint5: 4%

当当前利润为1.9%时,已激活的最高Savepoint是Savepoint2(1.3%),触发平仓的价格对应利润为1.2%(即SP2-0.1%)。

现有代码片段

// Savepoints
SP1 = input.float(title="Savepoint 1", defval=0.6, minval=0, maxval=100)
SP2 = input.float(title="Savepoint 2", defval=1.2, minval=0, maxval=100)

var entryPrice = close

if tradeSignal
    strategy.entry("Enter Long", strategy.long)
    entryPrice := close
if close >= entryPrice + (entryPrice * SP1)
    if close <= entryPrice + (entryPrice * (SP2 - 0.1))
        strategy.exit(id="SP2", from_entry = "Enter Long", limit = entryPrice*(1+(SP2-0.1)/100))
    if close <= entryPrice + (entryPrice * (SP1 - 0.1))
        strategy.exit(id="SP1", from_entry = "Enter Long", limit = entryPrice*(1+(SP1-0.1)/100))
实现方案

核心思路是跟踪已激活的最高Savepoint,当价格回落至该Savepoint减0.1%时触发平仓。具体实现步骤如下:

  1. 定义5个可配置的百分比Savepoint输入
  2. 用变量存储入场价和已激活的最高Savepoint,开仓时重置状态
  3. 实时检查价格突破情况,更新已激活的最高Savepoint
  4. 判断价格是否回落至目标平仓价,触发平仓操作

完整实现代码

@version=5
strategy("Savepoint Trailing Exit", overlay=true, default_qty_type=strategy.cash, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)

// 1. 定义5个可配置的Savepoint(百分比)
SP1 = input.float(title="Savepoint 1 (%)", defval=0.7, minval=0, maxval=100, step=0.1)
SP2 = input.float(title="Savepoint 2 (%)", defval=1.3, minval=0, maxval=100, step=0.1)
SP3 = input.float(title="Savepoint 3 (%)", defval=2.2, minval=0, maxval=100, step=0.1)
SP4 = input.float(title="Savepoint 4 (%)", defval=3.1, minval=0, maxval=100, step=0.1)
SP5 = input.float(title="Savepoint 5 (%)", defval=4.0, minval=0, maxval=100, step=0.1)

// 2. 状态变量:存储入场价、已激活的最高Savepoint百分比
var float entry_price = na
var float activated_sp = 0.0

// 自定义开仓信号示例(可替换为你的实际信号)
trade_signal = ta.crossover(ta.sma(close, 50), ta.sma(close, 200))

// 3. 开仓逻辑:重置入场价和激活状态
if (trade_signal)
    strategy.entry("Enter Long", strategy.long)
    entry_price := close
    activated_sp := 0.0  // 开仓时清空之前的激活记录

// 4. 实时更新已激活的最高Savepoint
if (strategy.position_size > 0)  // 仅持仓时执行检查
    // 从最高到最低顺序判断,确保activated_sp始终记录已触发的最高利润点
    if (close >= entry_price * (1 + SP5/100))
        activated_sp := SP5
    else if (close >= entry_price * (1 + SP4/100))
        activated_sp := SP4
    else if (close >= entry_price * (1 + SP3/100))
        activated_sp := SP3
    else if (close >= entry_price * (1 + SP2/100))
        activated_sp := SP2
    else if (close >= entry_price * (1 + SP1/100))
        activated_sp := SP1

// 5. 平仓逻辑:价格回落至已激活SP-0.1%时触发
exit_price = entry_price * (1 + (activated_sp - 0.1)/100)
if (strategy.position_size > 0 and activated_sp > 0 and close <= exit_price)
    strategy.close("Enter Long", comment="SP Trailing Exit")

// 可选:图表标记平仓价和已激活的Savepoint
plot(strategy.position_size > 0 ? exit_price : na, color=color.red, style=plot.style_linebr, title="Exit Level")
plot(strategy.position_size > 0 ? entry_price*(1+activated_sp/100) : na, color=color.green, style=plot.style_linebr, title="Activated SP")

代码说明

  • 状态重置:每次开仓时重置activated_sp为0,避免历史持仓状态干扰
  • 激活逻辑:从最高Savepoint开始检查,确保activated_sp始终记录当前已触发的最高利润点
  • 平仓触发:仅在持仓、已激活过Savepoint,且价格跌破「激活SP-0.1%」时执行平仓
  • 可视化标记:可选的绘图代码能在图表上直观展示当前的止损和平仓位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:45:28