欢迎光临散文网 会员登陆 & 注册

TradingView信号执行实盘交易的终极方案

2022-12-08 15:25 作者:发明者量化  | 我要投稿

经常使用TradingView的交易者都知道,TradingView可以推送消息到其它平台。之前在文库中也公开了一篇TradingView的信号推送策略,推送的消息内容是写死在请求url中的,有些不灵活。本篇我们重新用一种方式来设计一个TradingView信号执行策略。

场景和原理

可能有新手同学看到本篇文章题目和上面的描述有些懵,没关系!我们先把需求场景、原理阐述清楚。让您知道我在讲什么。OK,我们这就切入主题。

1、需求场景:
说了半天是要这个东西做什么工作呢?简单说就是我们在TradingView上有很多可以选择使用的指标、策略、代码等,这些都可以在TradingView上直接运行,可以画线、计算、显示交易信号等。并且TradingView有实时的价格数据、充足的K线数据方便各种指标计算。TradingView上这些脚本代码叫做PINE语言,唯独一点不太方便的就是在TradingView上实盘交易。虽然在FMZ上已经支持PINE语言,也可以实盘运行。但是也有TradingView的铁粉还是希望以TradingView上的图表发出的信号去下单交易,那么这个需求也可以通过FMZ来解决。所以本篇就是讲解这种解决方案的具体细节。

2、原理:


简单的流程图

整个方案中涉及4个主体,简单来说分别是:

涉及的主体

所以如果想这么玩就需要这几个准备:
1、TradingView上运行的脚本,负责发送信号请求到FMZ的扩展API接口,需要TradingView账号至少是PRO会员。
2、在FMZ上部署一个托管者程序,需要是可以访问到交易所接口的那种(例如新加坡、日本、香港等地的服务器)。
3、在FMZ上配置当TradingView信号发送过来时,要(下单)操作的交易所的API KEY。
4、你需要有个「TradingView信号执行策略」,这个策略就是本篇主要讲的。

TradingView信号执行策略

上一个版本的「TradingView信号执行策略」设计不太灵活,消息只能写死在TradingView发送的请求的url中。假如我们希望TradingView推送消息时在Body中写一些变量信息,这个时候就无能为力了。例如在TradingView上这样的消息内容:

trading view的消息设置

那么TradingView上是可以如图中设置这样,把消息写在请求的Body中发送给FMZ的扩展API接口。那FMZ的这个扩展API接口如何调用呢?

FMZ的一系列扩展API接口中,我们要用到的是CommandRobot这个接口,通常是这样调用这个接口:

这个请求url的query中的access_keysecret_key就是FMZ平台的扩展API KEY,这里演示所以设置为xxxyyyy。那这个KEY怎么创建呢?在这个页面:https://www.fmz.com/m/account,创建一个就可以,妥善保管,切勿泄露。

创建FMZ的API KEY

回归正题,继续说CommandRobot接口的问题。如果需要访问的是CommandRobot接口,请求中的method就设置为:CommandRobotCommandRobot这个接口的功能就是通过FMZ平台向某个ID的实盘发送一个交互消息,所以参数args中包含的就是实盘ID和消息,上面这个请求url例子就是向ID为186515的实盘程序,发送消息ok12345

之前是用这种方式请求FMZ扩展API的CommandRobot接口,消息只能写死例如上面例子中的ok12345。如果消息在请求的Body中,就需要用另一种方式:

这样请求就可以通过FMZ平台,发送请求中Body的内容作为交互消息给ID为130350的实盘了。如果TradingView上的消息设置为:{"close": {{close}}, "name": "aaa"},那么ID为130350的实盘就会收到交互指令:{"close": 39773.75, "name": "aaa"}

为了让「TradingView信号执行策略」收到交互指令时能正确理解TradingView发送的这个指令,要提前约定一下消息格式:

