Pine Script技术问询:设置偏离上次入场价的限价单及避免重复定价
Pine Script 限价单相关问题解答
1. 如何下达高于/低于上次入场价的限价单
要实现这类限价单,核心是先获取上次入场价格,再按需计算目标限价,最后通过strategy.entry()指定limit参数完成下单:
- 获取上次入场价:用
strategy.opentrades.entry_price()函数,结合strategy.opentrades-1定位最近一笔入场单的价格 - 计算限价:在入场价基础上加减固定值或点数(比如加10点做突破型限价单,减5点做回调型限价单)
- 执行下单:在
strategy.entry()中传入limit参数指定限价
示例代码:
//@version=5 strategy("高于/低于上次入场价的限价单", overlay=true) // 获取最近一笔入场单的价格(有持仓时生效) var float last_entry_price = na if strategy.opentrades > 0 last_entry_price := strategy.opentrades.entry_price(strategy.opentrades-1) // 示例:RSI低于30时,下达比上次入场价低5点的限价多单 rsi_val = ta.rsi(close, 14) if rsi_val < 30 and not na(last_entry_price) limit_price = last_entry_price - 5 strategy.entry("Limit Long", strategy.long, limit=limit_price)
2. 避免同一K线内限价单价格重复
你的思路方向正确,需结合品种最小变动单位调整价格,确保限价唯一,具体实现逻辑:
- 获取上次入场价后,判断当前计算的限价是否与上次入场价相等
- 若相等,给限价加/减一个最小变动单位,避免重复
示例代码:
//@version=5 strategy("避免重复限价单", overlay=true) // 自动获取当前品种的最小变动单位(适配不同品种) tick_size = syminfo.mintick // 获取最近一笔入场单价格 last_entry_price = strategy.opentrades > 0 ? strategy.opentrades.entry_price(strategy.opentrades-1) : na // 示例:以收盘价作为初始限价计算基准 target_limit = close // 避免限价与上次入场价重复 if not na(last_entry_price) and target_limit == last_entry_price // 调整限价:加一个最小变动单位(可根据策略方向选择减) target_limit := target_limit + tick_size // 示例下单逻辑:MA金叉时下达限价单 ma_short = ta.sma(close, 5) ma_long = ta.sma(close, 20) if ta.crossover(ma_short, ma_long) and not na(target_limit) strategy.entry("Limit Entry", strategy.long, limit=target_limit)
关键提示
syminfo.mintick能自动适配当前交易品种的最小变动单位,无需手动硬编码- 调整价格时可根据策略多空方向选择加或减最小变动单位,不影响原策略逻辑的同时规避重复单
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

