如何仅在满足退出条件且返回profit后将buy_price重置为0?
问题分析与解决方案
你的代码无法运行的核心问题不是buy_price重置时机,而是退出条件的逻辑运算符优先级错误:and的优先级高于or,导致即使buy_price=0(无持仓),只要后面任意一个or条件满足,就会进入退出分支,触发除以0的错误。
另外,函数中return语句执行后,后续代码不会再运行,所以不可能实现“返回profit后再设置buy_price为0”,但你原代码中profit的计算是在buy_price=0之前完成的,此时buy_price还是有效的买入价,计算是准确的,重置操作不会影响profit结果。
修复后的代码
buy_price = 0 def tradeStrategy(row): global buy_price # 入场条件 if buy_price == 0 and row['ema200'] < row['ema50']: buy_price = row['close'] # 出场条件 - 修正逻辑优先级,确保仅持仓时触发 if buy_price > 0 and ( row['ADX_14'] < 20 or (row['ADX_14'] > 20 and row['DMP_14'] < row['DMN_14']) or row['ema200'] > row['ema50'] ): sell_price = row['close'] profit = 1000 * ((sell_price - buy_price) / buy_price) # 先计算准确profit,再重置持仓状态,最后返回结果 buy_price = 0 return profit btc_1m_2023['tradeStrategy'] = btc_1m_2023.apply(tradeStrategy, axis=1)
关键修改说明
- 给所有出场信号条件加上括号,确保只有
buy_price>0(持有仓位)时,才会判断后续的出场触发条件,彻底避免除以0的情况。 - 保留
buy_price=0在return之前的顺序,因为此时profit已经计算完成,重置操作不会影响结果,同时能正确重置持仓状态。
内容的提问来源于stack exchange,提问作者ZeusX
相关产品推荐
相关产品推荐

