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

股票交易逻辑Python代码报错:entry_price未定义求助

错误原因分析
  1. 变量未初始化:entry_price仅在long & long_con条件满足时才会被赋值。如果代码先触发了short退出条件(此时还从未进入过长仓),entry_price根本不存在,直接导致NameError。
  2. 循环逻辑错误:使用while循环完全不合理——当前行的条件不会在循环内更新,一旦条件为真会无限循环卡死程序。
  3. 收益计算公式错误:原公式((exit_price - entry_price)/entry_price -1)*100会得到错误的收益率,正确的百分比收益应该是((exit_price - entry_price)/entry_price)*100或((exit_price/entry_price)-1)*100。
  4. 打印内容错误:df.index会输出整个DataFrame的索引,而不是当前交易行的索引。
修正后的代码
# 初始化持仓状态和入场价变量
in_position = False
entry_price = None

for index, row in df.iterrows():
    # 前100行跳过计算
    if index < 100:
        continue
        
    # 定义80/20蜡烛形态和市场时机条件
    candle_range_ratio = (row['close'] - row['low']) / (row['high'] - row['low'])
    long_signal = candle_range_ratio < 0.2
    exit_signal = candle_range_ratio > 0.8  # 重命名为exit_signal更清晰
    long_con = row['close'] <= 1.05 * row['100SMA']
    
    # 未持仓时,检查是否满足入场条件
    if not in_position:
        if long_signal and long_con:
            entry_price = row['close']
            in_position = True
            print(f"[{index}] 入场,入场价: {entry_price}")
    # 持仓时,检查是否满足出场条件
    else:
        if exit_signal:
            exit_price = row['close']
            # 计算正确的百分比收益
            rt = ((exit_price - entry_price) / entry_price) * 100
            print(f"[{index}] 入场价: {entry_price} | 出场价: {exit_price} | 收益率: {rt:.2f}%")
            # 重置持仓状态
            in_position = False
            entry_price = None
关键改进点
  • 添加in_position变量跟踪持仓状态,确保只有在持仓时才会触发出场逻辑
  • 提前初始化entry_price并在出场后重置
  • 修正收益计算公式,保留两位小数提升可读性
  • 重命名变量(如short改为exit_signal)让逻辑更清晰
  • 使用当前行的index打印交易时间点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:25:20