在Pine Script中如何保存math.min()/array.min()价格以触发延迟交易?
问题解答
核心需求拆解
- 识别特定蜡烛形态(第3根K线时,判断前两根为「阳线+阴线」)后,记录这两根K线最低价的最小值作为入场触发价
- 算法需持续等待市价跌破该触发价再执行做空入场,而非仅在形态出现后的下一根K线触发
- 替代当前用数组存储最低价的复杂逻辑,寻求更简洁的实现方式
简化实现方案
你当前用数组的方式完全没必要,直接用两个全局变量分别保存触发价和形态识别状态即可,无需维护数组。核心逻辑如下:
- 识别到目标形态且无持仓时,记录触发价并标记形态已识别
- 只要形态标记有效且无持仓,就持续检查当前价格是否跌破触发价,满足条件则入场
- 入场后重置状态,避免重复触发
修改后的代码:
//@version=5 strategy("Entry Price", overlay=true) var float trigger_price = na // 存储形态对应的入场触发价 var bool pattern_detected = false // 标记是否已识别到目标蜡烛形态 // 识别目标形态:前两根K线为阳+阴,且当前无持仓 if strategy.position_size == 0 and close[2] > open[2] and close[1] < open[1] trigger_price := math.min(low[2], low[1]) pattern_detected := true // 绘制触发价参考线 plot(pattern_detected ? trigger_price : na, title='Entry', color=color.new(color.purple, 0), style=plot.style_stepline_diamond) // 价格跌破触发价、已识别形态且无持仓时,执行做空入场 if strategy.position_size == 0 and pattern_detected and close <= trigger_price strategy.entry("Go Short", strategy.short, qty=1, oca_type=strategy.oca.cancel) pattern_detected := false // 入场后重置标记 trigger_price := na
方案优势
- 去掉了冗余的数组操作,代码更简洁,运行效率更高
- 用
pattern_detected标记明确控制触发逻辑,避免无效判断 - 入场后自动重置状态,逻辑清晰,不会出现重复触发的问题
内容的提问来源于stack exchange,提问作者Nishi
相关产品推荐
相关产品推荐

