构建自动化交易机器人框架:TradingView 与 Python 集成指南

·

本文将引导你一步步构建一个完整的自动化交易机器人框架,整合 TradingView 警报、Python 后端与云部署平台。无论你是量化交易新手还是希望优化现有策略的开发者,本指南都将提供清晰的技术路径。

核心组件与工作原理

该交易机器人框架主要由三部分组成:

其工作流程为:当预设的市场条件被触发时,TradingView 会向配置的 webhook URL 发送一个包含交易信号的 HTTP 请求。部署在云端的 Python 应用接收到请求后,进行验证并调用交易所的 API 执行买卖操作。

搭建 TradingView 警报 Webhook

首先,我们需要在 TradingView 上创建一个基于 Pine Script 的策略并设置警报。

创建与回测交易策略

  1. 登录 TradingView,打开“图表”功能。
  2. 选择你想要交易的标的,例如 ADAUSD。
  3. 在底部面板中,选择“Pine 编辑器”。
  4. 将你的策略代码粘贴到编辑器中。以下是一个简单的移动平均线交叉策略示例(请注意,此策略仅用于演示,不构成投资建议):
//@version=4
strategy("Simple SMA Strategy", overlay=true)

fast_ma = sma(close, 2)
slow_ma = sma(close, 5)
plot(fast_ma, color=color.green, linewidth=1)
plot(slow_ma, color=color.yellow, linewidth=3)

buy_condition = crossover(fast_ma, slow_ma)
sell_condition = crossunder(fast_ma, slow_ma)

if buy_condition
    strategy.entry("Buy", strategy.long)
if sell_condition
    strategy.close("Buy")
  1. 点击“添加到图表”,然后切换到“策略测试器”面板进行回测,评估策略表现。

配置警报与 Webhook 消息

  1. 点击图表上的警报图标,创建新警报。
  2. 在“条件”下拉框中,选择你刚创建的策略名称。
  3. 在“警报消息”中,使用 JSON 格式配置 webhook 负载(Payload),确保包含一个唯一的通行短语(Passphrase)以供后端验证:
{
  "passphrase": "your_secret_passphrase_here",
  "time": "{{timenow}}",
  "exchange": "{{exchange}}",
  "ticker": "{{ticker}}",
  "bar": {
    "time": "{{time}}",
    "open": {{open}},
    "high": {{high}},
    "low": {{low}},
    "close": {{close}},
    "volume": {{volume}}
  },
  "strategy": {
    "position_size": {{strategy.position_size}},
    "order_action": "{{strategy.order.action}}",
    "order_contracts": {{strategy.order.contracts}},
    "order_price": {{strategy.order.price}},
    "order_id": "{{strategy.order.id}}",
    "market_position": "{{strategy.market_position}}",
    "market_position_size": {{strategy.market_position_size}}
  }
}
  1. 保存警报。至此,当策略条件触发时,TradingView 将会向你指定的 webhook 地址发送 POST 请求。

配置交易所 API 密钥

本示例使用 Binance US 交易所,其他支持 API 的交易所(如 Coinbase Pro, Kucoin 等)流程类似。

  1. 登录你的 Binance US 账户。
  2. 点击邮箱地址下拉菜单中的“API 管理”。
  3. 为你的 API 密钥创建一个标签名称,然后点击“创建”。
  4. 到你邮箱中确认创建 API 密钥的邮件。
  5. 保存生成的 API KeySecret Key。Secret Key 只显示一次,请妥善保管。这两个密钥将在后续步骤中用于环境变量配置。

设置本地开发环境

我们将使用 Python 和 Flask 框架来构建 webhook 服务器。

项目初始化与依赖安装

  1. 使用 PyCharm Community Edition 或你喜欢的任何 IDE 创建一个新的 Python 项目,建议使用虚拟环境。
  2. 在项目根目录创建 requirements.txt 文件,并添加以下依赖:
flask
gunicorn
python-binance
  1. 在终端中运行 pip install -r requirements.txt 安装所有依赖。

核心应用代码

创建 app.py 文件,这是后端服务器的核心。代码如下:

import json, os
from binance.client import Client
from binance.enums import *
from flask import Flask, request

app = Flask(__name__)
# 初始化 Binance 客户端,从环境变量读取 API 密钥
client = Client(os.environ.get('API_KEY'), os.environ.get('API_SECRET'), tld='us')

def create_order(side, quantity, symbol, order_price, passphrase, order_type=ORDER_TYPE_LIMIT, timeInForce=TIME_IN_FORCE_GTC):
    try:
        print(f"Signal: {passphrase} {symbol} {side} {quantity} @ {order_price}")
        # 在实际部署前,以下行被注释以避免真实交易。正式使用时取消注释。
        # order = client.create_order(
        #    symbol=symbol, side=side, type=order_type,
        #    quantity=quantity, timeInForce=timeInForce, price=order_price
        # )
        # print(f"Order executed: {order}")
        return True
    except Exception as e:
        print(f"Order failed: {e}")
        return False

@app.route('/')
def home():
    return "Trading Bot Webhook Server is Running!"

