目录导读
- 为什么要用API交易?新手也能懂的底层逻辑
- 欧易交易所API申请全流程(附避坑指南)
- Python环境搭建与依赖库安装
- 从零开始:编写第一个行情获取脚本
- 实战进阶:自动下单与风控逻辑
- 常见问题问答(FAQ)
为什么要用API交易?新手也能懂的底层逻辑
很多人刚开始接触数字货币交易时,习惯在欧易交易所官网手动点鼠标买卖,但当你需要同时监控10个币种、设置止盈止损、或者凌晨3点行情异动时,手动操作就会变成噩梦,这时候,API(应用程序接口)就是你的“交易机器人”。

简单理解:API相当于一个“传话筒”,你的Python代码通过API告诉交易所“我要查询BTC价格”或“以市价买入0.1个ETH”,交易所再把结果返回给你的代码,整个过程不需要打开浏览器,全自动化执行。
核心优势:
- 0延迟响应:行情变化0.5秒内触发策略
- 24小时运行:睡觉时也能自动交易
- 多策略并行:同时跑网格、套利、趋势跟踪
欧易交易所API申请全流程
第一步:登录账户并进入API管理
- 打开欧易交易所官网(注意认准域名,建议收藏okeh.com.cn避免钓鱼网站)。
- 登录后,鼠标悬停在右上角头像处,点击“API”选项。
- 如果是首次使用,系统会提示“创建API密钥”。
第二步:填写API信息(关键!)
- 权限勾选建议: 只勾选“交易”和“读取”(千万别勾“提现”,否则一旦密钥泄露,资产会被转走)。
- IP绑定: 输入你电脑或服务器的公网IP,这是最重要的安全措施,如果IP不固定,可以留空(不推荐)。
- 备注名称: 随便写,Python交易机器人”。
第三步:获取密钥并保存
点击“创建”后,会得到三样东西:
- API Key(一串字符,如
abcd-efgh-1234) - Secret Key(加密密钥,只显示一次)
- Passphrase(你设置的访问密码)
⚠️ 立即截图保存! Secret Key只有这次能看到,关掉页面后就再也找不回来了。
Python环境搭建与依赖库安装
假设你已经安装了Python 3.8以上版本(如果没装,去python.org下载),打开终端或命令提示符,执行以下命令:
pip install requests pandas time json
其中requests负责发送HTTP请求,pandas用于数据处理,time用来控制请求频率(避免被交易所限流)。
小技巧: 建议使用虚拟环境(venv),避免污染全局Python包。
从零开始:编写第一个行情获取脚本
我们写一个脚本,获取BTC/USDT的当前价格,先创建文件get_price.py:
import requests
import json
import time
# 欧易交易所API端点(注意:合约和现货的URL不同)
BASE_URL = "https://www.okex.com" # 实际需替换为okeh.com.cn
# 获取BTC现货行情
def get_btc_price():
url = f"{BASE_URL}/api/v5/market/ticker?instId=BTC-USDT"
try:
response = requests.get(url, timeout=5)
data = response.json()
if data.get('code') == '0':
price = data['data'][0]['last']
print(f"当前BTC价格:{price} USDT")
return price
else:
print(f"API错误:{data.get('msg')}")
except Exception as e:
print(f"请求失败:{str(e)}")
if __name__ == "__main__":
while True:
get_btc_price()
time.sleep(5) # 每5秒查一次,避免触发限流
运行结果:
每次运行会输出类似当前BTC价格:67890.1 USDT,按Ctrl+C停止。
实战进阶:自动下单与风控逻辑
接下来编写一个完整的交易脚本:当BTC价格跌破60000时,自动买入0.01个BTC(仅演示,请自行测试)。
创建文件auto_trade.py:
import requests
import time
import hmac
import base64
import hashlib
from datetime import datetime
# 你的API密钥(务必换成你自己的!)
API_KEY = "你的APIKey"
SECRET_KEY = "你的SecretKey"
PASSPHRASE = "你的Passphrase"
# 交易所域名(注意使用正确的URL)
BASE_URL = "https://okeh.com.cn" # 已替换为指定域名
def generate_sign(timestamp, method, request_path, body=''):
"""生成签名(欧易API签名逻辑)"""
message = timestamp + method + request_path + body
mac = hmac.new(bytes(SECRET_KEY, encoding='utf8'),
bytes(message, encoding='utf-8'),
digestmod=hashlib.sha256)
d = mac.digest()
return base64.b64encode(d).decode()
def get_header(sign, timestamp):
"""生成请求头"""
header = {
'OK-ACCESS-KEY': API_KEY,
'OK-ACCESS-SIGN': sign,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': PASSPHRASE,
'Content-Type': 'application/json'
}
return header
def place_order(side, sz, instId='BTC-USDT'):
"""下市价单"""
timestamp = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
body = {
'instId': instId,
'tdMode': 'cash', # 现货交易
'side': side, # 'buy' 或 'sell'
'ordType': 'market',
'sz': str(sz) # 数量,市价单按数量买入
}
body_json = json.dumps(body)
sign = generate_sign(timestamp, 'POST', '/api/v5/trade/order', body_json)
header = get_header(sign, timestamp)
url = BASE_URL + '/api/v5/trade/order'
try:
response = requests.post(url, headers=header, data=body_json, timeout=5)
result = response.json()
if result.get('code') == '0':
print(f"✅ 下单成功:{side.upper()} {sz} {instId}")
return result['data'][0]['ordId']
else:
print(f"❌ 下单失败:{result.get('msg')}")
except Exception as e:
print(f"请求异常:{e}")
# 主策略:BTC低于60000时买入
if __name__ == "__main__":
while True:
# 获取当前价格(使用前文函数)
url = BASE_URL + '/api/v5/market/ticker?instId=BTC-USDT'
resp = requests.get(url, timeout=5)
price_data = resp.json()
if price_data['code'] == '0':
current_price = float(price_data['data'][0]['last'])
print(f"当前BTC价格:{current_price}")
if current_price < 60000:
print("🚨 触发买入条件!正在下单...")
order_id = place_order('buy', 0.01) # 买入0.01个BTC
if order_id:
print(f"订单ID:{order_id}")
break # 只执行一次,防止重复买入
else:
print("价格未满足条件,持续监控中...")
time.sleep(10) # 每10秒检查一次
使用说明:
- 运行脚本前,一定要在欧易交易所官网进行小额测试(比如先买0.001个BTC)。
- 建议把
60000改成你期望的价位。 - 安全提醒:千万不要将API密钥提交到GitHub等公开平台!
常见问题问答(FAQ)
Q1:申请API时提示“IP地址不匹配”怎么办?
A:如果你家里宽带IP会变化(比如重启路由器后IP改变),建议要么绑定一个固定IP的云服务器,要么在申请API时不勾选“IP绑定”选项,不过不绑定IP的风险较大,建议配合API Key权限设置为“仅交易”。
Q2:为什么我的脚本报错“签名无效”?
A:99%的原因是时间戳格式不对,欧易要求的时间戳格式是2024-01-01T12:00:00.123Z,请检查generate_sign函数里的时间戳生成逻辑,另一种情况是Secret Key复制时包含了空格或换行符。
Q3:市价单和限价单有什么区别?
A:市价单按当前市场最优价格立即成交,但实际成交价格可能滑点(比如快速行情时);限价单可以设定具体价格,但可能永远不会成交,新手建议先用市价单测试API连通性,再逐步尝试限价单。
Q4:脚本跑了一天后被交易所封IP了怎么办?
A:欧易交易所对API请求有频率限制(具体规则可查阅欧易交易所下载文档),解决方法是:在每次请求后加time.sleep(1),如果是高频策略,建议使用Websocket而非REST API,不要同时运行多个脚本用同一个API Key。
Q5:API密钥被泄露了如何紧急处理?
A:立刻登录欧易交易所官网,在API管理页面点击“删除”该密钥组,如果资产还在,大概率安全;如果发现异常交易,立即联系客服,养成习惯:每个API Key都限制“仅交易”且绑定固定IP。
最后提示: 数字货币交易风险极高,自动化交易更是放大盈亏的利器,本文所有代码仅供学习交流,切勿使用真实资金在未经充分测试的脚本上操作,建议先在欧易交易所下载的模拟盘(如有)或小额资金验证逻辑后,再考虑实盘部署,祝你在交易路上少踩坑,多盈利!
标签: Python交易脚本