如何在Pine Script中计算或记录上一笔交易的盈亏状态
Pine Script 实现上一笔交易盈亏记录方案
核心实现逻辑
Pine Script 内置了策略相关的原生函数可以直接获取历史交易数据,你可以通过strategy.closedtrades系列接口获取已平仓交易的盈亏信息,无需手动维护变量做交易记录。
可直接复用的实现代码
以下代码已经包含上一笔交易盈亏比例计算、开仓条件分支判断的完整逻辑,可直接基于需求调整参数:
//@version=5 strategy("上笔盈亏判断示例", overlay=true, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1) // 计算上一笔已平仓交易的盈亏比例 last_trade_profit_pct = na if strategy.closedtrades > 0 // 取最近一笔平仓交易的绝对利润 last_trade_profit = strategy.closedtrades.profit(strategy.closedtrades - 1) // 取最近一笔平仓交易进场时的持仓总市值 last_trade_entry_value = math.abs(strategy.closedtrades.size(strategy.closedtrades - 1) * strategy.closedtrades.entry_price(strategy.closedtrades - 1)) // 换算为百分比盈亏 last_trade_profit_pct = last_trade_profit / last_trade_entry_value * 100 // 判断上一笔是否亏损10%及以上 last_trade_loss_10pct = last_trade_profit_pct <= -10 // 普通状态开仓条件示例:5日均线上穿20日均线 normal_long_condition = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) // 上笔亏损10%后的特殊开仓条件示例:RSI上穿30超卖线 special_long_condition = ta.crossover(ta.rsi(close, 14), 30) // 开仓逻辑分支 if last_trade_loss_10pct strategy.entry("多单_特殊条件", strategy.long, when=special_long_condition) else strategy.entry("多单_普通条件", strategy.long, when=normal_long_condition) // 平仓逻辑示例 strategy.close("多单_普通条件", when=ta.crossunder(ta.sma(close, 5), ta.sma(close, 20))) strategy.close("多单_特殊条件", when=ta.crossunder(ta.rsi(close, 14), 70))
关键接口说明
strategy.closedtrades:返回当前已完成平仓的总交易笔数,数值大于0说明存在历史平仓记录strategy.closedtrades.profit(n):返回第n笔平仓交易的利润,索引从0开始计数,所以最近一笔平仓交易的索引为strategy.closedtrades - 1strategy.closedtrades.size(n):返回第n笔平仓交易的持仓数量strategy.closedtrades.entry_price(n):返回第n笔平仓交易的进场价格
注意事项
- 上述接口返回的利润已经扣除了策略设置的手续费、滑点成本,无需额外做抵扣计算
- 策略没有任何平仓记录时,
last_trade_profit_pct默认返回na,此时会自动走普通开仓逻辑,如果你需要调整初始状态的开仓规则,可自行修改last_trade_loss_10pct的默认值
内容的提问来源于stack exchange,提问作者oğuz bozkurt
相关产品推荐
相关产品推荐

