在量化交易领域,Jupyter Notebook 因其 交互式编码、实时可视化和轻量部署 成为极客首选。本文手把手教你从环境配置、API 密钥到下单、撤单、改单的全过程,帮助你在本地 5 分钟 跑通第一笔现货交易。
👉 立即测算用代码下单能省多少交易时间!
快速上手:安装与环境检查
1. 在本地启动 Jupyter Notebook
- Windows/macOS/Linux 均支持
推荐使用 Anaconda 一键安装:
conda install jupyter jupyter notebook浏览器会自动打开本地端口
http://localhost:8888。
2. 安装 python-okx 官方库
新建 Notebook 单元格运行:
!pip install --upgrade python-okx关键词:python-okx、API 库、环境配置
三步完成 API 密钥设置
- 登入 OKX 后,先切到 模拟盘 校验策略(Demo Trading)。
- 在「个人中心 ▸ API」点击 创建 API 密钥。
权限选择 读取+交易,把以下三行密钥永久保存到 Notebook 开头:
api_key = "你的APIKey" secret_key = "你的SecretKey" passphrase = "你的Passphrase"关键词:API 密钥、模拟盘、私密保管
模块导入与对象初始化
python-okx 提供了 13 个模块,核心现货交易需用到:
Trade—— 下单、撤单、改单Account—— 余额、币种信息MarketData—— 实时行情import okx.Trade as Trade import okx.Account as Account import okx.MarketData as MarketData flag = "1" # 0 实盘 1 模拟 tradeAPI = Trade.TradeAPI(api_key, secret_key, passphrase, flag=flag) accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, flag=flag) marketDataAPI = MarketData.MarketAPI(flag=flag)
先读懂行情:拉取市场与资产数据
获取可用现货交易对
inst = accountAPI.get_instruments(instType="SPOT")
print("现货交易对示例:", inst["data"][:3])查看账户余额(关键字段 cashBal/frozenBal)
bal = accountAPI.get_account_balance()
for detail in bal["data"][0]["details"]:
if detail["ccy"] in {"USDT","BTC"}:
print(detail["ccy"], "可用:", detail["cashBal"], "冻结:", detail["frozenBal"])关键词:现货交易对、账户余额、cashBal、frozenBal
下单实操:限价单 & 市价单
1. 限价单(Limit Order)
以 1 BTC = 19000 USDT 限价买入 0.01 BTC:
res = tradeAPI.place_order(
instId="BTC-USDT",
tdMode="cash",
side="buy",
ordType="limit",
px="19000",
sz="0.01"
)
print("订单号:", res["data"][0]["ordId"] if res["code"]=="0" else res["data"][0]["sMsg"])2. 市价单(Market Order)
用 100 USDT 市价买 BTC,大小单位使用报价币:
res = tradeAPI.place_order(
instId="BTC-USDT",
tdMode="cash",
side="buy",
ordType="market",
sz="100",
tgtCcy="quote_ccy",
clOrdId="my_order_003" # 自定义 ID
)关键词:限价单、市价单、tgtCcy、clOrdId
订单管理:查看 / 修改 / 撤销
| 操作 | 函数范例 |
|---|---|
| 查单 | tradeAPI.get_order(instId="BTC-USDT", ordId="4978...") |
| 撤单 | tradeAPI.cancel_order(instId="BTC-USDT", ordId="4978...") |
| 改单 | tradeAPI.amend_order(instId="BTC-USDT", ordId="4978...", newSz="0.012") |
| 列表 | tradeAPI.get_order_list() |
| 历史 | tradeAPI.get_orders_history(instType="SPOT") |
常见问题 FAQ
Q1:实盘与模拟盘如何一键切换?
A:变量 flag = "0"(实盘)或 "1"(模拟)即可全局生效,无需多次登录。
Q2:只能在限价单中调整价格吗?
A:是的。市价单无法改价,仅能改数量或撤单重下。
Q3:订单 clOrdId 可以重复吗?
A:不能。一个交易对一小时内不能重复使用同一自定义 ID,否则会报错 51000。
Q4:为何会提示 tdMode 错误?
A:现货必须设 tdMode="cash";若你的账户启用杠杆或交割,需要改成 "cross" 或 "isolated"。
Q5:Notebook 长时间挂机链接断开怎么办?
A:在代码顶部加 import os,time + time.sleep(1) 适当心跳,或使用 tmux/screen 长期运行。
Q6:本地 IP 被封?
A:OKX 对每个密钥有 每分钟 20 次 请求限制,建议本地加缓存或减少轮询频率。
进阶技巧:DataFrame 展示与可视化
把查询结果转成 Pandas:
import pandas as pd
tickers = marketDataAPI.get_tickers(instType="SPOT")["data"]
df = pd.DataFrame(tickers)[["instId","last","vol24h"]]
df.head()在 Notebook 中点击 Tab 自动补全,配合 Matplotlib/Plotly 可实时绘出盘口或资产曲线。
👉 探索更多回测模板与绘制工具!
总结
通过以上 15 个步骤,你已具备 从零到一 在 Jupyter Notebook 完成 OKX 现货交易的能力。记住三步口诀:密钥安全放首位、每次改动先跑模拟盘、订单状态随调随存。祝你策略常青,收益长虹!