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

PineScript日内交易策略订单执行问题及功能实现咨询

你的代码存在以下核心问题:

  • 仓位参数冲突:你全局配置了按账户权益100%下单,但strategy.entry里手动指定了qty=1,会覆盖全局仓位设置,导致每次只成交1股,和预期不符
  • 限价单价格逻辑错误:你用当前未收盘K线的收盘价上浮1%作为空单限价,会导致挂单价格异常漂移,应该基于触发条件的已收盘K线(前一根K线)的收盘价计算
  • 时区不匹配:印度交易时段为UTC+5:30,你回测时间用UTC时区、收盘判断用默认时区,会导致开平仓时间完全错位
  • 收盘平仓逻辑重复且不准确:你同时判断自定义session和hour==15,且未绑定印度时区,经常出现该平仓时没触发、不该平仓时乱触发的问题
  • 止盈止损价格计算时机问题:你把止盈止损价格计算放在全局作用域,空单未成交时strategy.position_avg_price是na,会导致价格计算异常
  • 未限制开仓时段:临近收盘触发条件也会开仓,还没成交就到收盘时间,容易产生隔夜持仓

修复后完整代码

strategy('Mean Reversion Shivam', overlay=true, initial_capital=100000, currency='INR', default_qty_type=strategy.percent_of_equity,
  default_qty_value=100, commission_type=strategy.commission.cash_per_order, commission_value=20, 
  close_entries_rule=strategy.close_entries_rule.all, slippage=0.1)

//  === 日内交易基础配置 ===
strategy.risk.max_intraday_filled_orders(count=1)  
// 适配印度时区(UTC+5:30)
var tz = "Asia/Kolkata"

// ===  策略参数配置 ===

// 回测时间范围
start = input.time(defval = timestamp("01 Jan 2019 09:15 +0530"), title = "回测开始时间", group = "回测配置", timezone=tz)
end = input.time(defval = timestamp("01 Dec 2021 15:30 +0530"), title = "回测结束时间", group = "回测配置", timezone=tz)
// 收盘平仓时段(默认14:55-15:30,印度时区)
posExitSession = input.session(title="收盘平仓时段", defval="1455-1530", confirm=true, group="平仓配置", timezone=tz)
// 开仓允许时段(收盘前10分钟禁止开仓)
posEntrySession = input.session(title="允许开仓时段", defval="0915-1445", confirm=true, group="开仓配置", timezone=tz)
movingAverage = input.int(title="均线周期", defval=200, minval=1,maxval=200, step=5, group="策略参数")
shortProfitPerc = input.float(title="空单止盈(%)", minval=0.0, step=0.5, defval=3, group="平仓参数") / 100
shortStopLossPerc = input.float(title="空单止损(%)", minval=0.0, step=0.5, defval=3, group="平仓参数") / 100
 


// ==== 工具函数 ====
// 判断当前K线是否在指定时段内(适配印度时区)
barInSession(sess) => time(timeframe.period, sess, tz) != na


// ==== 空单开仓条件 ===
// 判断当前是否在允许开仓时段
inEntrySession = barInSession(posEntrySession)
shortCondition = close[1] > ta.sma(close, movingAverage)
// 限价价格基于前一根已收盘K线的收盘价上浮1%
shortEntryPrice = close[1] * 1.01
strategy.entry("short", strategy.short, limit=shortEntryPrice, when=shortCondition and time > start and time < end and inEntrySession)


// === 止盈止损逻辑 === 
if (strategy.position_size < 0)
    // 持仓时才计算止盈止损价格
    shortProfitExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
    shortLossExitPrice = strategy.position_avg_price * (1 + shortStopLossPerc)
    strategy.exit(id="short", limit=shortProfitExitPrice, stop=shortLossExitPrice)

// ==== 收盘强制平仓 ===
inExitSession = barInSession(posExitSession)
strategy.close_all(when = inExitSession, comment = "收盘平仓")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:36:04