目录导读
- 准备工作:币安账户注册与安全设置
- API密钥申请:一步步教你获取API Key和Secret Key
- Python环境搭建:安装必要库与开发工具
- 交易脚本编写:从获取行情到自动下单
- 风险控制:常见错误与资金管理建议
- 问答环节:解答高频疑问
准备工作:先搞定币安账户
在开始写代码之前,你得有个正常运行的币安账户,如果还没注册,先去官网搞定注册和KYC认证,注意一点:完成二级验证(2FA),这不仅是平台要求,也是保护你API安全的第一道防线。

说实话,很多人第一步就栽在这里——直接拿主账户开API,结果权限给太大,后来出事了才后悔,我的建议是:单独开一个子账户专门跑交易脚本,资金单独划转,风险隔离。
API密钥申请:别踩这些坑
登录币安后,按照下面步骤操作:
- 右上角头像 → API管理
- 输入标签名称(Python交易机器人”)
- 系统会要求输入2FA验证码
- 成功后会生成 API Key 和 Secret Key
重点来了:
- Secret Key只显示一次,赶紧复制保存到安全地方
- 权限设置上,只勾选“交易”和“读取”权限,别勾提现权限
- IP白名单一定要设置,只允许你的服务器IP访问
有个朋友就是没设IP白名单,API泄露后被别人扫到,账户被用来刷单,亏了不少手续费,所以IP白名单不是可选项,是必选项。
Python环境搭建:三行代码搞定
在终端执行:
pip install python-binance pandas ta
python-binance:币安官方推荐的Python SDKpandas:处理K线数据ta:技术指标计算库
装好后写个测试脚本验证连接:
from binance.client import Client api_key = "你的API_KEY" api_secret = "你的SECRET_KEY" client = Client(api_key, api_secret) # 测试连接 print(client.get_account_status())
如果返回状态信息,恭喜你,已经成功连接上币安API接口了。
交易脚本编写:从简单到复杂
1 获取实时行情
def get_btc_price():
ticker = client.get_symbol_ticker(symbol="BTCUSDT")
return float(ticker['price'])
print(f"当前BTC价格: {get_btc_price()}")
2 获取K线数据
klines = client.get_klines(
symbol="BTCUSDT",
interval=Client.KLINE_INTERVAL_1HOUR,
limit=100
)
把返回的数据转换成DataFrame,就可以画K线图或者计算指标了。
3 简单策略:均线交叉
import pandas as pd
def ma_strategy(symbol="BTCUSDT"):
klines = client.get_klines(symbol=symbol, interval="15m", limit=50)
df = pd.DataFrame(klines, columns=['time','open','high','low','close','volume','close_time','qav','num_trades','taker_base_vol','taker_quote_vol','ignore'])
df['close'] = df['close'].astype(float)
df['ma5'] = df['close'].rolling(5).mean()
df['ma20'] = df['close'].rolling(20).mean()
if df['ma5'].iloc[-1] > df['ma20'].iloc[-1] and df['ma5'].iloc[-2] <= df['ma20'].iloc[-2]:
return "买入信号"
elif df['ma5'].iloc[-1] < df['ma20'].iloc[-1] and df['ma5'].iloc[-2] >= df['ma20'].iloc[-2]:
return "卖出信号"
else:
return "无信号"
4 自动下单(小心使用)
def place_order(symbol="BTCUSDT", side="BUY", quantity=0.001):
try:
order = client.create_order(
symbol=symbol,
side=side,
type=Client.ORDER_TYPE_MARKET,
quantity=quantity
)
print(f"下单成功: {order}")
return order
except Exception as e:
print(f"下单失败: {e}")
强烈建议先跑模拟测试,而不是直接上真金白银,你可以用小额USDT测试,比如一次只买10 USDT的币,看看逻辑能不能跑通。
风险控制:别让脚本把你坑了
写交易脚本最容易犯的错:
- 没有止损逻辑:价格暴跌时脚本还在买买买,直接爆仓
- API频率超限:币安对API请求有频率限制,每秒最多10次请求,超了会被封IP
- 资金管理混乱:每次下单仓位固定比例,不要全仓
建议加上这个风控:
import time
def safe_request(func):
"""限制请求频率"""
time.sleep(0.1) # 每秒最多10次
return func()
def stop_loss(position_price, current_price, loss_percent=5):
"""硬止损"""
loss = (current_price - position_price) / position_price * 100
if loss <= -loss_percent:
print(f"触发止损,亏损{loss:.2f}%")
# 执行平仓逻辑
问答环节
Q1:API Key泄露了怎么办? A:立刻登录币安后台删除旧API,生成新的,如果发现账户有异常交易,第一时间联系客服并冻结账户。
Q2:为什么我的脚本下单总是失败?
A:常见原因有三个:①交易对精度不对(比如BTC最小下单量是0.0001)②资金不足③API权限没开交易,建议先用 client.get_symbol_info('BTCUSDT') 查看交易规则。
Q3:Python脚本一直报错“SignatureException”是什么情况?
A:时间戳同步问题,检查服务器时间是否与标准时间一致,运行 ntpdate pool.ntp.org 同步时间,另外确保API Key和Secret Key复制时没多空格。
Q4:可以同时跑多个交易对吗?
A:可以,但要控制并发数,建议用异步编程(如 asyncio)或者队列管理,避免触发频率限制。
Q5:回测和实盘为什么差很多? A:滑点、手续费、网络延迟是三大杀手,建议回测时考虑0.1%的滑点成本,实盘用小资金先验证策略稳定性。
写好一个交易脚本不难,难的是让它持续稳定盈利,建议先花一个月跑模拟回测,把策略逻辑打磨清楚再上实盘。没有完美的交易策略,只有严格的风险管理,慢慢来,比较快。
标签: Python交易脚本