如何基于TradingView指标实现Binance BTCUSDT自动买卖?
TradingView + Binance BTCUSDT 自动化交易实现方案
核心逻辑
通过TradingView的Webhook警报触发Binance API,自动执行指定金额的BTC买卖操作,完全适配你设置的5分钟/30分钟等时间框架,全程无需手动干预。
1. 准备Binance API密钥
- 登录Binance后台,进入「API管理」页面创建新API
- 开启现货交易权限,关闭提现权限(提升安全性)
- 保存好生成的
API_KEY和API_SECRET,绝对不要泄露给第三方
2. 搭建Webhook处理服务
需要一个中间服务接收TradingView的信号,调用Binance API完成交易。以下是Python实现的核心代码(可直接复用):
import hmac import hashlib import requests from flask import Flask, request app = Flask(__name__) # 替换为你的Binance API信息 API_KEY = "你的API_KEY" API_SECRET = "你的API_SECRET" BINANCE_BASE = "https://api.binance.com" def sign_params(params): query_str = '&'.join([f"{k}={v}" for k, v in params.items()]) signature = hmac.new(API_SECRET.encode(), query_str.encode(), hashlib.sha256).hexdigest() params['signature'] = signature return params @app.route('/tv-webhook', methods=['POST']) def handle_webhook(): req_data = request.get_json() signal = req_data.get('signal') target_symbol = "BTCUSDT" if signal == "BUY": # 用20USDT市价买入BTC order_params = { 'symbol': target_symbol, 'side': 'BUY', 'type': 'MARKET', 'quoteOrderQty': 20, 'timestamp': requests.get(f"{BINANCE_BASE}/api/v3/time").json()['serverTime'] } signed_params = sign_params(order_params) resp = requests.post(f"{BINANCE_BASE}/api/v3/order", headers={'X-MBX-APIKEY': API_KEY}, params=signed_params) return resp.json() elif signal == "SELL": # 查询当前BTC可用余额并市价卖出 balance_params = { 'timestamp': requests.get(f"{BINANCE_BASE}/api/v3/time").json()['serverTime'] } signed_balance_params = sign_params(balance_params) balance_resp = requests.get(f"{BINANCE_BASE}/api/v3/account", headers={'X-MBX-APIKEY': API_KEY}, params=signed_balance_params) btc_free = next((item['free'] for item in balance_resp.json()['balances'] if item['asset'] == 'BTC'), '0') if float(btc_free) > 0: sell_params = { 'symbol': target_symbol, 'side': 'SELL', 'type': 'MARKET', 'quantity': btc_free, 'timestamp': requests.get(f"{BINANCE_BASE}/api/v3/time").json()['serverTime'] } signed_sell_params = sign_params(sell_params) sell_resp = requests.post(f"{BINANCE_BASE}/api/v3/order", headers={'X-MBX-APIKEY': API_KEY}, params=signed_sell_params) return sell_resp.json() return {"msg": "No available BTC to sell"} return {"msg": "Invalid signal received"} if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
3. 配置TradingView警报
- 在TradingView图表中,右键UT Bot Alerts指标,选择「添加警报」
- 分别创建两个警报:
- 触发条件:指标发出
BUY信号,时间框架选你需要的(5分钟/30分钟) - 触发条件:指标发出
SELL信号,时间框架和上面保持一致
- 触发条件:指标发出
- 每个警报的「操作」选「Webhook URL」,填入你的中间服务公网地址(比如
http://你的服务器IP:8080/tv-webhook) - 「消息」栏填入JSON内容:
{"signal": "BUY"}(SELL警报填{"signal": "SELL"})
4. 部署服务并测试
- 将代码部署到云服务器,用
gunicorn或systemd配置后台运行,保证服务持续可用 - 先用小额资金测试,确认BUY/SELL信号能正确触发交易
关键注意事项
- 务必关闭API的提现权限,降低被盗风险
- 服务器时间要和Binance服务器同步,避免签名验证失败
- 建议添加日志记录,方便排查交易异常
- 测试阶段不要用大额资金,确认流程没问题再正式运行
内容的提问来源于stack exchange,提问作者taga
相关产品推荐
相关产品推荐

