如何根据上一笔平仓交易盈亏调整策略的下单量
问题修复:根据上一笔平仓盈亏调整下单量
你的代码失效原因及修正方案如下:
核心问题
- 无平仓交易时的索引错误:当没有任何已平仓交易时,
strategy.closedtrades - 1等于-1,此时strategy.closedtrades.profit(-1)返回0,直接触发else分支设下单量为1,导致后续盈亏判断被初始状态干扰。 var关键字误用:var声明的变量仅初始化一次,后续不会自动更新,但你需要每次下单前重新判断盈亏,不需要用var锁定变量。
修正代码
// 存储上一笔平仓盈亏,仅初始化一次 var float last_closed_profit = 0.0 // 有已平仓交易时更新盈亏记录 if strategy.closedtrades > 0 last_closed_profit = strategy.closedtrades.profit(strategy.closedtrades - 1) // 根据盈亏设置下单量:亏损设2,盈利/无平仓设1 trade_qty = last_closed_profit < 0 ? 2 : 1 // 示例入场下单(替换为你的实际入场条件) if (ta.crossover(ta.sma(close,5), ta.sma(close,20))) strategy.entry("long", strategy.long, qty=trade_qty)
关键调整点
- 增加
strategy.closedtrades > 0判断,避免无平仓时的索引越界错误,确保只有存在有效平仓记录时才更新盈亏值。 - 用三元运算符简化下单量判断逻辑,代码更简洁清晰。
- 将盈亏记录和下单逻辑分离,确保每次触发入场时都使用最新的盈亏计算下单量。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

