如何在TradingView策略中纳入固定买卖点差且不影响固定风险比例?
解决TradingView回测点差与固定风险比例的冲突问题
核心思路
点差会增加每笔交易的实际风险暴露(止损距离+点差),导致原本按固定1%风险计算的仓位,实盘后风险超标。解决的关键是在计算仓位时,提前将点差纳入总风险点数的考量,让总风险(止损+点差)严格等于账户权益的1%。同时通过佣金设置模拟实盘点差,让回测结果更贴近实盘。
具体步骤与代码修改
1. 定义关键变量
根据你的交易品种调整以下参数:
risk_pct:固定风险比例,这里设为1%stop_loss_pips:你设置的止损点数,比如10点spread_pips:实盘的平均点差,比如2点pip_value_per_lot:每标准手每点的价值,比如欧美(EUR/USD)1标准手每点价值10美元
2. 调整仓位计算逻辑
将点差加到总风险点数中,重新计算仓位,确保总风险严格控制在1%:
// 核心参数设置 risk_pct = 1 // 固定1%风险 stop_loss_pips = 10 // 止损点数 spread_pips = 2 // 实盘点差 pip_value_per_lot = 10 // 每标准手每点价值(根据品种调整) // 计算总风险点数(止损+点差) total_risk_pips = stop_loss_pips + spread_pips // 计算允许的总风险金额 max_risk_amount = strategy.equity * (risk_pct / 100) // 计算仓位:总风险金额 / (总风险点数 × 每点价值) positionSize = max_risk_amount / (total_risk_pips * pip_value_per_lot) // 执行交易,仓位取整(可选,根据经纪商要求) strategy.entry(id="Long", direction=strategy.long, qty=math.floor(positionSize))
3. 用佣金模拟点差回测
在策略设置中,将点差换算成每手的佣金,模拟实盘的点差成本:
- 佣金类型选择
strategy.commission.cash_per_contract - 佣金金额 =
spread_pips × pip_value_per_lot(比如2点×10美元/点=20美元/标准手)
这样回测时,每笔交易会扣除对应点差的成本,结果更贴近实盘,同时仓位已经提前调整,风险始终维持在1%。
关于ECN账户的补充
ECN/raw账户确实能降低点差,缩小回测与实盘的差异,但核心还是要在仓位计算时纳入点差成本。即使使用低点点差账户,只要按照上述逻辑计算仓位,就能保证固定风险比例不受点差影响。
内容的提问来源于stack exchange,提问作者PPP
相关产品推荐
相关产品推荐

