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

如何在Pine Script中基于账户价值计算仓位大小与止损?

Pine Script 按固定风险比例自动计算仓位的实现方法

Pine Script 没有直接实现该逻辑的内置函数,但可以通过手动计算完成按账户总价值1%风险确定仓位的需求,核心是基于固定百分比风险模型推导仓位大小。

核心计算逻辑

你的需求本质是让1.5倍ATR的止损亏损等于账户总价值的1%,计算公式拆解为:

  • 单单位标的的风险金额 = 1.5倍ATR × 标的合约乘数(股票可忽略乘数,期货/外汇需对应设置)
  • 允许的总亏损金额 = 账户总价值 × 1%
  • 仓位大小 = 允许的总亏损金额 ÷ 单单位标的的风险金额

Pine Script 代码实现示例

//@version=5
strategy("RSI策略-固定风险仓位", overlay=true, initial_capital=10000)

// 输入参数
rsiLength = input.int(14, "RSI周期")
atrLength = input.int(14, "ATR周期")
accountSize = input.float(10000.0, "账户总价值")
riskPercent = input.float(1.0, "单次风险占账户比例(%)")
atrMultiplier = input.float(1.5, "ATR止损倍数")
contractMultiplier = input.float(1.0, "合约乘数(股票填1,期货填对应数值)")

// 计算指标
rsiValue = ta.rsi(close, rsiLength)
atrValue = ta.atr(atrLength)

// 计算止损幅度与单单位风险
stopLossDistance = atrValue * atrMultiplier
perUnitRisk = stopLossDistance * contractMultiplier

// 计算仓位大小(取整避免小数仓位)
positionSize = math.floor((accountSize * riskPercent / 100) / perUnitRisk)
// 确保仓位不小于1(如果风险占比过小导致计算为0)
positionSize := positionSize < 1 ? 1 : positionSize

// 交易信号
longCondition = ta.crossover(rsiValue, 25)
shortCondition = ta.crossunder(rsiValue, 75)

// 下单(使用计算出的仓位大小)
if (longCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=positionSize)

// 止盈止损(示例:止盈2%,止损1.5倍ATR)
strategy.exit("Exit Long", "Long", limit=close*1.02, stop=close-stopLossDistance)
strategy.exit("Exit Short", "Short", limit=close*0.98, stop=close+stopLossDistance)

关键注意事项

  • 实盘需根据标的调整contractMultiplier:比如外汇EUR/USD的乘数是100000,原油期货乘数是1000,股票填1即可
  • 代码中initial_capital要和你输入的accountSize保持一致,回测结果才准确
  • 可添加仓位上限限制,避免极端行情下仓位过大
  • 回测时需考虑滑点、手续费对风险的影响,可在策略设置中开启相关参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:48:19