TradingViewWebHook信号执行策略(教学)

教学 辅助交易
创建日期: 2020-04-28 17:01:35 最后修改: 2020-07-29 17:10:43
复制: 513 点击次数: 6840
4
关注
1075
关注者

相关文章:https://www.fmz.com/bbs-topic/5533 B站视频链接:https://www.bilibili.com/video/BV1Wk4y1k7zz/

  • 2020.7.29 更新 增加SPK , BPK 两条指令,分别对应:卖出平多仓之后卖出开空仓,买入平空仓之后买入开多仓。
策略源码
/*
- 交互命令字符串格式
  action:amount
  action: buy , sell , long , short , cover_long , cover_short, spk , bpk
- 交易所类型
  eType变量取值: 0 spot , 1 futures

- TV文档链接
  https://www.tradingview.com/pine-script-docs/en/v4/Quickstart_guide.html
  https://cn.tradingview.com/chart/8xfTuX7F/

- TV webhook 发送请求
  https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"action:amount"]

- 引用类库
  引用数字货币交易类库
*/

// 参数
// var IsMarketOrder = false 
// var QuotePrecision = 2
// var BasePrecision = 2

// 期货参数
// var Ct = ""


// 全局变量
var BUY = "buy"
var SELL = "sell"
var LONG = "long"
var SHORT = "short"
var COVER_LONG = "cover_long"
var COVER_SHORT = "cover_short"
var SPK = "spk"
var BPK = "bpk"


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 if (action == SPK) {   // 卖出平多仓,卖出开空仓
                    exchange.SetDirection("closebuy")
                    var tradeInfo1 = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
                    exchange.SetDirection("sell")
                    var tradeInfo2 = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
                    tradeInfo = [tradeInfo1, tradeInfo2]
                } else if (action == BPK) {   // 买入平空仓,买入开多仓
                    exchange.SetDirection("closesell")
                    var tradeInfo1 = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
                    exchange.SetDirection("buy")
                    var tradeInfo2 = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
                    tradeInfo = [tradeInfo1, tradeInfo2]
                } 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)
    }
}

