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

Python行情涨跌比对代码始终输出下跌的列表索引问题排查

行情判断代码始终输出下跌的问题排查

核心错误点

代码逻辑失效和列表索引理解偏差有关,共有4个直接导致判断完全不生效的问题:

  • 列表定义位置错误:你把list = []写在了循环内部,每轮抓取行情时都会先创建一个全新的空列表,之前抓到的所有历史价格都会被直接清空,根本无法留存不同时间点的价格数据。
  • 列表元素数量永远不足:空列表创建后你只执行了一次append(M)操作,列表全程只有1个元素,此时你取的list[-1](列表最后一个元素)和list[0](列表第一个元素)是完全相同的当前价格,N > O的判断永远为假,自然永远走else分支输出market is down。
  • 对比索引完全错误:你原本的逻辑是对比列表末尾两个值判断走势,但实际取的是第一个和最后一个元素,在列表只有1个元素的情况下二者完全相等;就算后续留存了历史值,取第一个元素(最早的历史价格)对比也不符合“相邻两次抓取价格对比”的需求。
  • 额外逻辑bug:你往market.txt写入时连续写了两次当前价格L,后续如果要从文件读历史价格做备份对比,拿到的也是重复值;原代码没有外层持续循环,只会执行一次抓取就退出,根本不会触发10秒间隔的二次抓取;用list作为变量名会覆盖Python内置的列表类型,属于不规范写法,容易触发未知问题;用trunc()截断价格取整的话,如果两次抓取间隔价格波动小于1单位,整数部分没有变化,会无法识别涨跌。

修正后可运行代码

import time
import yfinance as yf
from math import trunc

# 价格列表定义在循环外部,持久化存储所有抓取到的价格
price_records = []
tickers = ['^N225']

# 加外层死循环实现持续抓取行情
while True:
    for ticker in tickers:
        ticker_yahoo = yf.Ticker(ticker)
        data = ticker_yahoo.history()
        last_quote = data['Close'].iloc[-1]
        current_price_raw = float(last_quote)
        # 如果不需要按整数位判断涨跌,直接去掉trunc,用current_price_raw对比即可
        current_price_trunc = trunc(current_price_raw)

        # 文件写入每次仅记录一次当前价格,用with上下文自动关文件避免资源泄漏
        with open('market.txt', 'a', encoding='utf-8') as f:
            f.write(f"{current_price_raw}\n")

        print(f"当前截断后价格:{current_price_trunc}")
        price_records.append(current_price_trunc)

        # 列表中至少存了2次抓取结果时,才做涨跌判断
        if len(price_records) >= 2:
            latest = price_records[-1]
            previous = price_records[-2] # 取倒数第二个元素,即上一轮抓取的价格,符合对比需求
            if latest > previous:
                print("market is up")
            elif latest < previous:
                print("market is down")
            else:
                print("market is flat")
    
    time.sleep(10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:06:24