如何制定风险回报比(R/R)交易策略?附1.5盈亏比实现代码
R/R 1.5盈亏比交易策略Pine Script修复方案
原代码核心问题
strategy.exit参数配置错误:原代码误将止损位赋值给止盈参数limit,同时混淆了退出订单和入场订单的ID绑定逻辑,导致止盈止损完全不生效- 摆动低点取值时机错误:原代码在开仓后才抓取摆动低点,无法锁定开仓前的固定低点,会出现止损位随行情漂移的问题
- 开仓条件逻辑错误:
fast and slow <=0的写法不符合语法规则,实际运行时的判断逻辑和预期的「MACD快慢线均在0轴下方」不一致 - 未做边界判断:没有校验摆动低点的有效性,无有效低点时会触发逻辑报错
修复后完整代码
//@version=4 strategy("1.5盈亏比MACD策略","T", true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=100000) // 参数配置 fastlen = input(12, "快线周期", group="MACD") slowlen = input(26, "慢线周期", group="MACD") siglen = input(9, "信号线周期", group="MACD") mcd_src = input(close, "计算源", group="MACD") _bar = input(1, "摆动低点确认K线数", minval=1, group="止损配置") rr_ratio = input(1.5, "目标盈亏比", minval=0.1, group="止盈配置") // 指标计算 [fast, slow, hist] = macd(mcd_src, fastlen, slowlen, siglen) pivot_low_stop = pivotlow(_bar, _bar) // 全局变量存储开仓点位 var float entry_lvl = na var float long_sl = na var float profit_tp = na // 开仓条件:K线确认、MACD快慢线均在0轴下、快慢线金叉、存在有效摆动低点 long_condition = barstate.isconfirmed and fast <= 0 and slow <= 0 and crossover(fast, slow) and not na(pivot_low_stop) if long_condition // 开仓瞬间锁定止损、止盈位,避免后续数值漂移 entry_lvl := close long_sl := pivot_low_stop profit_tp := entry_lvl + (entry_lvl - long_sl) * rr_ratio strategy.entry("Long", strategy.long) // 绑定止盈止损规则 strategy.exit("Exit Long", "Long", stop=long_sl, limit=profit_tp) // 点位绘图 plot(entry_lvl,"入场位", color.yellow, 2, plot.style_linebr) plot(long_sl,"止损位", color.red, 2, plot.style_linebr ) plot(profit_tp, "止盈位", color.green, 2, plot.style_linebr)
调整说明
- 开仓时一次性锁定入场价、止损摆动低点、止盈位,所有点位固定不会随后续行情变化
- 修正了止盈止损参数配置,
stop参数对应止损位,limit参数对应止盈位,同时明确绑定入场订单ID - 新增盈亏比可调参数,默认值为1.5,可根据需求自行修改
- 增加摆动低点有效性校验,避免无效信号触发开仓
内容的提问来源于stack exchange,提问作者lazy_lazar
相关产品推荐
相关产品推荐

