OKX信号策略:如何使用TradingView警报创建您的信号策略

发布于 2023年8月30日更新于 2024年4月24日阅读时长 16 分钟

信号策略的推出,让TradingView用户和信号供应商可以使用自己的TradingView信号发布并设置一个信号策略。如果用户想要在欧易上进行信号交易,可以参考以下步骤。

关于警报消息模板规范的更多信息,请查看【信号策略警报规范】
关于常见问题,请查看【FAQs】

文章概述

步骤一:访问信号策略

登录欧易交易所账户,选择交易 - 策略交易 - 策略广场。

step-by-step-1.1

选择“信号策略”,点击“创建”,访问信号策略。

step-by-step-1.2

步骤二:信号创建

点击“新增自定义信号”,开始创建

step-by-step-2.1

在新增TradingView信号页面,输入信号名称和不超过500字符的信号简介后,点击“创建信号”,进入下一步。

step-by-step-2.2

点击“创建”后,开始设置信号推送。系统会自动生成Webhook URL和警报信息规范。请注意,这里分别有

  • “TradingView - 模板"(适用于TradingView 策略 脚本类用户,即strategy.*类函数的用户)
  • “自定义 - 模板"(适用于TradingView Indicator/Study 脚本类用户,以及第三方自行编码程序的用户)

请首先根据您目前使用的脚本种类选择适合您的教程,附上不同种类脚本的区别

脚本种类 说明
Sect A - express overview 11. TradingView strategy型 此为可供用户编写交易买卖策略的类别。能够进行自动化交易,并验证(回测)过去的买卖结果。可借此此得知自己想出的交易策略在何时最有优势或劣势,对于用户可说是最重要的一个项目。
实际制作策略的脚本时,可从右下方开启选单后,选择制作新策略的项目。接着写入宣告为策略的Strategy类并开始制作。
如果您是 strategy.*类函数的TradingView策略脚本类用户,请跳转到步骤3.1:TradingView策略类 strategy.*类函数指南部分跟随我们的范例进行配置。
Sect A - express overview 12. TradingView indicator型(適用於Version5。Version4則是study型) 此为可供书写指标的类别,能够轻易制作出主视窗的布林通道、子视窗的MACD交叉等等。
亦备有使用频繁的内建函数(后述),因而可简单组成许多物件。实际制作指标的脚本时,可从右下方开启选单后,选择制作新指标的项目。接着写入宣告为指标的Indicator并开始制作。
如果您是指标类(indicator/study)以及第三方自行编码程序的用户,请跳转到步骤3.2:TradingView 指标脚本指南部分跟随我们的范例配置。

步骤三:TradingView配置

3.1【TradingView策略类 strategy.*类函数指南】:这里以RSI14的例子基于strategy.*类函数创建并连通您的第一个PineScript 策略

步骤1:打开TradingView,选择你想要进行信号交易的交易对。(注意:下方选择选择的是USDT永续合约交易对)。当前OKX支持的永续交易合约币对可以在主页币对选择列表中查看

step-by-step-3.1step-by-step-3.2

步骤2:打开Pine编辑器
step-by-step-3.3

步骤3:复制以下代码进入Pine策略编辑器,并点击“保存”,并“添加到图表”。类似的,如果你已有自己的策略并且是通过strategy类的格式都可以使用这样的设置流程。

Go
//@version=5
strategy("RSI Strategy", overlay=true)

// RSI Parameters
rsiLength = input(14, "RSI Length")
overboughtLevel = input(60, "Overbought Level")
oversoldLevel = input(40, "Oversold Level")

// Calculate RSI
rsiValue = ta.rsi(close, rsiLength)

// Strategy Conditions
longEntry = ta.cross(rsiValue, oversoldLevel)
longExit = ta.cross(rsiValue, overboughtLevel)

// ENTER_LONG Condition
if longEntry
    strategy.entry("Long Entry", strategy.long)

// EXIT_LONG Condition
if longExit
    strategy.close("Long Entry")

step-by-step-3.4

步骤4:点击齿轮指标,在「属性」中按照如图参数设置,点击「确认」即可

step-by-step-4-new1.png

请注意以下每种配置的定义以及对应在信号策略的含义,更多详情可以参考【这里】

1 - 初始资金(参数:initial_capital)表示最初可用于交易策略的资金量,以基础货币中定义的货币计。默认情况下,此值等于 100,000。您可能需要增加此值才能在某些商品上进行交易。

