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

如何仅在满足退出条件且返回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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:59:53