目前不清退的交易所推荐:
1、全球第二大交易所OKX欧意
国区邀请链接: https://www.myts3cards.com/cn/join/1837888 币种多,交易量大!
国际邀请链接:https://www.okx.com/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!
2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gate.win/signup/649183
全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031 币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!
买好币上KuCoin:https://www.kucoin.com/r/af/1f7w3 CoinMarketCap前五的交易所,注册友好操简单快捷!
FMZ量化交易平台邀请链接:https://www.fmz.com/
使用发明者量化交易平台扩展API实现TradingView报警信号交易
B站视频链接
发明者量化交易平台扩展API最近升级了,升级支持了直接访问模式,这样就可以轻松实现TradingView报警信号发送给发明者量化交易平台机器人实现自动交易。如果小伙伴还不知道扩展API为何物,听我细细道来。
发明者量化交易平台扩展API
发明者API文档相关部分链接
扩展API的主要作用是给程序化操作发明者量化交易平台上的各种功能提供接口,例如同时批量启动机器人,定时机器人启动、停止,读取机器人信息详情等。我们使用发明者量化交易平台扩展API实现TradingView报警信号交易这个需求计划只用扩展API中的CommandRobot(RobotId, Cmd)
接口即可,这个接口可以给指定ID的机器人发送交互指令,机器人接收到指令即可执行对应操作(例如下单买入、卖出等)。
要使用扩展API,首先需要创建自己的发明者账号的API KEY
:
API KEY
秘钥由access key
和secret key
组成,API KEY
即程序化操作发明者量化交易平台的钥匙,所以一定要妥善保管,切勿泄露。在创建FMZ扩展API KEY
时,可以指定权限,例如上图仅仅给这个API KEY
赋予访问CommandRobot(RobotId, Cmd)
接口的权限,对于本篇例子基于安全考虑,请只给FMZ的扩展API KEY
赋予CommandRobot(RobotId, Cmd)
接口的访问权限。
扩展API的直接访问模式
直接访问模式是指把API KEY
直接写在URL的Query中,例如访问发明者量化交易平台扩展API的URL可以写成:
https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,\"ok12345\"]
其中,https://www.fmz.com/api/v1
是接口地址,?
之后是Query
,参数access_key
秘钥举例用xxx表示(使用时填写自己的FMZ账号的access_key),参数secret_key
秘钥用yyyy表示(使用时具体填写自己的账号secret_key),参数method
是要访问的扩展API接口具体名称,args
为要调用的method
接口的参数。
我们使用TradingView作为信号源,向发明者量化交易平台机器人发送交易命令,其实就只用CommandRobot
这个接口。
TradingView
首先你要有个TradingView Pro级别的账户,Basic级别是无法使用报警中的WebHood功能的。我们进入TradingView的图表。
向图表添加一个指标,也可以是其它的脚本算法。这里为了方便演示我们使用最常用的MACD
指标,然后设置K线周期为1分钟(为了让信号更快的触发,方便演示)。
在图表上点击右键,弹出菜单中选择「添加警报」。
在「警报」弹窗中设置WebHook
,到了这一步可以先不用着急设置,我们先把发明者量化交易平台这边的监控信号的机器人运行起来。
监控信号下单机器人
策略源码:
// 全局变量
var BUY = \"buy\" // 注意:现货用的命令
var SELL = \"sell\" // 现货用的命令
var LONG = \"long\" // 期货用的命令
var SHORT = \"short\" // 期货用的命令
var COVER_LONG = \"cover_long\" // 期货用的命令
var COVER_SHORT = \"cover_short\" // 期货用的命令
function main() {
// 清空日志,如不需要,可以删除
LogReset(1)
// 设置精度
exchange.SetPrecision(QuotePrecision, BasePrecision)
// 识别期货还是现货
var eType = 0
var eName = exchange.GetName()
var patt = /Futures_/
if (patt.test(eName)) {
Log(\"添加的交易所为期货交易所:\", eName, \"#FF0000\")
eType = 1
if (Ct == \"\") {
throw \"Ct 合约设置为空\"
} else {
Log(exchange.SetContractType(Ct), \"设置合约:\", Ct, \"#FF0000\")
}
} else {
Log(\"添加的交易所为现货交易所:\", eName, \"#32CD32\")
}
var lastMsg = \"\"
var acc = _C(exchange.GetAccount)
while(true) {
var cmd = GetCommand()
if (cmd) {
// 检测交互命令
lastMsg = \"命令:\" + cmd + \"时间:\" + _D()
var arr = cmd.split(\":\")
if (arr.length != 2) {
Log(\"cmd信息有误:\", cmd, \"#FF0000\")
continue
}
var action = arr[0]
var amount = parseFloat(arr[1])
if (eType == 0) {
if (action == BUY) {
var buyInfo = IsMarketOrder ? exchange.Buy(-1, amount) : $.Buy(amount)
Log(\"buyInfo:\", buyInfo)
} else if (action == SELL) {
var sellInfo = IsMarketOrder ? exchange.Sell(-1, amount) : $.Sell(amount)
Log(\"sellInfo:\", sellInfo)
} else {
Log(\"现货交易所不支持!\", \"#FF0000\")
}
} else if (eType == 1) {
var tradeInfo = null
var ticker = _C(exchange.GetTicker)
if (action == LONG) {
exchange.SetDirection(\"buy\")
tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
} else if (action == SHORT) {
exchange.SetDirection(\"sell\")
tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
} else if (action == COVER_LONG) {
exchange.SetDirection(\"closebuy\")
tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
} else if (action == COVER_SHORT) {
exchange.SetDirection(\"closesell\")
tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
} else {
Log(\"期货交易所不支持!\", \"#FF0000\")
}
if (tradeInfo) {
Log(\"tradeInfo:\", tradeInfo)
}
} else {
throw \"eType error, eType:\" + eType
}
acc = _C(exchange.GetAccount)
}
var tbl = {
type : \"table\",
title : \"状态信息\",
cols : [\"数据\"],
rows : []
}
// tbl.rows.push([JSON.stringify(acc)]) // 测试时使用
LogStatus(_D(), eName, \"上次接收到的命令:\", lastMsg, \"\\n\", \"`\" + JSON.stringify(tbl) + \"`\")
Sleep(1000)
}
}
策略源码
策略代码十分简单,检测GetCommand
函数的返回值,当有交互消息发送给策略程序时,GetCommand
函数会返回这个消息,然后策略程序根据消息内容作出对应的交易操作。该策略上已经设置了交互按钮,可以测试交互功能,例如运行起来这个策略,给机器人配置发明者量化交易平台的模拟交易所WexApp
。
点击一下交互按钮,测试一下机器人接收到命令买入的功能。
可以看到机器人接收到的命令字符串为:buy:0.01
。
我们只需让TradingView警报触发时,WebHook请求URL中访问发明者量化交易平台扩展API的CommandRobot
接口时,携带的参数为buy:0.01
即可。
设置TradingView的WebHook
回到TradingView中,我们填写WebHook的URL。给access_key
、secret_key
参数填写上自己的API KEY
。method
固定的,我们要访问的就只是CommandRobot
这个扩展API接口,args
参数为[机器人ID,命令字符串]
的形式,机器人ID我们可以通过机器人页面直接获取,如图:
这次我们让信号触发时,买入0.02个币,命令字符串就为:\"buy:0.02\"
。这样WebHook URL就完成了。
https://www.fmz.com/api/v1?access_key=e3809e173e23004821a9bfb6a468e308&secret_key=45a811e0009d91ad21154e79d4074bc6&method=CommandRobot&args=[191755,\"buy:0.02\"]
在TradingView上设置:
等待信号触发…
等待信号触发..
等待信号触发.
…
机器人接收到了信号:
这样就可以使用TradingView上的丰富的图表功能、指标算法配合发明者量化交易平台的策略机器人,实现自己想要的自动化交易,相对于把TradingView上的策略移植成JavaScript、Python语言难度直线下降。
「监控信号下单机器人」策略代码仅供学习研究,实盘使用需自行优化调整,支持期货,建议设置为市价单模式,详见策略代码参数。
抛砖引玉,如有问题、建议欢迎留言。
FMZ量化交易平台邀请链接:https://www.fmz.com/
全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031 币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!
买好币上KuCoin:https://www.kucoin.com/r/af/1f7w3 CoinMarketCap前五的交易所,注册友好操简单快捷!
目前不清退的交易所推荐:
1、全球第二大交易所OKX欧意,邀请链接:https://www.myts3cards.com/cn/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!。
2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gate.win/signup/649183
买好币上币库:https://www.kucoin.com/r/1f7w3
火必所有用户现在可用了,但是要重新注册账号火币:https://www.huobi.com
全球最大交易所币安,
国区邀请链接:https://accounts.suitechsui.mobi/zh-CN/register?ref=16003031 支持86手机号码,网页直接注册。
CommandRobot(RobotId, Cmd)
接口即可,这个接口可以给指定ID的机器人发送交互指令,机器人接收到指令即可执行对应操作(例如下单买入、卖出等)。API KEY
:API KEY
秘钥由access key
和secret key
组成,API KEY
即程序化操作发明者量化交易平台的钥匙,所以一定要妥善保管,切勿泄露。在创建FMZ扩展API KEY
时,可以指定权限,例如上图仅仅给这个API KEY
赋予访问CommandRobot(RobotId, Cmd)
接口的权限,对于本篇例子基于安全考虑,请只给FMZ的扩展API KEY
赋予CommandRobot(RobotId, Cmd)
接口的访问权限。API KEY
直接写在URL的Query中,例如访问发明者量化交易平台扩展API的URL可以写成:https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,\"ok12345\"]
https://www.fmz.com/api/v1
是接口地址,?
之后是Query
,参数access_key
秘钥举例用xxx表示(使用时填写自己的FMZ账号的access_key),参数secret_key
秘钥用yyyy表示(使用时具体填写自己的账号secret_key),参数method
是要访问的扩展API接口具体名称,args
为要调用的method
接口的参数。CommandRobot
这个接口。MACD
指标,然后设置K线周期为1分钟(为了让信号更快的触发,方便演示)。WebHook
,到了这一步可以先不用着急设置,我们先把发明者量化交易平台这边的监控信号的机器人运行起来。// 全局变量
var BUY = \"buy\" // 注意:现货用的命令
var SELL = \"sell\" // 现货用的命令
var LONG = \"long\" // 期货用的命令
var SHORT = \"short\" // 期货用的命令
var COVER_LONG = \"cover_long\" // 期货用的命令
var COVER_SHORT = \"cover_short\" // 期货用的命令
function main() {
// 清空日志,如不需要,可以删除
LogReset(1)
// 设置精度
exchange.SetPrecision(QuotePrecision, BasePrecision)
// 识别期货还是现货
var eType = 0
var eName = exchange.GetName()
var patt = /Futures_/
if (patt.test(eName)) {
Log(\"添加的交易所为期货交易所:\", eName, \"#FF0000\")
eType = 1
if (Ct == \"\") {
throw \"Ct 合约设置为空\"
} else {
Log(exchange.SetContractType(Ct), \"设置合约:\", Ct, \"#FF0000\")
}
} else {
Log(\"添加的交易所为现货交易所:\", eName, \"#32CD32\")
}
var lastMsg = \"\"
var acc = _C(exchange.GetAccount)
while(true) {
var cmd = GetCommand()
if (cmd) {
// 检测交互命令
lastMsg = \"命令:\" + cmd + \"时间:\" + _D()
var arr = cmd.split(\":\")
if (arr.length != 2) {
Log(\"cmd信息有误:\", cmd, \"#FF0000\")
continue
}
var action = arr[0]
var amount = parseFloat(arr[1])
if (eType == 0) {
if (action == BUY) {
var buyInfo = IsMarketOrder ? exchange.Buy(-1, amount) : $.Buy(amount)
Log(\"buyInfo:\", buyInfo)
} else if (action == SELL) {
var sellInfo = IsMarketOrder ? exchange.Sell(-1, amount) : $.Sell(amount)
Log(\"sellInfo:\", sellInfo)
} else {
Log(\"现货交易所不支持!\", \"#FF0000\")
}
} else if (eType == 1) {
var tradeInfo = null
var ticker = _C(exchange.GetTicker)
if (action == LONG) {
exchange.SetDirection(\"buy\")
tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
} else if (action == SHORT) {
exchange.SetDirection(\"sell\")
tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
} else if (action == COVER_LONG) {
exchange.SetDirection(\"closebuy\")
tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
} else if (action == COVER_SHORT) {
exchange.SetDirection(\"closesell\")
tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
} else {
Log(\"期货交易所不支持!\", \"#FF0000\")
}
if (tradeInfo) {
Log(\"tradeInfo:\", tradeInfo)
}
} else {
throw \"eType error, eType:\" + eType
}
acc = _C(exchange.GetAccount)
}
var tbl = {
type : \"table\",
title : \"状态信息\",
cols : [\"数据\"],
rows : []
}
// tbl.rows.push([JSON.stringify(acc)]) // 测试时使用
LogStatus(_D(), eName, \"上次接收到的命令:\", lastMsg, \"\\n\", \"`\" + JSON.stringify(tbl) + \"`\")
Sleep(1000)
}
}
GetCommand
函数的返回值,当有交互消息发送给策略程序时,GetCommand
函数会返回这个消息,然后策略程序根据消息内容作出对应的交易操作。该策略上已经设置了交互按钮,可以测试交互功能,例如运行起来这个策略,给机器人配置发明者量化交易平台的模拟交易所WexApp
。buy:0.01
。CommandRobot
接口时,携带的参数为buy:0.01
即可。access_key
、secret_key
参数填写上自己的API KEY
。method
固定的,我们要访问的就只是CommandRobot
这个扩展API接口,args
参数为[机器人ID,命令字符串]
的形式,机器人ID我们可以通过机器人页面直接获取,如图:这次我们让信号触发时,买入0.02个币,命令字符串就为:
\"buy:0.02\"
。这样WebHook URL就完成了。https://www.fmz.com/api/v1?access_key=e3809e173e23004821a9bfb6a468e308&secret_key=45a811e0009d91ad21154e79d4074bc6&method=CommandRobot&args=[191755,\"buy:0.02\"]
等待信号触发..
等待信号触发.
…
抛砖引玉,如有问题、建议欢迎留言。
买好币上KuCoin:https://www.kucoin.com/r/af/1f7w3 CoinMarketCap前五的交易所,注册友好操简单快捷!
目前不清退的交易所推荐:
1、全球第二大交易所OKX欧意,邀请链接:https://www.myts3cards.com/cn/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!。
2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gate.win/signup/649183
买好币上币库:https://www.kucoin.com/r/1f7w3