相关推荐
更多内容
全部留言
avatar of superon
superon
看了一晚上还是没看懂,能不能代写一下 聯繫一下V:maybeyeah
2021-10-27 16:56:36
avatar of zz791377920
zz791377920
这个支持哪些交易所?
2021-10-15 19:06:12
avatar of zz791377920
zz791377920
现货交易数量填的10,下单的时候变成金额10u,这是哪里的设置问题吗?
2021-09-17 03:43:51
avatar of 刘哲1
刘哲1
为什么上来就报错,ReferenceError: 'QuotePrecision' is not defined at main (__FILE__:13)
2021-09-02 12:43:31
avatar of kukerzzz
kukerzzz
问一下合约交易里面只能设置数量吗,如果每次都满仓交易该如何写
2021-07-31 17:39:45
avatar of 15937556103
15937556103
老师 能不能发一个关于合约的完整策略
2021-07-02 01:15:36
avatar of 15937556103
15937556103
/upload/asset/203b175e3c2c22ac9681c.png 为什么一直都是这样
2021-07-02 01:14:51
avatar of tobey2022
tobey2022
你好,能在单个机器人上放多个交易对吗?然后的预警的URL增加交易对名称,一个机器人运行多个交易对的预警
2021-05-30 20:37:21
avatar of le7mars
le7mars
long,short,cover_long,cover_SHORT,是要分别添加webhook吗
2021-05-03 08:26:07
avatar of sbwffg198212
sbwffg198212
这是什么意思啊,期货交易所不支持,我想要做币安的永续合约BTC_USDT 要怎么设置啊
2021-04-04 14:07:07
avatar of sbwffg198212
sbwffg198212
这是什么意思啊,期货交易所不支持,我想要做币安的永续合约BTC_USDT 要怎么设置啊
2021-04-04 14:07:04
avatar of sbwffg198212
sbwffg198212
/upload/asset/1cd7a606f646b8c0d32be.png
2021-04-04 14:06:07
avatar of 反向Q
反向Q
老哥,可否出一期关于如何添加和设置期货合约的教学视频,最好说的详细一些。
2021-01-26 02:43:14
avatar of sug210
sug210
/upload/asset/125e8fed0f51ab1f8122e.jpg 用spk指令报错
2020-12-07 02:04:44
avatar of 夜空
夜空
如何解决TV发出警报,FMZ偶尔接收不到信号的问题?特别是TV的两个策略在同一时间点给FMZ两个机器人发出信号,时不时有一个机器人接收不到。 而且已经注册了两个TV账号来发送,还是会出现这个问题,不过FMZ托管的服务器是同一个。 /upload/asset/1796a4b1725a66d015a9f.png /upload/asset/179ca7beaa5e8f9dd79cf.png
2020-10-31 08:55:02
avatar of 半岛未凉
半岛未凉
spk ,bpk后面要加数量吗? 如TV信号有多次报警开多单后,能一次性平前面开多单的总数量,空单一样。代码怎么样写
2020-10-05 16:07:55
avatar of melo23
melo23
合约 倍数 在哪里选择
2020-09-17 18:56:03
avatar of 发明者量化-小小梦
发明者量化-小小梦
看下策略参数,如果你添加的是期货交易所对象,要设置合约。否则机器人不知道要操作什么合约。
2020-07-23 08:59:00
avatar of Richie
Richie
您好 提醒错误 ct 合约设置为空是为什么?
2020-07-22 12:44:25
avatar of 发明者量化-小小梦
发明者量化-小小梦
都可以,但是参数、TV上的webhook 设置可能要根据做的品种调整。
2021-10-15 22:04:40
avatar of 发明者量化-小小梦
发明者量化-小小梦
现货市价单的买单,下单量是金额。
2021-09-17 09:06:34
avatar of 发明者量化-小小梦
发明者量化-小小梦
估计你那里弄错了,在按照API 文档检查下。策略是可以正常运行的。
2021-09-03 13:49:09
avatar of 刘哲1
刘哲1
重新换了key也不行,是不是必须复制完整策略才能调起来
2021-09-03 12:47:25
avatar of 发明者量化-小小梦
发明者量化-小小梦
code 1 是API KEY 错了,检查下.
2021-09-03 09:04:38
avatar of 刘哲1
刘哲1
现在我在平台内测试是能下单,但是用扩展api一调就报错,返回,code:1,data:[],我是用链接直接访问的,类似于浏览器打开链接
2021-09-03 08:45:48
avatar of 发明者量化-小小梦
发明者量化-小小梦
不要只复制代码,复制完整的策略。
2021-09-02 13:35:15
avatar of 发明者量化-小小梦
发明者量化-小小梦
TV发送的信号,里面写下单多少,策略就下单多少。如果要梭哈之类的,需要改策略。
2021-08-01 08:38:55
avatar of 发明者量化-小小梦
发明者量化-小小梦
这个策略本身就是一个完整的例子,可以跑期货,你命令用错了, 检查下。
2021-07-02 09:16:31
avatar of 发明者量化-小小梦
发明者量化-小小梦
可以跑期货的,你webhook回调里用的命令错了,要用期货的命令, 仔细看代码。
2021-07-02 09:15:54
avatar of tobey2022
tobey2022
好的,已经在众包板块发布了信息,期望你的成果和合作,thanks.
2021-05-31 21:25:52
avatar of 发明者量化-小小梦
发明者量化-小小梦
这个不修改了,可以众包板块发布信息,有开发者会接单。
2021-05-31 17:05:13
avatar of tobey2022
tobey2022
可以直接发给你修改吗?因为其它人可能还要熟悉一段时间,
2021-05-31 16:48:16
avatar of 发明者量化-小小梦
发明者量化-小小梦
平台上有众包板块,可以在里面发布需求。
2021-05-31 15:20:46
avatar of tobey2022
tobey2022
@小小梦,能否修改一版这样的策略,如果可行的话,当然可以付费购买,期望你的成果和回复,thanks.
2021-05-31 15:17:51
avatar of 发明者量化-小小梦
发明者量化-小小梦
可以,但是需要修改这个策略。
2021-05-31 09:08:38
avatar of 发明者量化-小小梦
发明者量化-小小梦
没太明白你的意思。。
2021-05-26 14:19:56
avatar of le7mars
le7mars
我按照long、short、coverlong、covershort设了四个警报,但是由于本身的是strategy不是study,这四个指令每次都是同时触发……
2021-05-26 07:01:06
avatar of le7mars
le7mars
怎么区分?用long或 short区分?
2021-05-26 02:28:02
avatar of 发明者量化-小小梦
发明者量化-小小梦
报警webhook的URL里区分就可以了。
2021-05-21 14:34:57
avatar of le7mars
le7mars
发现问题了,只能接收tradingview指标的交易警报,但是我写的strategy,设置了4个不同的警报,但是貌似无法识别,当信号产生时,四个信号同时开单。。。。
2021-05-21 14:02:02
avatar of 发明者量化-小小梦
发明者量化-小小梦
TV上报警发送请求 ``` https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"action:amount"] ``` 其中action这个地方你写什么指令,机器人就收到什么指令。例如: ``` https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"long:1"] ```
2021-05-05 09:22:14
avatar of 发明者量化-小小梦
发明者量化-小小梦
先看下FMZ 初级教程, 要操作期货交易所账号, 先配置期货交易所。然后机器人上添加期货交易所对象。
2021-04-04 16:33:49
avatar of sbwffg198212
sbwffg198212
/upload/asset/1ccc5603d54593dcba809.png
2021-04-04 16:15:50
avatar of sbwffg198212
sbwffg198212
我就是改了这些地方,大神帮我看下哪里不对啊,我不会 添加期货交易所对象,参数上设置合约,永续是swap, 币本位是XXX_USD, U本位是XXX_USDT。
2021-04-04 16:15:19
avatar of 发明者量化-小小梦
发明者量化-小小梦
添加期货交易所对象,参数上设置合约,永续是swap, 币本位是XXX_USD, U本位是XXX_USDT。
2021-04-04 14:24:27
avatar of 发明者量化-小小梦
发明者量化-小小梦
检查下是不是没有持仓的情况下去调用 SPK了。
2020-12-07 09:19:50
avatar of 发明者量化-小小梦
发明者量化-小小梦
可以用FMZ平台文库中介绍的TV直连方式,https://www.fmz.com/digest-topic/5969 。
2020-11-02 09:15:05
avatar of 发明者量化-小小梦
发明者量化-小小梦
杠杆值在交易所可以设置好。或者在策略代码里面下单之前```exchange.SetMarginLevel() ```设置杠杆值
2020-09-17 22:11:16
avatar of 发明者量化-小小梦
发明者量化-小小梦
跑合约交易所,要设置合约,否则不知道要操作什么合约。
2020-08-29 09:07:47
avatar of 发明者量化-小小梦
发明者量化-小小梦
``` https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"action:amount"] ``` action 写成 spk ,bpk
2020-08-29 09:06:08
avatar of 夜空
夜空
我想知道针对SPK和BPK,TV那边怎么设置
2020-08-29 00:27:49