@app.route('/webhook', methods=['POST'])
def webhook():
    # 解析接收到的 JSON 数据
    data = json.loads(request.data)
    # 验证通行短语,确保请求来源可信
    if data['passphrase'] != os.environ.get('WEBHOOK_PASSPHRASE'):
        return {"code": "error", "message": "Invalid passphrase"}

    # 提取交易信号参数
    side = data['strategy']['order_action'].upper()
    quantity = data['strategy']['order_contracts']
    ticker = data['ticker'].upper()
    order_price = data['strategy']['order_price']

    # 调用下单函数
    order_response = create_order(side, quantity, ticker, order_price, data['passphrase'])
    if order_response:
        return {"code": "success", "message": "Order executed."}
    else:
        return {"code": "error", "message": "Order failed."}

配置环境变量

为了安全地存储敏感信息,我们需要设置环境变量。

  1. 在 Windows 搜索栏中键入“环境变量”并选择“编辑系统环境变量”。
  2. 在“用户变量”部分,点击“新建”,添加以下变量:

    • API_KEY: 你的 Binance API Key。
    • API_SECRET: 你的 Binance Secret Key。
    • WEBHOOK_PASSPHRASE: 你在 TradingView 警报中设置的通行短语。

本地测试

  1. 在终端中运行 flask run 启动本地服务器。
  2. 使用 Insomnia 或 Postman 等 REST 客户端测试 /webhook 端点。发送一个模拟的 POST 请求到 http://127.0.0.1:5000/webhook,Body 为 JSON 格式,包含与你的警报设置匹配的通行短语和交易数据。
  3. 观察终端输出和客户端响应,确保没有错误。

部署到云端平台

为了使交易机器人 24/7 运行,我们需要将代码部署到云平台。

部署准备文件

  1. Procfile:创建一个名为 Procfile(无扩展名)的文件,内容如下:

    web: gunicorn app:app

    此文件告知云平台如何启动你的应用。

  2. Git:初始化一个 Git 仓库 (git init),并将你的代码文件(app.py, requirements.txt, Procfile)添加进去。

部署流程

  1. 注册一个云平台账户。
  2. 在平台 dashboard 中创建一个新的应用。
  3. 在应用的“Settings”或“Config Vars”部分,添加你在本地设置过的环境变量(API_KEY, API_SECRET, WEBHOOK_PASSPHRASE)。
  4. 按照平台的部署指南,通常是通过 Git 将代码推送到远程仓库来完成部署。例如:

    git add .
    git commit -m "Initial deployment"
    git push <remote-repository> master
  5. 部署成功后,你的应用将获得一个类似 https://your-app-name.cloudplatform.com 的 URL。

故障排查

部署后常见问题及解决方法:

始终使用平台的日志命令(如 heroku logs --tail)来实时查看错误信息,这是调试的最有效手段。

上线与监控

完成所有测试后,即可将机器人投入实盘运行。

  1. 取消注释下单代码:在 app.py 中,找到被注释的 client.create_order 行,取消注释以启用真实交易。
  2. 提交更新:将最新的代码更改提交并推送到云端仓库。
  3. 更新 TradingView Webhook URL:将你在 TradingView 警报中设置的 Webhook URL 更指向你的云端应用地址,例如:https://your-app-name.cloudplatform.com/webhook
  4. 密切监控:在最初阶段,密切关注平台的日志输出和你的交易所账户,确保订单按预期执行。

👉 获取更多自动化交易策略与工具

优化与进阶建议

一个基础的机器人搭建完成后,可以考虑以下方面进行优化:

常见问题

这个交易框架需要多少编程知识?

你需要具备基础的 Python 编程知识,了解 HTTP 请求和 JSON 数据格式。对于前端(TradingView Pine Script)部分,有编程经验会更容易上手,但基础的策略修改可以通过学习示例代码完成。

除了 Binance,还能支持其他交易所吗?

可以。本框架的核心逻辑是通用的。你只需要将 python-binance 库替换为其他交易所的官方 Python SDK(如 ccxt 库支持多家交易所),并调整相应的 API 调用格式即可。

云平台提供的免费套餐足够吗?

对于交易频率不高的个人策略,云平台的免费套餐通常足够使用。但需注意免费套餐可能有睡眠机制,即一段时间无请求后应用会休眠,可能导致错过信号。对于关键交易,建议使用付费套餐以保证应用始终在线。

如何确保我的 API 密钥和资金安全?

安全是重中之重。切勿将你的 API 密钥或敏感信息硬编码在代码中或上传到 GitHub 等公共仓库。始终使用环境变量。在交易所设置 API 密钥时,仅授予“交易”权限,切勿授予“提现”权限。这样即使密钥泄露,黑客也无法转走你的资产。

策略本身不盈利怎么办?

这个框架只是一个自动化执行工具,它无法将一个亏损策略变成盈利策略。盈利能力完全取决于你部署的交易策略本身。你需要独立地进行策略研究、回测和优化。

部署后收不到请求怎么办?

首先检查云平台的应用日志,看是否有请求到达。如果没有任何请求记录,问题可能出在 TradingView 警报设置上:检查 Webhook URL 是否正确,以及警报是否确实被触发(可以设置警报同时发送邮件进行确认)。