策略设计成了多交易所架构,所以可以在这个策略上配置多个交易所对象,也就是可以控制多个不同账户的下单操作。只用在信号结构中Exchange指定要操作的交易所即可,设置1就是要让这个信号操作第一个添加的交易所对象对应的交易所账户。如果要操作的是现货ContractType设置为spot,期货就写具体合约,例如永续合约写swap。市价单价格传-1就可以了。Action设置对于期货、现货、开仓、平仓都是有区别的,不能设置错。

接下来就可以设计策略代码了,完整的策略代码:

策略参数和交互:


参数和交互设计

「TradingView信号执行策略」完整策略可以在FMZ策略广场搜索到。


简单测试

策略运行前要配置好交易所对象,在策略参数中设置好「FMZ平台的AccessKey」、「FMZ平台的SecretKey」这两个参数,不要设置错。运行起来显示:


FMZ策略初始运行时输出的信息

会依次打印出:在TradingView上需要填写的WebHook地址、支持的Action指令、消息格式。重要的是WebHook地址:

直接复制粘贴写在TradingView上对应位置就可以。

如果想模拟TradingView发送信号,可以点击策略交互上的TestSignal按钮:

策略的交互按钮,可以用来模拟测试信号

这个策略会自己发送一个请求(模拟TradingView发送信号请求),调用FMZ的扩展API接口,给策略自己发送一个消息:

当前策略就会收到另一个交互消息,并且执行:


策略收到trading view发送的信号

并且下单交易。

实际场景中使用TradingView的测试

使用TradingView测试需要TradingView账号是Pro级别,测试之前有一些前置小知识需要简单讲解一下。

以一个简单的PINE脚本(TradingView上随便找的修改了一下)为例子


1、PINE脚本可以在脚本发出下单指令时附带一些信息

以下这些是占位符,例如我在报警中「消息」框中写入{{strategy.order.contracts}},那么在触发下单时就会发送消息(根据报警上的设置,邮件推送、webhook url请求、弹窗等),消息中就会包含这次执行订单的数量。

{{strategy.position_size}} - 返回Pine中相同关键字的值,即当前仓位的大小。
{{strategy.order.action}} - 为执行的订单返回字符串“buy”或“sell”。
{{strategy.order.contracts}} - 返回已执行订单的合约数量。
{{strategy.order.price}} - 返回执行订单的价格。
{{strategy.order.id}} - 返回已执行订单的ID(在生成订单的函数调用之一中用作第一个参数的字符串:strategy.entry,strategy.exit或strategy.order)。
{{strategy.order.comment}} - 返回已执行订单的注释(在生成订单的函数调用之一中的comment参数中使用的字符串:strategy.entry、strategy.exit、或strategy.order)。如果未指定注释,则将使用strategy.order.id的值。
{{strategy.order.alert_message}} - 返回alert_message参数的值,该参数可以在调用用于下订单的函数之一时在策略的Pine代码中使用:strategy.entry、strategy.exit、或strategy.order。仅在Pine v4中支持此功能。
{{strategy.market_position}} - 以字符串形式返回策略的当前持仓:“long”、“flat”、或 “short”。
{{strategy.market_position_size}} - 以绝对值(即非负数)的形式返回当前仓位的大小。
{{strategy.prev_market_position}} - 以字符串形式返回策略的上一个持仓:“long”、“flat”、或 “short”。
{{strategy.prev_market_position_size}} - 以绝对值(即非负数)的形式返回前一个仓位的大小。

2、结合「TradingView信号执行策略」构造消息

3、让TradingView根据这个PINE脚本运行时发出信号,需要在TradingView上加载这个脚本时设置报警

trading view上设置webhook url报警

当TradingView上的PINE脚本触发交易动作,就会发送webhook url请求。


trading view图表上的交易信号
trading view交易信号触发时发送的报警信息

FMZ的实盘就会执行这个信号。

FMZ上实盘策略收到信号,执行操作
某cex交易所的订单记录

视频地址

B站:https://www.bilibili.com/video/BV1BY411d7c6/

文章中的代码仅供参考,实际使用可以自行调整、扩展。

TradingView信号执行实盘交易的终极方案的评论 (共 条)

分享到微博请遵守国家法律