For循环嵌套While循环后无法继续迭代的技术问题咨询
问题诊断与修复方案
嘿,这个问题其实很常见——你踩了变量作用域和初始化时机的坑!
问题根源
你在for循环外部定义了date = 1649196000000,当第一个symbol(ETH/USDT)的while循环跑完时,date已经被更新到大于now的数值了。等for循环迭代到下一个symbol(比如BTC/USDT)时,date <= now的条件直接不成立,while循环根本不会执行,所以后续的symbol完全没机会拉取数据。
修复后的代码
只需要把date的初始化移到for循环内部,让每个symbol都从初始日期开始拉取数据:
import ccxt from datetime import datetime import pandas as pd import numpy as np exchange = ccxt.binance({ 'enableRateLimit': True }) now = int(round(datetime.timestamp(datetime.now())*1000)) data = [] symbols = ['ETH/USDT', 'BTC/USDT', 'LTC/USDT'] # 把date的初始化移到for循环内部,每个symbol都重置初始日期 for symbol in symbols: date = 1649196000000 while date <= now: ohlcv = exchange.fetch_ohlcv(symbol, '1d', date, 20) data.append(ohlcv[0]) print(symbol) print(data) # 更新date变量 date = data[-1][0] date += 86400000
额外优化建议
- 可以把
print(data)改成只打印当前新增的条目,避免数据增多后输出过于臃肿:print(f"新增数据: {ohlcv[0]}") - 最后将
data转为DataFrame时,指定列名并转换时间戳会更直观:df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms') print(df)
内容的提问来源于stack exchange,提问作者timmy
相关产品推荐
相关产品推荐

