OKX 拉取 BTC 日K
课程4 · 03 OKX 拉取 BTC 日K(环境变量代理版)
运行前先设置代理环境变量,端口示例为 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()
exchange.timeout = 60000
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_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。