欧易 · 策略实操
欧易信号策略怎么接 TradingView 警报
欧易的信号策略(Signal Bot)就是接 TradingView 警报用的:你在欧易建一个信号,拿到一条 Webhook URL 和一串 signalToken,把两样东西填进警报,警报触发时欧易按消息内容替你下单。不用自己搭后端。
边界也要一开始说清:它目前只支持永续合约,不支持现货,持仓是单向模式。下面按「欧易建信号 → TradingView 填警报 → 看懂消息字段 → 报错排查」的顺序走一遍。
它能做什么,不能做什么
下表按欧易帮助中心《交易信号策略常见问题》整理:
| 项目 | 官方说法 | 实际影响 |
|---|---|---|
| 交易品种 | 目前只支持永续合约,不支持现货;可配置杠杆 | 想拿 TradingView 信号自动买现货,这条路走不通 |
| 持仓模式 | 单向持仓:同一交易对任何时候只持有一个方向,不同交易对可以一多一空 | 同一个币同时持有多仓和空仓的做法用不上 |
| 多个交易对 | 一个信号策略可选多个交易对;设置时没选的交易对,信号会被过滤掉 | 警报发的是 ETH,策略里只选了 BTC,这条信号不会下单 |
| 一个信号挂多个策略 | 可以挂 2 个以上,都按同一信号执行,各自可设不同交易对、杠杆、保证金 | 同一条警报可以分别跑几套不同的保证金设置 |
| 模拟盘 | 支持,入口:交易 → 模拟交易 → 策略交易 → 策略广场 → 信号策略 → 创建 | 先在模拟盘把整条链路跑通,再上实盘 |
| 部分止盈、反转 | 支持分级止盈(例如 50% 和 100% 两级,在 TradingView 里编好后分别发警报);反转只要一条消息写明新方向和规模,不必先平再开 | 平仓逻辑放在 TradingView 里写,分几条警报发 |
它只按收到的消息下单,信号好坏取决于你在 TradingView 里写的逻辑。
TradingView 的 Webhook 通知不在免费 Basic 版里:它的定价页功能对照表显示 Essential 起才有(2026-09 查看,方案名会变)。另外它的帮助文档写明,Webhook 警报必须先开两步验证;只接受 80、443 端口;对方 3 秒内没处理完,这次请求就作废;送达情况在警报日志的 Webhook status 列里看。
在欧易建信号:拿到 Webhook URL 和 signalToken
实盘入口按《OKX信号策略:如何使用TradingView警报创建您的信号策略》这篇走:
- 登录欧易,进入 交易 → 策略交易 → 策略广场,选「信号策略」,点创建。
- 点「新增自定义信号」,填信号名称和简介(简介不超过 500 字符),点「创建信号」。
- 系统会自动生成这个信号的 Webhook URL 和警报信息规范。signalToken 在信号详情的「填入您的警报消息」部分。
signalToken 是这个信号的身份验证凭证,每个信号独有,要原样复制进 TradingView 的警报消息。把它当密码对待:别截图发群,也别写进公开分享的 Pine 脚本。
Webhook URL 分实盘和模拟盘两条,帮助中心原文如下:
| 环境 | Webhook URL |
|---|---|
| 实盘 | https://www.okx.com/algo/signal/trigger |
| 模拟盘 | https://www.okx.com/pap/algo/signal/trigger |
两条只差一个 /pap,肉眼很容易看漏。欧易把「历史事件里没有记录」的排查指向 URL 是否与信号配置一致,模拟盘信号配了实盘地址、或者反过来,就属于这一类。
忘了存 URL 或消息模板,在信号视图点「查看配置」,或者从策略详情里的信号配置链接进去,都能再看到。
TradingView 警报怎么填?先看你的脚本是哪一种
欧易生成信号时给了两个模板,选哪个取决于你在 TradingView 里用的是什么:
| 你手上的东西 | 用哪个模板 | 要注意的 |
|---|---|---|
| 用 strategy.* 函数的 Pine 策略 | 「TradingView - 模板」 | 策略里同时调用了 alert() 的,建警报时选「仅订单执行」 |
| 指标脚本(alertcondition()) | 「自定义 - 模板」 | 一个警报只放一种 action |
| 在图表上手动建的警报 | 「自定义 - 模板」 | 同上 |
| 自己写程序发请求 | 「自定义 - 模板」 | 固定 IP 要先找客服,见后面限制一节 |
strategy 策略脚本。官方示例用的是一个 RSI14 策略。在 TradingView 图表上选 USDT 永续合约交易对,加载策略后新建警报:
- 策略代码里如果还调用了
alert(),触发条件那里选「仅订单执行」; - 消息框里粘贴欧易生成的「TradingView - 模板」;
- 通知里勾选 Webhook URL,粘贴欧易给的地址,点创建。
模板里的 investmentType 已经写成 base,也就是按交易币数量下单,直接复制就行。信号策略会自动把交易币数量换算成合约的「张」。
指标脚本和手动警报。指标里用 alertcondition() 定义条件。官方举的例子是 MACD:金叉那个警报配 ENTER_LONG 模板,死叉那个配 EXIT_LONG 模板;图表手动警报的例子是 RSI 上穿超卖线 30 时发 ENTER_LONG。到期时间可以选「无限制警报」。
这里有一条欧易标了重要提示的规则:ENTER_LONG、EXIT_LONG、ENTER_SHORT、EXIT_SHORT 四种消息,每个警报只对应一个。不能把四个模板都塞进同一个消息输入框,开多和平多要建成两个警报。
警报建好后,回到欧易的信号页点「使用信号」,设置交易对、杠杆比例和投资资金(保证金),信号策略就创建出来了。
消息里的每个字段是什么意思
欧易的《OKX信号策略警报规范2.0》分两节:A 节给用 strategy.* 函数的 Pine 策略,B 节是「通用兼容」格式,指标、图表、手动警报都用它。两种格式兼容,欧易按收到的消息自动识别是哪一种。
B 节参数按下表理解:
| 字段 | 必填? | 填什么 |
|---|---|---|
action | 必填 | ENTER_LONG 开多 / ENTER_SHORT 开空 / EXIT_LONG 平多 / EXIT_SHORT 平空 |
instrument | 必填 | TradingView 占位符 {{ticker}},例如 BTCUSDT.P;或 OKX 的 instId,例如 BTC-USDT-SWAP |
signalToken | 必填 | 创建信号时自动生成的那串 |
timestamp | 必填 | {{timenow}},返回 UTC 时间,格式如 2023-06-01T17:38:10Z |
maxLag | 可选 | 最大可接受延迟,单位秒,取 1 到 3600 的整数 |
orderType | 可选* | market 或 limit |
orderPriceOffset | 可选** | 限价偏移,取 0 到 100,单位 % |
investmentType、amount | 可选* | 投资类型与数量 |
星号的意思:* 表示创建信号策略时没配置任何设置,这几个参数就必须写进消息;** 表示订单类型为限价时必填。
下面两条照欧易《OKX信号策略警报规范2.0》B 节示例 1:先开多 10 张,再平掉全部多仓。
{
"action": "ENTER_LONG",
"instrument": "BTCUSDT.P",
"signalToken": "你的signalToken",
"timestamp": "{{timenow}}",
"orderType": "market",
"investmentType": "contract",
"amount": "10"
}
{
"action": "EXIT_LONG",
"instrument": "BTCUSDT.P",
"signalToken": "你的signalToken",
"timestamp": "{{timenow}}",
"orderType": "market",
"investmentType": "percentage_position",
"amount": "100"
}
官方示例里数值都写成带引号的字符串,示例本身没带 maxLag。
A 节的 investmentType。进场信号的 investmentType 默认是 percentage_investment,出场默认是 percentage_position。官方强烈建议把 investmentType 设成 base,amount 设成 {{strategy.order.contracts}},这样欧易的下单量和 TradingView 策略里的数量一致。欧易生成的「TradingView - 模板」本来就是这么写的,maxLag 那一项写的是 60。
用 base 时,TradingView 策略属性里「订单数量」的三种模式,在信号策略里分别这样换算(例子取自欧易原文):
| TradingView 订单数量模式 | 信号策略怎么理解 | 官方例子 |
|---|---|---|
| 合约 | 就是交易币数量 | — |
| 货币金额 | 按计价货币折算成交易币 | ETHUSDT.P 价格 1000,数量 100 → 0.1 ETH |
| 权益百分比 | 按资金比例折算 | 初始资金 10000、10%、价格 1000 → 1 ETH |
B 节列出的投资类型:买入信号可选固定保证金、固定张数、可用保证金比例、初始投资额比例;卖出信号是持仓比例。「初始投资额比例」的基数会变:创建时投入 1000 USDT,之后手动追加 1000 USDT,计算基数就变成 2000 USDT。
消息里不带订单字段、策略里也没设的时候,规范页写了默认做法:开仓信号用市价单,单个交易对按 100%、多个交易对按 50% 的比例下单;平仓信号收到后平掉 100% 持仓。两边都设了的,以欧易策略里的参数为先——比如策略设市价、信号写限价,按市价走。不过同一页参数表的星号说明又写着「创建策略时没配置,这几个参数必填」,两处说法对不上;稳妥的做法是策略里配好,或者消息里写全。
用限价单时,挂单价按规范原文的四条公式算:
| 操作 | 限价计算 |
|---|---|
| 开多 | [1-(偏移/100)]*买一价 |
| 开空 | [1+(偏移/100)]*卖一价 |
| 平多 | [1+(偏移/100)]*卖一价 |
| 平空 | [1-(偏移/100)]*买一价 |
开多、平空挂价不高于买一价,开空、平多不低于卖一价;偏移填 0 就挂在买一/卖一,填得越大离得越远。
maxLag 默认值。规范页上 maxLag 的参数表写「默认为60」,讲 maxLag 的正文小节写「默认设置为30秒」,两处不一致。建议每条警报消息都显式写上 maxLag,不依赖默认值。它限定的是 TradingView 发出(timestamp)到欧易接收处理之间的最长秒数,可填 1 到 3600。填得太小,从警报触发到欧易处理之间稍有耽搁,就可能报「超过允许的最大滞后时间」;填得太大,这道检查就拦不住耽搁很久才到的信号。按你的周期和对滑点的容忍度挑一个数,写死在消息里。
警报响了却没下单?按你看到的状态查
《交易信号策略常见问题》给的排查顺序分两步:先看 TradingView 的警报日志,确认警报真的触发了;再去欧易策略详情里的「历史事件」,刷新后找和触发时间对应的记录。TradingView 发来的信号,包括消息里的错误,都会记在历史事件里。对着下表找你现在的状态:
| 你看到的 | 问题出在哪 | 怎么处理 |
|---|---|---|
| TradingView 警报日志里没有这次触发 | 警报根本没发出 | 回 TradingView 查警报条件、到期时间是否已过 |
| 警报日志有触发,欧易「历史事件」里没有记录 | 地址或 signalToken 对不上 | 核对 Webhook URL 是否与信号配置里给的一致(实盘、模拟盘别混);核对 signalToken 是否一致 |
| TradingView 警报日志的 Webhook status 显示送达失败 | 请求没送到欧易 | 核对警报里的 Webhook URL 有没有粘错;确认 TradingView 账户的两步验证还开着 |
| 警报日志有触发但没下单,警报里的交易对没在策略里勾选 | 没选的交易对,信号会被过滤 | 在策略里加上这个交易对,或者改警报的 instrument |
| 历史事件有记录,报「交易产品类型不正确 (51000)」 | instrument 格式错 | BTCUSDT 改成 BTCUSDT.P,或者改用 BTC-USDT-SWAP |
| 报「超过允许的最大滞后时间」 | 从 timestamp 到欧易接收处理,超过了 maxLag | 调高 maxLag;留足了还报错,联系欧易客服 |
| 历史事件有记录,报错里提到下单数量或最小下单量 | 数量太小 | 调大数量;模拟盘与实盘合约面值不同,模拟盘能下的数量,切实盘后要重新算 |
| 已持有其他交易对的仓位,新交易对的开仓警报触发了,却没开仓 | 触发了「最大持仓数量」限制 | 见下一节第 2 条 |
| 策略状态一直是「等待信号中」 | 还没收到开仓信号 | 等开仓信号触发。它和交易员带单不同,没法指定什么时候触发。TradingView 日志里已经有开仓触发的,按表里第 2 行查 |
历史事件里有记录、但报的错表里没有,就点开详情,拿报错内容逐个字段对照《OKX信号策略警报规范2.0》改。
上线前要知道的 5 条限制
1. 信号数量有上限。自定义信号最多 500 个,模拟交易里最多 100 个。
2. 最大持仓数量会拦信号。这个参数限制同时持有几个不同标的的仓位。新信号如果会让总持仓数超过上限,会被拦下;上一个新增仓位的信号还在下单中,新来的信号也会被拦。同一个标的加仓不计入,那由「是否允许加仓」(multiple entry)控制。一个策略挂了多个交易对时,这个数要结合你的信号频率来定。
3. 信号广场的回测年化已计入手续费。策略交易页往下拉有「信号广场」。欧易说明平台已把手续费纳入回测,历史数据全量重算,所以年化数值变低属于正常。回测按 Lv1 永续合约费率算:maker 0.02%、taker 0.05%,市价单按 taker、限价单按 maker。你账户的实际费率不一定是这一档,回测数字也不代表以后的表现,只能当参考。
4. 第三方程序发信号要先找客服。不走 TradingView、从第三方固定 IP 地址向欧易发请求的,要先联系欧易客服并说明理由,否则所有外部信号默认视为无效。欧易的设置教程附录里给了 Python 发 Webhook 请求的示例代码。
5. 策略结束后资产不是马上到账。资产要等待结算时间结束才会回到交易账户。
常见问题
欧易信号策略能做现货吗?
不能。欧易帮助中心《交易信号策略常见问题》写明目前只支持永续合约,不支持现货交易;杠杆可以在策略里配置。
模拟盘能接 TradingView 警报吗?
能。入口在 交易 → 模拟交易 → 策略交易 → 策略广场 → 信号策略 → 创建。模拟盘的 Webhook URL 是 https://www.okx.com/pap/algo/signal/trigger,和实盘不同;模拟盘与实盘的合约面值也不同,切到实盘前要重新算下单数量。
报错 51000 是什么意思?
欧易提示「交易产品类型不正确 (51000)」,原因是 instrument 字段格式不对,例如写成 BTCUSDT,漏了 .P。改成 BTCUSDT.P,或者直接用 OKX 的 instId 写法 BTC-USDT-SWAP。
Webhook URL 或警报消息忘了保存,去哪找?
在信号视图里点「查看配置」,或者从策略详情里的信号配置链接进去,都能再看到。
一个 TradingView 信号能同时驱动几个欧易策略?
可以挂 2 个以上策略,它们按同一信号执行,每个策略可以设不同的交易对、杠杆和保证金。
整条链路建议先在模拟盘跑通,还没开过模拟盘的可以看欧易模拟盘入门。