如何利用交易所API自动下单?从零到自动交易的完整指南
开头:手动下单的时代该过去了
每天盯盘、手动挂单、盯止损、盯止盈。
一天下来,交易操作比上班还累。
如果你有固定的交易策略,比如"BTC跌破60000就买,涨到65000就卖",手动做根本跟不上。
这时候就需要API自动下单。
用代码代替你的手,24小时不休息,条件触发就执行。
今天从零开始讲,手把手带你跑通第一个自动下单脚本。
一、API是什么?为什么能自动下单?
API(Application Programming Interface)就是交易所给你的"接口"。
通过这个接口,你可以用代码做这些事:
查询账户余额
查看当前价格
挂买单/卖单
取消订单
查看历史交易
你手动在网页上点的那几个按钮,代码也能点。
区别是,代码可以一直跑,不需要你盯着。
二、获取API密钥
2.1 哪些交易所支持API?
主流交易所都支持:
| 交易所 | API文档地址 |
|---|---|
| 币安 | binance.com/en/api |
| 欧易OKX | okx.com/docs |
| Bybit | bybit.com/docs |
| Gate | gate.io/api-docs |
| Huobi | huobi.com/en-us/api |
2.2 创建API密钥步骤(以币安为例)
登录币安
进入 API Management
点击 "Create API"
设置权限:
读取权限:查询余额、行情
交易权限:下单、撤单
提币权限:⚠️ 自动下单不需要这个,建议关闭
生成 API Key 和 API Secret
保存好,之后不会再次显示
API Secret只显示一次,保存好别丢了。泄露等于别人能操作你的账户。
2.3 安全建议
不要把密钥写死在代码里
不要提交到公开仓库(GitHub)
开启IP白名单限制
只开需要的权限
定期轮换密钥

三、环境准备
3.1 安装Python
建议使用Python 3.8+。
3.2 安装依赖库
bashpip install python-binance ccxt
python-binance:币安官方Python SDKccxt:多交易所统一接口库,支持几十个交易所
3.3 选择框架
| 框架 | 优点 | 缺点 |
|---|---|---|
| python-binance | 币安官方,文档全 | 只支持币安 |
| ccxt | 多交易所,统一接口 | 部分高级功能不支持 |
| REST API直连 | 灵活度高 | 需要自己处理签名 |
新手推荐ccxt,因为切换交易所方便。
四、第一个自动下单脚本
4.1 查询余额
pythonimport ccxtexchange = ccxt.binance({ 'apiKey': '你的API_KEY', 'secret': '你的API_SECRET', 'enableRateLimit': True,})balance = exchange.fetch_balance()print(balance['USDT']['free'])4.2 查询当前价格
pythonticker = exchange.fetch_ticker('BTC/USDT')print(f"当前价格: {ticker['last']}")4.3 下限价买单
pythonorder = exchange.create_limit_buy_order( symbol='BTC/USDT', amount=0.001, price=60000,)print(f"下单成功: {order['id']}, 价格: {order['price']}")4.4 下限价卖单
pythonorder = exchange.create_limit_sell_order( symbol='BTC/USDT', amount=0.001, price=65000,)print(f"卖出单: {order['id']}")4.5 取消订单
pythonexchange.cancel_order(order_id='订单ID', symbol='BTC/USDT')
注意:不同交易所的参数名称可能不同,参考对应文档。
五、实战:价格触发自动下单
下面是一个简单的策略示例:
条件:BTC价格跌破60000,自动买入0.001个;价格涨到63000,自动卖出。
pythonimport ccxtimport timeexchange = ccxt.binance({ 'apiKey': '你的API_KEY', 'secret': '你的API_SECRET', 'enableRateLimit': True,})BUY_PRICE = 60000SELL_PRICE = 63000AMOUNT = 0.001symbol = 'BTC/USDT'position = Nonewhile True: try: ticker = exchange.fetch_ticker(symbol) current_price = ticker['last'] # 检查是否已经持有仓位 if position is None: # 没有持仓,检查是否触发买入 if current_price <= BUY_PRICE: order = exchange.create_limit_buy_order( symbol=symbol, amount=AMOUNT, price=BUY_PRICE, ) position = order print(f"买入触发!价格: {current_price}, 订单ID: {order['id']}") else: # 持有仓位,检查是否触发卖出 if current_price >= SELL_PRICE: order = exchange.create_limit_sell_order( symbol=symbol, amount=AMOUNT, price=SELL_PRICE, ) position = None print(f"卖出触发!价格: {current_price}, 订单ID: {order['id']}") time.sleep(10) # 每10秒检查一次 except Exception as e: print(f"错误: {e}") time.sleep(30)这是一个最简单的示例。实际使用中需要加上更多的风控逻辑。
六、必须加的风控逻辑
6.1 止损单
买进后如果价格跌了,不是无限扛。
python# 买入后同时挂一个止损单stop_loss_price = entry_price * 0.95 # 亏损5%止损
6.2 单笔金额限制
pythonif amount * current_price > 1000: print("单笔金额过大,跳过") continue6.3 日交易次数限制
pythonif trade_count_today >= 10: print("今日交易次数已达上限") break6.4 网络异常处理
pythonexcept ccxt.NetworkError: print("网络错误,等待重试...") time.sleep(60)6.5 日志记录
每次下单、撤单、错误都记录到文件,方便回溯。
pythonwith open('trade_log.txt', 'a') as f: f.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - {action}\n")七、常见问题
Q:API下单和手动下单有区别吗?
成交逻辑完全一样,都是发到交易所的撮合引擎。
Q:API下单会不会更快?
不一定。交易所的处理速度跟手动下单一样,延迟主要在网络。
Q:可以同时操作多个交易所吗?
可以。用ccxt切换交易所实例就行。
Q:代码跑在哪个环境?
本地电脑、服务器、云服务器都可以。但不能关机,关了脚本就停了。
Q:需要24小时开机吗?
策略需要跑的时候就得开着。可以放在云服务器上保持运行。
Q:ccxt和python-binance选哪个?
单交易所:用官方SDK(python-binance / okx-python-sdk)
多交易所:用ccxt
八、操作前检查清单
API密钥已创建,只开交易权限
提币权限已关闭
IP白名单已设置
代码在小额账户测试通过
止损逻辑已加入
日交易次数限制已设置
日志记录已开启
测试环境先跑几天再实盘
结语
API自动下单不是什么高深技术。
查余额、看价格、挂单、撤单,四个动作循环。
但能把循环跑稳、把风控做好、把异常处理好,才真正有价值。
先在小额账户上跑通,再逐步加大。别上来就all in,代码bug不认人的。
免责声明:本文为API自动交易技术教程,不构成任何投资建议。程序化交易存在代码错误、网络延迟、策略失效等风险,可能导致本金损失,请自行判断风险并承担后果。