2 - 订单数量。这需要一个值和一个计算模式。针对不同的单位,请注意对应的计算值在信号策略中的含义

  • 合约 - 策略将以指定数量的交易币进行买入,即每次进场对应的qty单位为交易币(例如BTC)
  • 货币金额 - 策略将输入以计价货币指定的金额,即每次进场对应的qty单位为计价货币(例如USDT)计算出来的对应交易币数量。例如当前ETHUSDT.P 价格为1000,qty为100,则每次进场购买数量为0.1 ETH
  • 权益百分比- 仓位规模将计算为交易开始时可用权益的百分比。您可以指定一个小于 100% 的值,根据该百分比计算出的计价货币数量继续计算出对应的交易币数量。例如初始资金为10000,权益百分比为10%,当前ETHUSDT.P价格为1000,则每次进场购买数量为1 ETH

步骤5:选中您的策略类PineScript脚本,并点击”警报“,选中您的策略脚本。
请注意,如果您的策略中同时存在调用alert()方法,则请确保该处选择”仅订单执行“!
*附注:策略类脚本指在代码开头有定义strategy("策略名字")的程序

step-by-step-5

步骤6:从OKX警报信息规范中,摘取TradingView Tab下面的警报讯息模板,并填入”消息“区域中,并加上您的警报名称

step-by-step-6-1step-by-step-6-2

请确保您每次调用strategy.*函数时使用『交易币』作为您的订单单位(例如每次入场购买指定数量的BTC永续合约),即investmentType传的是base的样式, 则您直接复制OKX警报讯息设置弹窗中的模板即可。我们的信号策略会自动帮您将您的交易币数量转换成合约交易的基础单位-张数,并帮助您执行该交易

JSON
{
  "id": "{{strategy.order.id}}",
  "action": "{{strategy.order.action}}",
  "marketPosition": "{{strategy.market_position}}",
  "prevMarketPosition": "{{strategy.prev_market_position}}",
  "instrument": "{{ticker}}",
  "signalToken": "********",  //每个信号会有独特的Token用于鉴权
  "timestamp": "{{timenow}}",
  "maxLag": "60",
  "investmentType": "base",
  "amount": "{{strategy.order.contracts}}"
}

步骤7:在“通知”中选择Webhook URL。将此前欧易自动生成的Webhook URL粘贴到TradingView,然后点击“创建”。

step-by-step-7-1step-by-step-7-2

3.2【TradingView 指标脚本指南】配置TradingView警报信息模板

步骤1:在Pine编辑器中配置脚本,然后点击“保存”和“添加到图表”。针对V5 Indicator或者V4 Study脚本用户来说,可以透过使用Alertcondition()消息进行设置(以附录A - 案例一MACD示例脚本1为例)

step-by-step-point-3.2.1

步骤2:点击顶部工具栏上的“Alert”,并将"条件"更改为刚刚添加到图表中的相应AlertCondition脚本。在这种情况下,MACD金叉与ENTER_LONG消息模板一起使用。MACD死叉与EXIT_LONG消息模板一起使用。从OKX警报信息规范中,摘取「自定义」tab下面的对应模板放入信息中。
为方便起见,还可以选择“无限制警报”作为到期时间。

重要提示:欧易提供了4种不同的消息内容,具有不同的操作(即ENTER_LONG、EXIT_LONG、ENTER_SHORT、EXIT_SHORT)。在设置警报时,请根据自身的交易逻辑选择合适的消息内容,即每个警报需要只对应其中一个操作,而不可以同时把四个模板全部放入输入框内。您可以前往 信号策略警报规范 链接查看更多详细资讯

step-by-step-point-3.2.2step-by-step-point-3.2.3

步骤3:在"通知"中选择Webhook URL。将此前欧易自动生成的Webhook URL粘贴到TradingView,然后点击"创建"。

step-by-step-point-3.2.4 step-by-step-point-3.2.5

步骤4:如果需要查看创建的警报,可以单击"Alerts"选项,然后选择相应的警报。

step-by-step-point-3.2.6

3.3【TradingView图表分析指南】配置TradingView警报信息模板

步骤1:点击顶部工具栏上的"Alert",并将"条件"更改为对应的触发条件。

例如该情况中,RSI上穿超卖线30的时候将会触发ENTER_LONG,并和该消息模板一起使用。从OKX警报信息规范中,摘取「自定义」tab下面的对应模板放入信息中。

step-by-step-point-3.3.1

步骤2:在"通知"中选择Webhook URL。将此前欧易自动生成的Webhook URL粘贴到TradingView,然后点击"创建"。

step-by-step-point-3.3.2 step-by-step-point-3.3.3

步骤4:如果需要查看创建的警报,可以单击"Alerts"选项,然后选择相应的警报。

step-by-step-point-3.3.4

