LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > 关于FMZ对接Tradingview下单的方法

关于FMZ对接Tradingview下单的方法

2020-04-22 发明者量化交易 来源:区块链网络

灵感由来

前几日受到《利用 tradingview 指标对接发明者实盘机器人》文章启发,自己也尝试复现了一下。但作者写的比较粗略,也略晦涩难懂。

所以我使用了Top 10 Python libraries of 2019 的3个库重构了一份server。注意 tradingview webhook功能为会员功能,需要购买会员!

本系统webhook特性如下:

1、标准化json消息传递

2、加入try..except..异常处理

3、加入with..as..内存回收

4、采用async异步

5、采用ASGI协议

6、采用AUTO HTTP1.X-2.0协议

7、代码经过 100% test coverage

8、装饰器的运用使程序简洁、执行效率高、稳定可靠

一、准备工作

您需要安装 python 3.8.2 或以上版本?https://www.python.org/downloads/

您需要安装pip包管理器?https://pip.pypa.io/en/stable/

安装必要的包

HTTPX

是一个功能齐全的http访问库。获2019 top 10 第一名。

HTTPX is a fully featured HTTP client for Python 3,

which provides sync and async APIs,

and support for both HTTP/1.1 and HTTP/2.

https://www.python-httpx.org/

Starlette

Starlette 是一个轻量级ASGI标准库/工具包。获 top 10 第二名。

Starlette is a lightweight ASGI framework/toolkit,

which is ideal for building high performance asyncio services.

https://www.uvicorn.org/

FastAPI

FastAPI 是一个基于Starlette的API快速实现库。获 top 10 第三名。

FastAPI framework, high performance, easy to learn, fast to code, ready for production

https://fastapi.tiangolo.com/

Uvicorn

Uvicorn 是一个轻量级 ASGI 服务端。

Uvicorn is a lightning-fast ASGI server, built on uvloop and httptools.

https://www.uvicorn.org/

pydantic

pydantic 是一个基于python的数据格式管理库,已用于Microsoft、Amazon Web Services、Uber

Data validation and settings management using python type annotations.

https://pydantic-docs.helpmanual.io/

题外话:

其实这些库已经代表了当前行业的最高标准!!。.你还能用他们写很多其他的东西。我已经用其对接了5大交易所,监控资金流向。okex的检测频率甚至稳定在0.1秒。。或者说...可以搭建一套千万级并发的交易所...人生苦短,我用python。一行代码能解决的问题,绝不用一堆。请往后看!

原理及实现

我们要做的事情很简单,就是接收tradingview post过来的数据再编码发送http get传递给FMZ的托管者。有点类似中间件服务。

FMZ终端接收器

我们要去fmz建立一个python策略,具体代码如下:

接下去我们把机器人运行起来

这里要非常注意?机器人ID要填写到python代码中

webhook server 服务端搭建

第一步

新建一个python文件。起个名字?fz1.py

第二步

编写导入模块

第三步

在fmz主页注册api

并找到托管主机ID

并定义到 python代码中。

这里的RobotID需要在前面的托管策略中获得ID

第四步

定义一个api函数来提交CMD指令给fmz托管。

第四步

自定义数据类型(json格式)

使用pydantic模块的BaseModel方法来定义一个类型

当然你也可以自己定义更多的字段,这完全取决于你自己想要达到的效果。

以上全部是非空字段,传参如果缺少一个会报错,

如果需要传递可空参数,请参阅BaseModel手册。

第五步

编写Tradingview接收模块(webhook server)

webhook 的协议使用的是http post方法。

所以我们需要定义一个http server端并接受post传递过来的数据。

python服务端全部代码

以上就是全部核心代码的实现。

我略微处理了一下异常处理模块以及重试机制。将所有代码整合。

服务端的启动

记住要讲文件保存成fz1的文件名

接着我们打开命令行工具。启动python服务端

命令如下:

其中代表使用fz1的py文件并调用webhook任务。

host 表示接收0.0.0.0的ip访问,也就是全部。

port 表示将端口设定为8001 (这里需要注意的是,tradingview只通过80端口访问,你需要在防火墙做好端口映射,或者直接使用80)

reload 表示如果py主文件有迭代,服务端自动重载最新版本。

当你看到如图所示,Application startup complete就代表启动成功了

这时候你可以打开浏览器,访问?http://127.0.0.1:8001/redoc

fast api 已经为你实现了api接口文档,和自动调试器。

本地调试

我们使用的是chrome 插件 TALEND API TESTER

你也可以用其他的http调试工具完成。

模拟本地tradingview发送webhook消息。

将模式调整为post

url地址是 127.0.0.1:8001/tv/

post的body字段写上json

同时在HEADER中会自动生成application/json

完成以后点击发送

如图所示。本地测试已经完成了。

我们从本地模拟发送到webhook的数据通过python 传递到托管设备,并顺利获取到了相关数据。

将webhook部署到外网

本段落部分属于个人网络环境,每个人不一样。

登陆Juniper 终端

增加rule-set outside-to-inside

指定链路走向 from untruset to trust

增加tradingview 源地址IP断 source-address [ 58.35.162.147/32 52.89.214.238/32 34.212.75.30/32 54.218.53.128/32 52.32.178.7/32 ];

指定目的地址(本机外网ip) destination-address?xxx.xxx.xxx.xxx/32;

指定目的端口(本机外网port) destination-port 80;

做端口重定向 destination-nat pool inside-8001;

这些步骤主要是允许 tradingview 访问我的外网ip,

并指定80端口重定向到本地设备的8001端口。

将设备规则执行以后。tradingview就能顺利推送消息给我们了。

tradingvew 消息测试

我们打开tradingview 并在一个高级指标上新建一个报警,

这个方法可以用于tradingview各种高级指标自动下单。

勾选webhook,并填写服务端地址http://xxx.xxx.xxx.xxx/tv/

下方消息框填入字段消息。

{"apikey": "FMZ", "exchange": "bybit", "symbol": "BTC-USD", "side": "buy", "amount": "100"}

如图所示 在指标上已经显示了我们的预警信息

当价格穿越指标以后,tradingview产生报警

—-

编译者/作者:发明者量化交易

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...