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

能否将strategy.risk.max_intraday_filled_orders()函数写入IF语句控制单日交易次数

问题解决方法

问题根源

strategy.risk.max_intraday_filled_orders() 仅对策略的实际成交订单生效,不会限制你自定义编写的alert()函数执行,所以只要validLong条件满足,哪怕策略已经触发了当日开仓上限不再下单,警报还是会正常触发。

你不需要把风险控制函数硬塞到IF判断里,只要新增一个当日交易计数逻辑,同时限制开仓和警报的触发条件即可,修改方案如下:

修改步骤

  1. 新增换日判断和当日交易计数变量,每日开盘自动重置计数
  2. 在原有开仓条件validLong中增加当日交易次数限制
  3. 触发开仓时同步更新计数,保证当日不会重复触发

修改后完整代码

//@version=4
strategy("Test" , shorttitle="Test - V2", overlay=true, initial_capital =100000, default_qty_value = 8000, pyramiding =0, default_qty_type = strategy.fixed, currency=currency.USD)

//Settings
pc_prefix        = input(title="Symbol Prefix", defval="", type=input.string, group="Settings")

//Generate Alert String
symbol = pc_prefix + syminfo.ticker
pc_entry_alert(direction, sl, tp) =>
    direction + "," + symbol + "," + "sl=" +tostring(sl) + ",tp=" + tostring(tp) 

// Get user input
pipStop          = input(title="Pip Stop Amount", defval = 10.0, type=input.float, step=1, group ="PIP Values")  
pipTP2           = input(title="Pip Take Profit 2", defval = 20.0, type=input.float, step=1, group="PIP Values")  

// 新增配置:每日最大交易次数
max_daily_trade = input(title="每日最大交易次数", defval=1, minval=1)
// 新增:判断是否为新交易日
is_new_day = change(time("D")) != na
// 新增:记录当日已触发交易次数
var int daily_trade_count = 0
// 每日开盘重置计数
if is_new_day
    daily_trade_count := 0

//Strategy maximum number of intraday trades
strategy.risk.max_intraday_filled_orders(max_daily_trade)


//Getting Previous Session High/Low 

rp_function(_symbol, _res, _src) => security(_symbol, _res, _src[barstate.isrealtime ? 1:0])

dHigh = rp_function(syminfo.ticker, "D", high[1]) 
dLow = rp_function(syminfo.ticker, "D", low[1])

plot(dHigh, color=color.blue)
plot(dLow, color=color.orange)


//Defining the Trade
goLongCondition1 = close> dHigh 

// Entry Condition for setup 新增当日交易次数限制
validLong = strategy.position_size == 0 and goLongCondition1 and daily_trade_count < max_daily_trade

// Calculate our stop distance & size for the current bar
longStopPrice = close - pipStop
longStopDistance = close - longStopPrice
longTargetPrice2 = close + pipTP2
longEntryPrice = validLong? close:na


// Save trade stop & target & position size if a valid setup is detected
var tradeLongStopPrice = 0.0
var tradeLongTargetPrice2 = 0.0
var tradeLongEntryPrice = 0.0

// Detect valid long setups & trigger alert
if validLong
    tradeLongStopPrice := longStopPrice
    tradeLongTargetPrice2 := longTargetPrice2
    tradeLongEntryPrice := longEntryPrice
    // 新增:当日交易计数+1,避免当天重复触发
    daily_trade_count := daily_trade_count + 1

//Alerts  
if validLong 
    alert_string = pc_entry_alert("buy",tradeLongStopPrice, tradeLongTargetPrice2)
    // 可根据需求修改警报频率:freq_once_per_bar_close为每根K线收盘仅触发1次,避免盘中反复触发
    alert(alert_string, alert.freq_once_per_bar_close)
    strategy.entry(id="Long", long=strategy.long)

// Exit trades whenever our stop or target is hit
strategy.exit(id="LTP1", from_entry="Long", limit=tradeLongTargetPrice2, stop=tradeLongStopPrice, when=strategy.position_size > 0, qty_percent = 100)

额外说明

  • 如果你需要当日平仓后还可再次开仓,只需要在平仓逻辑中新增daily_trade_count := daily_trade_count - 1即可
  • 代码中已将警报频率修改为每根K线收盘仅触发1次,避免盘中价格波动反复触发同个信号的警报,你可以根据自己的需求改回alert.freq_all

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:15:08