请求开发TradingView至Bybit的Webhook联动交易信号脚本
TradingView与Bybit Webhook联动交易方案(自动平仓+12x杠杆)
核心逻辑:收到TradingView的多/空信号后,先平掉对应币种的现有仓位,设置12倍杠杆,再开对应方向的新仓。由于TradingView Webhook仅能发送简单请求,需要一个中间服务处理查仓、平仓、调杠杆、开仓的复杂逻辑。
一、TradingView信号配置
在你的TradingView策略/指标中添加Webhook通知,信号采用JSON格式明确操作方向和交易对:
- 做多信号:
{"action": "long", "symbol": "BTCUSDT"}
- 做空信号:
{"action": "short", "symbol": "BTCUSDT"}
注意:开启TradingView的Webhook权限,将Webhook地址指向你搭建的中间服务接口(比如http://你的服务器IP:5000/webhook)。
二、中间服务实现(Python Flask示例)
这个服务负责接收TradingView的信号,调用Bybit API完成完整交易流程。
1. 依赖安装
pip install flask python-dotenv pybit
2. 核心代码
from flask import Flask, request from pybit.unified_trading import HTTP import os from dotenv import load_dotenv load_dotenv() app = Flask(__name__) # 初始化Bybit客户端(实盘testnet设为False,测试网设为True) client = HTTP( testnet=True, api_key=os.getenv("BYBIT_API_KEY"), api_secret=os.getenv("BYBIT_API_SECRET") ) def close_existing_position(symbol): """平仓对应币种的现有仓位""" positions = client.get_positions(category="linear", symbol=symbol) if not positions['result']['list']: return pos = positions['result']['list'][0] pos_side = pos['side'] pos_size = float(pos['size']) if pos_size <= 0: return # 反向下单平仓,开启reduceOnly避免开新仓 client.place_order( category="linear", symbol=symbol, side="Sell" if pos_side == "Buy" else "Buy", orderType="Market", qty=str(pos_size), reduceOnly=True ) def set_leverage(symbol, leverage=12): """设置12倍杠杆""" client.set_leverage( category="linear", symbol=symbol, buyLeverage=str(leverage), sellLeverage=str(leverage) ) def open_new_position(symbol, action): """开新仓(多/空)""" side = "Buy" if action == "long" else "Sell" # 自定义下单量,根据你的资金规模调整 qty = "0.001" # BTCUSDT示例下单量,可修改 client.place_order( category="linear", symbol=symbol, side=side, orderType="Market", qty=qty ) @app.route('/webhook', methods=['POST']) def handle_webhook(): data = request.get_json() action = data.get('action') symbol = data.get('symbol') if not action or not symbol: return "Invalid request data", 400 # 执行交易流程:平仓→调杠杆→开新仓 close_existing_position(symbol) set_leverage(symbol) open_new_position(symbol, action) return "Trade executed successfully", 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
3. 配置API密钥
创建.env文件,存储你的Bybit API密钥(需开启交易权限):
BYBIT_API_KEY=你的Bybit API密钥 BYBIT_API_SECRET=你的Bybit API密钥
三、关键注意事项
- API权限:Bybit API密钥必须开启“交易”权限,且妥善保管,避免泄露
- 测试优先:先用Bybit测试网验证整个流程,确认逻辑无误后再切换实盘
- 下单量调整:根据自身资金情况修改代码中的
qty参数,避免过度仓位 - 异常处理:可在代码中添加
try-except块,处理API调用失败、网络异常等情况,比如:
try: close_existing_position(symbol) except Exception as e: print(f"平仓失败: {e}")
- 服务器部署:中间服务需要部署到公网可访问的服务器(比如VPS、Serverless函数),确保TradingView能发送请求到该接口
内容的提问来源于stack exchange,提问作者Bobby Heap
相关产品推荐
相关产品推荐

