OKX 拉取 BTC 日K 2026-09-27

课程4 · 03 OKX 拉取 BTC 日K(环境变量代理版)
运行前先设置代理环境变量,端口示例为 10090

运行方式 · 环境变量代理

# 每次新开 PowerShell 窗口都要先设这两行(端口就是 10090) $env:HTTPS_PROXY = "http://127.0.0.1:10090" $env:HTTP_PROXY = "http://127.0.0.1:10090" # 再跑脚本 cd C:\text\karalianghua\课程2 python .\0403修改版.py
将 10090 替换为你的代理软件 HTTP 端口,常见 7890 / 7891 / 10809。

自检 · 环境 & 依赖

Python 版本 & 解释器路径
ccxt 版本
pandas 版本
代理读取状态

1. 环境与依赖检查

import os, sys, platform SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) os.chdir(SCRIPT_DIR) print('=' * 64) print('课程4 · 03 OKX 拉取 BTC 日K(环境变量代理版)') print('=' * 64) print(f'当前目录:{SCRIPT_DIR}') # 环境检查 print(f'\n[1/2] 环境检查') print(f' Python: {platform.python_version()}') # 依赖检查 try: import ccxt print(f' ✅ ccxt: {ccxt.__version__}') except ImportError: print(f' ❌ ccxt 未安装。请执行:pip install ccxt pandas') sys.exit(1) try: import pandas as pd print(f' ✅ pandas: {pd.__version__}') except ImportError: print(f' ❌ pandas 未安装。请执行:pip install ccxt pandas') sys.exit(1)

2. 配置 ccxt + 从环境变量读代理

exchange = ccxt.okx() # 想换交易所改这一行:ccxt.binance() / ccxt.coinbase() exchange.timeout = 60000 # ★ 方案 3 的核心:从环境变量读代理,填进 exchange.proxies PROXY = os.environ.get('HTTPS_PROXY') or os.environ.get('HTTP_PROXY') if PROXY: exchange.proxies = { 'http': PROXY, 'https': PROXY, } print(f' ✅ 已从环境变量读取代理:{PROXY}') else: print(f' ⚠️ 未检测到 HTTPS_PROXY / HTTP_PROXY 环境变量') print(f' 将直连 OKX(国内大概率超时)') print(f' 已配置 timeout:{exchange.timeout} ms')

3. 拉取数据 & 保存 CSV

try: data = exchange.fetch_ohlcv('BTC/USDT', '1d', limit=10) except Exception as e: print(f'\n❌ 请求失败:{type(e).__name__}') print(f' {str(e)[:300]}') print(f'\n排查清单:') print(f' 1) 代理软件是否开启?') print(f' 2) 环境变量 HTTPS_PROXY 是否设了?当前值:{PROXY or "(空)"}') print(f' 3) 端口号对吗?') print(f' 4) 出口 IP 不能是美国(OKX 封美国 IP)') sys.exit(1) if not data: print(f'\n❌ 拉到了空数据,检查交易对/周期') sys.exit(1) df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) df['date'] = pd.to_datetime(df['timestamp'], unit='ms') print(f'\n成功拉取 BTC/USDT 最近 {len(df)} 根日K:') print(df[['date', 'open', 'high', 'low', 'close', 'volume']].to_string(index=False)) # 保存 CSV csv_path = os.path.join(SCRIPT_DIR, 'btc_usdt_1d.csv') df.to_csv(csv_path, index=False) print(f'\n✅ 已保存:{csv_path}') print(f'\n💡 时区提醒:OKX 日K时间是 UTC 0 时区,北京时间是 UTC+8')
时区提醒:OKX 日K时间是 UTC 0 时区,北京时间是 UTC+8。