3.4【第三方自行研发程序指南】配置Webhook请求

请参考附录B - 案例一Python发送Webhook请求范例,以Python作为案例的请求范例进行配置。

请注意,如果您想从第三方固定 IP 地址向 OKX 发送请求,请联系我们的客户服务团队,或发送电子邮件至 tradingbot@okx.com 并附上相关理由。这将确保您的请求得到我们专门处理团队的适当管理。如果不遵循这一渠道,所有的外部信号都将被默认为无效。

步骤四:设置信号策略

完成前面的步骤,就能看到TradingView信号已接入到欧易。下面的步骤就是要将已经接入的信号,连接到信号策略。点击"使用信号",开始创建信号策略。

step-by-step-point-3.4.1

在策略开始运行前,需要先完成一些基本的设置,包括交易对、杠杆比例和投资资金(保证金)。

挑选正确的交易对对策略非常关键:你需要选择那些适应你策略的货币对就行,以及考虑你需要使用的杠杆比例。虽然杠杆可以增大收益,但同时存在着一定的风险。所以要选择在自身承受范围之内的,并且适合自己交易目标的杠杆比例。设置好交易对和杠杆比例后,下一步就是决定投入多少资金。

step-by-step-point-3.4.2

除了基本设置外,信号策略还可以根据个人偏好,进行高级设置。

例如,你可以选择不同的订单类型,比如市价单或限价单。市价单会立即按照当前市场价格执行,而限价单允许用户设置特定的价格水平来填补订单。

此外,入场设置使用户能够定义每个订单的投资金额,该金额决定了分配给每笔交易的资金比例。分配给每笔交易的资金比例是相当可自定义的,并且可以选择绝对数额(例如1000 USDT)或百分比形式(例如可用余额的10%),从而灵活确定仓位大小。调整这一设置可以帮助用户根据交易策略管理风险和控制仓位大小。

另外,在退出设置中,用户可以设定止盈(TP)和止损(SL)水平。止盈建立在某个价格水平上,在该价格水平上策略将自动关闭交易以确保利润;而止损则定义在某个价格水平上,在该价格水平上策略将退出交易以限制潜在亏损。止盈止损价格计算时不包含手续费支出,并且选择触发后市价下单,由滑点和手续费造成实际PnL可能会与设定目标有一点偏差。

在高级设置中,你可以自己直接设定这些参数,或者通过TradingView的提醒来获取这些信息。这样的设置方式可以让你根据自己的交易习惯来选择最方便的操作方式。

step-by-step-main-4.1

在填写完你需要的策略参数后,选择"确认"便可以完成你的信号策略创建。

step-by-step-main-4.2

步骤五:监控和管理信号策略

成功创建信号策略后,信号策略可以实时接受你选择的信号源发出的信号,并执行交易。如果你想查看你创建的信号策略的详细信息,可以点击"详细信息"。

step-by-step-main-5.1

在详细信息中,你可以清楚看到信号策略的历史交易表现,还有正在进行的交易,比如有哪些订单正在等待执行等。此外,你还可以查看历史交易记录和交易信号等。

step-by-step-main-5.2

查看收益详情

step-by-step-main-5.3

跟踪和管理当前持仓

step-by-step-main-5.4

跟踪历史仓位

此外,用户还可以查看信号历史记录及相应的处理操作日志。通过历史数据,为用户提供参考,帮助用户改进方法,做出更加明智的决策。

step-by-step-main-5.5

跟踪信号、策略历史、警报消息和订单执行

此外,如果有需要,你还可以随时手动干预策略。例如,你可以调整分配给策略的保证金,因特定原因手动下单,控制你在进行中的交易,并且可以手动平仓或者减少你的开放仓位。这种控制程度让你可以根据实时市场条件和你自己的分析来微调你的交易策略。

1. 调整策略保证金

在"调整保证金"部分,您可以根据需要轻松添加或删除策略保证金。这使你能够在需要时向策略注入额外资金,或者在投资回报(ROI)达到显著水平后将一部分资金留出来。

step-by-step-main-5.1.1

找到调整保证金按钮

step-by-step-main-5.1.2

增加/减少保证金

2. 手动下单

其次,无论收到的信号如何,用户都可以在策略内部手动下单。这一功能让用户能够根据特定的需求为任何交易对添加手动订单。订单设置包括订单类型、金额和方向等。用户可以使用这一功能发起新的仓位、增加现有仓位,甚至减少或完全关闭开放的仓位。这一功能让用户对活动仓位管理的控制权更加广泛,让用户能够在需要的时候做出调整。

step-by-step-main-5.2.1

