本文将引导你一步步构建一个完整的自动化交易机器人框架,整合 TradingView 警报、Python 后端与云部署平台。无论你是量化交易新手还是希望优化现有策略的开发者,本指南都将提供清晰的技术路径。
核心组件与工作原理
该交易机器人框架主要由三部分组成:
- TradingView:负责策略回测与市场条件监控,生成交易信号并触发警报。
- Python 后端:接收 TradingView 的 webhook 警报,处理交易逻辑,并通过交易所 API 执行订单。
- 云部署平台:托管 Python 代码,提供 7x24 小时不间断服务。
其工作流程为:当预设的市场条件被触发时,TradingView 会向配置的 webhook URL 发送一个包含交易信号的 HTTP 请求。部署在云端的 Python 应用接收到请求后,进行验证并调用交易所的 API 执行买卖操作。
搭建 TradingView 警报 Webhook
首先,我们需要在 TradingView 上创建一个基于 Pine Script 的策略并设置警报。
创建与回测交易策略
- 登录 TradingView,打开“图表”功能。
- 选择你想要交易的标的,例如 ADAUSD。
- 在底部面板中,选择“Pine 编辑器”。
- 将你的策略代码粘贴到编辑器中。以下是一个简单的移动平均线交叉策略示例(请注意,此策略仅用于演示,不构成投资建议):
//@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")- 点击“添加到图表”,然后切换到“策略测试器”面板进行回测,评估策略表现。
配置警报与 Webhook 消息
- 点击图表上的警报图标,创建新警报。
- 在“条件”下拉框中,选择你刚创建的策略名称。
- 在“警报消息”中,使用 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}}
}
}- 保存警报。至此,当策略条件触发时,TradingView 将会向你指定的 webhook 地址发送 POST 请求。
配置交易所 API 密钥
本示例使用 Binance US 交易所,其他支持 API 的交易所(如 Coinbase Pro, Kucoin 等)流程类似。
- 登录你的 Binance US 账户。
- 点击邮箱地址下拉菜单中的“API 管理”。
- 为你的 API 密钥创建一个标签名称,然后点击“创建”。
- 到你邮箱中确认创建 API 密钥的邮件。
- 保存生成的 API Key 和 Secret Key。Secret Key 只显示一次,请妥善保管。这两个密钥将在后续步骤中用于环境变量配置。
设置本地开发环境
我们将使用 Python 和 Flask 框架来构建 webhook 服务器。
项目初始化与依赖安装
- 使用 PyCharm Community Edition 或你喜欢的任何 IDE 创建一个新的 Python 项目,建议使用虚拟环境。
- 在项目根目录创建
requirements.txt文件,并添加以下依赖:
flask
gunicorn
python-binance- 在终端中运行
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."}配置环境变量
为了安全地存储敏感信息,我们需要设置环境变量。
- 在 Windows 搜索栏中键入“环境变量”并选择“编辑系统环境变量”。
在“用户变量”部分,点击“新建”,添加以下变量:
API_KEY: 你的 Binance API Key。API_SECRET: 你的 Binance Secret Key。WEBHOOK_PASSPHRASE: 你在 TradingView 警报中设置的通行短语。
本地测试
- 在终端中运行
flask run启动本地服务器。 - 使用 Insomnia 或 Postman 等 REST 客户端测试
/webhook端点。发送一个模拟的 POST 请求到http://127.0.0.1:5000/webhook,Body 为 JSON 格式,包含与你的警报设置匹配的通行短语和交易数据。 - 观察终端输出和客户端响应,确保没有错误。
部署到云端平台
为了使交易机器人 24/7 运行,我们需要将代码部署到云平台。
部署准备文件
Procfile:创建一个名为
Procfile(无扩展名)的文件,内容如下:web: gunicorn app:app此文件告知云平台如何启动你的应用。
- Git:初始化一个 Git 仓库 (
git init),并将你的代码文件(app.py,requirements.txt,Procfile)添加进去。
部署流程
- 注册一个云平台账户。
- 在平台 dashboard 中创建一个新的应用。
- 在应用的“Settings”或“Config Vars”部分,添加你在本地设置过的环境变量(
API_KEY,API_SECRET,WEBHOOK_PASSPHRASE)。 按照平台的部署指南,通常是通过 Git 将代码推送到远程仓库来完成部署。例如:
git add . git commit -m "Initial deployment" git push <remote-repository> master- 部署成功后,你的应用将获得一个类似
https://your-app-name.cloudplatform.com的 URL。
故障排查
部署后常见问题及解决方法:
- H14错误 (No web processes running):确保
Procfile存在且名称拼写正确,并且已通过 Git 推送到云端。 - H10错误 (App crashed):检查日志,通常是依赖项缺失(如
gunicorn未在requirements.txt中列出)或代码语法错误。 - API 错误:仔细检查环境变量是否已在云端正确配置,其值是否与本地一致。
始终使用平台的日志命令(如 heroku logs --tail)来实时查看错误信息,这是调试的最有效手段。
上线与监控
完成所有测试后,即可将机器人投入实盘运行。
- 取消注释下单代码:在
app.py中,找到被注释的client.create_order行,取消注释以启用真实交易。 - 提交更新:将最新的代码更改提交并推送到云端仓库。
- 更新 TradingView Webhook URL:将你在 TradingView 警报中设置的 Webhook URL 更指向你的云端应用地址,例如:
https://your-app-name.cloudplatform.com/webhook。 - 密切监控:在最初阶段,密切关注平台的日志输出和你的交易所账户,确保订单按预期执行。
优化与进阶建议
一个基础的机器人搭建完成后,可以考虑以下方面进行优化:
- 资金管理:在服务器端添加验证逻辑,检查账户余额是否足够执行订单,并根据可用资金动态调整订单数量。
- 精度处理:针对不同交易对的订单数量和小数点位数的限制,在服务器端(Python)或 Pine Script 端对价格和数量进行四舍五入,以避免交易所 API 报错。
- 错误处理与重试机制:增强代码的健壮性,对网络错误或API限流等情况实现重试机制。
- 通知功能:集成电报(Telegram)或邮件 API,在订单执行或发生错误时发送通知。
常见问题
这个交易框架需要多少编程知识?
你需要具备基础的 Python 编程知识,了解 HTTP 请求和 JSON 数据格式。对于前端(TradingView Pine Script)部分,有编程经验会更容易上手,但基础的策略修改可以通过学习示例代码完成。
除了 Binance,还能支持其他交易所吗?
可以。本框架的核心逻辑是通用的。你只需要将 python-binance 库替换为其他交易所的官方 Python SDK(如 ccxt 库支持多家交易所),并调整相应的 API 调用格式即可。
云平台提供的免费套餐足够吗?
对于交易频率不高的个人策略,云平台的免费套餐通常足够使用。但需注意免费套餐可能有睡眠机制,即一段时间无请求后应用会休眠,可能导致错过信号。对于关键交易,建议使用付费套餐以保证应用始终在线。
如何确保我的 API 密钥和资金安全?
安全是重中之重。切勿将你的 API 密钥或敏感信息硬编码在代码中或上传到 GitHub 等公共仓库。始终使用环境变量。在交易所设置 API 密钥时,仅授予“交易”权限,切勿授予“提现”权限。这样即使密钥泄露,黑客也无法转走你的资产。
策略本身不盈利怎么办?
这个框架只是一个自动化执行工具,它无法将一个亏损策略变成盈利策略。盈利能力完全取决于你部署的交易策略本身。你需要独立地进行策略研究、回测和优化。
部署后收不到请求怎么办?
首先检查云平台的应用日志,看是否有请求到达。如果没有任何请求记录,问题可能出在 TradingView 警报设置上:检查 Webhook URL 是否正确,以及警报是否确实被触发(可以设置警报同时发送邮件进行确认)。