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

如何在Pine Script v5中添加全局平仓(Universal Exit)功能?

EMA交叉策略的时段控制与全局平仓修复

问题分析

原代码未实现15:20全局平仓的核心需求,且部分参数设置可能导致订单执行时机不符合预期:

  • 缺少收盘前强制平仓所有持仓的逻辑,仅依赖EMA交叉信号平仓;
  • process_orders_on_close = true会让订单延迟到bar收盘时执行,可能偏离预设的时间节点;
  • 仅通过session判断时段,无法精准触发15:20的平仓动作。

修改后的完整代码

//@version=5
strategy("EMA crossover strategy", overlay = true, calc_on_every_tick=true, process_orders_on_close = false)

// 定义交易时段与平仓时间
session_time = input.session("0925-1520", "交易时段")
is_in_session = time(timeframe.period, session_time)
// 精准匹配15:20的平仓时间点
is_exit_time = time("D", "1520-1520") != na

// EMA指标计算
ema10Close = ta.ema(close, 10)
ema20Close = ta.ema(close, 20)

// 多单开平仓条件
longEntryCondition = is_in_session and ta.crossover(ema10Close, ema20Close) and strategy.position_size == 0
longCloseCondition = is_in_session and ta.crossunder(ema20Close, ema10Close)

if (longEntryCondition)
    strategy.entry("Long", strategy.long)
if (longCloseCondition)
    strategy.close("Long")

// 空单开平仓条件
shortEntryCondition = is_in_session and ta.crossunder(ema10Close, ema20Close) and strategy.position_size == 0
shortCloseCondition = is_in_session and ta.crossover(ema10Close, ema20Close)

if (shortEntryCondition)
    strategy.entry("Short", strategy.short)
if (shortCloseCondition)
    strategy.close("Short")

// 全局平仓:15:20强制平仓所有持仓
if (is_exit_time)
    strategy.close_all()

// 绘制EMA线
plot(ema10Close, color = color.new(color.blue, 0), linewidth = 1)
plot(ema20Close, color = color.new(color.red, 0), linewidth = 1)

关键修改说明

  1. 调整订单执行时机:将process_orders_on_close改为false,确保信号触发时即时执行订单(若需基于收盘价交易,可改回true,但需注意时间匹配);
  2. 精准平仓时间触发:通过time("D", "1520-1520")精准捕捉每日15:20的时间点,触发全局平仓;
  3. 新增全局平仓逻辑:使用strategy.close_all()在15:20强制平仓所有多空持仓,满足收盘前平仓需求;
  4. 防止重复开仓:在开仓条件中加入strategy.position_size == 0,避免同一信号下重复开仓。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:22:48