找到“手动下单”按钮

step-by-step-main-5.2.2

选择交易对

step-by-step-main-5.2.3

下单新持仓,或增加/减少当前持仓

3. 立即关闭开放仓位

此外,用户不仅可以方便地查看自己的开放仓位,而且还可以通过点击"市价全平"按钮,直接平掉任何特定交易对上的开放仓位。选择"市价全平"后,用户可以按照当前市场价格完全平掉该交易对的仓位。

step-by-step-main-5.3.1

找到“打开仓位记录”旁边的“市价全平”按钮

step-by-step-main-5.3.2

确认您要关闭吗

4. 停止信号策略

当用户停止信号策略后,系统将自动取消策略所下的所有待处理订单。订单中的剩余资产将退还到用户的交易账户。停止信号策略有两种方法可以选择。

  1. 访问策略详情

在访问策略详细信息页面,选择右上角的"停止"按钮。

step-by-step-main-5.4.1

  1. 访问机器人订单选项卡

从交易页面底部访问策略订单,然后选择"停止"

step-by-step-main-5.4.2

设置与TradingView信号配对的信号策略,是欧易对策略交易的重大优化,有助于帮助用户提升盈利能力。如果想要了解关于信号策略的更多信息,可以点击【这里】

附录

A. 案例1:带有AlertCondition() + Alert手动设置的MACD脚本

要创建一个警报,需要定义触发它的条件。这个条件可以基于各种因素,如价格、指标或自定义逻辑。以下派语言使用MACD技术指标作为示例。

SQL
//@version=5
indicator('MACD Sample Script 1', overlay=true)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

// Define the golden cross condition
goldenCross = ta.crossover(macdLine, signalLine)

// Define the death cross condition
deathCross = ta.crossunder(macdLine, signalLine)

// Use the alertcondition function to generate alerts
alertcondition(condition=goldenCross, title="MACD Golden Cross", message="")
alertcondition(condition=deathCross, title="MACD Death Cross", message="")

在这个例子中,我们首先使用macd函数计算MACD指标,该函数接受收盘价数组(在本例中为收盘价)和MACD的参数(12、26、9)。然后我们分别使用crossover和crossunder函数定义了金叉和死叉的条件。当MACD线穿过信号线时,发生金叉;而当MACD线穿过信号线下方时,发生死叉。

B. 案例2:Python发送Webhook请求范例

Ruby

import datetime
import time
import requests
import datetime
import json
import log

symbol = 'BTC-USDT-SWAP'

#enter long demo, using 100% available balance
signaldata_enterlong = {
        "action":"ENTER_LONG",
        "instrument":symbol,
        "signalToken":"your signaltoken",
        "timestamp":datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ'),
        "maxLag":"2000",
        "orderType":"market",
        "orderPriceOffset":"0.1",
        "investmentType":"percentage_balance",
        "amount":"100"
    }
#enter short demo, using 100% available balance
signaldata_entershort = {
        "action":"ENTER_SHORT",
        "instrument":symbol,
        "signalToken":"your signaltoken",
        "timestamp":datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ'),
        "maxLag":"2000",
        "orderType":"market",
        "orderPriceOffset":"0.1",
        "investmentType":"percentage_balance",
        "amount":"100"
    }

# exit short demo, closing 100% open position
signaldata_exitshort = {
        "action":"EXIT_SHORT",
        "instrument":symbol,
        "signalToken":"your signaltoken",
        "timestamp":datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ'),
        "maxLag":"2000",
        "orderType":"market",
        "orderPriceOffset":"0.1",
        "investmentType":"percentage_position",
        "amount":"100"
    }
# exit long demo, closing 100% open postion
signaldata_exitlong = {
        "action":"EXIT_LONG",
        "instrument":symbol,
        "signalToken":"your signaltoken",
        "timestamp":datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ'),
        "maxLag":"2000",
        "orderType":"market",
        "orderPriceOffset":"0.1",
        "investmentType":"percentage_position",
        "amount":"100"
    }

demo_trading_url = 'https://www.okx.com/pap/algo/signal/trigger'
live_trading_url = 'https://www.okx.com/algo/signal/trigger'

# Make a POST request signak enter
response = requests.post(live_trading_url, data=json.dumps(signaldata_enterlong))

# Check the response status code
if response.status_code == 200:
    log.info('trigger signal successful')
else:
    log.info('trigger sitgnal failed')

C. 欧易TradingView示例脚本

信号策略警报规范

关于警报消息模板规范的更多信息,可以查看【本文】

FAQs

如果您对信号策略有任何疑问,可以查看【本文】中用户最常提出的问题。