You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:02:07