Type/to search
8
Follow
1363
Followers
Sử dụng API mở rộng nền tảng giao dịch định lượng Inventor để triển khai giao dịch tín hiệu cảnh báo TradingView (khuyến nghị)
Original
Created 2020-04-29 17:08:27  Updated 2025-05-16 16:29:48
 104
 12874

img

Sử dụng API mở rộng nền tảng giao dịch định lượng Inventor để triển khai giao dịch tín hiệu cảnh báo TradingView

Liên kết video trạm B

API mở rộng của Nền tảng giao dịch định lượng Inventor gần đây đã được nâng cấp để hỗ trợ chế độ truy cập trực tiếp, giúp dễ dàng gửi tín hiệu cảnh báo TradingView đến robot Nền tảng giao dịch định lượng Inventor để thực hiện giao dịch tự động. Nếu bạn vẫn chưa biết API mở rộng là gì, hãy để tôi giải thích chi tiết.

API mở rộng nền tảng giao dịch định lượng của Inventor

Liên kết liên quan đến tài liệu API của Inventor

Chức năng chính của API mở rộng là cung cấp giao diện cho nhiều chức năng khác nhau trên nền tảng giao dịch định lượng của nhà phát minh hoạt động theo chương trình, chẳng hạn như khởi động robot theo lô cùng lúc, khởi động và dừng robot theo thời gian đã lên lịch, đọc thông tin chi tiết về robot, v.v. Chúng tôi sử dụng API mở rộng nền tảng giao dịch định lượng Inventor để triển khai giao dịch tín hiệu cảnh báo TradingView. Yêu cầu này chỉ yêu cầu mở rộng API.CommandRobot(RobotId, Cmd)Giao diện có thể gửi hướng dẫn tương tác đến robot có ID được chỉ định. Robot có thể thực hiện các hoạt động tương ứng (như đặt lệnh mua hoặc bán) sau khi nhận được hướng dẫn.

Để sử dụng API mở rộng, trước tiên bạn cần tạo tài khoản nhà phát minh của riêng mìnhAPI KEY:
img
API KEYChìa khóa làaccess keysecret keythành phần,API KEYĐây là chìa khóa của nền tảng giao dịch định lượng được phát minh bởi các hoạt động được lập trình, do đó phải được lưu giữ cẩn thận và không bao giờ được tiết lộ. Tạo phần mở rộng FMZAPI KEYBạn có thể chỉ định quyền khi bạn sử dụngAPI KEYCấp quyền truy cậpCommandRobot(RobotId, Cmd)Trong ví dụ này, vì lý do bảo mật, chỉ cấp quyền cho tiện ích mở rộng FMZ.API KEYChoCommandRobot(RobotId, Cmd)Quyền truy cập vào giao diện.

Chế độ truy cập trực tiếp cho API mở rộng

Chế độ truy cập trực tiếp có nghĩa làAPI KEYViết trực tiếp vào truy vấn của URL. Ví dụ, URL để truy cập API mở rộng của Inventor Quantitative Trading Platform có thể được viết như sau:

https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"ok12345"]

TRONG,https://www.fmz.com/api/v1là địa chỉ giao diện,?Sau đóQuery,tham sốaccess_keyVí dụ khóa được biểu diễn bằng xxx (điền access_key tài khoản FMZ của bạn khi sử dụng), các tham sốsecret_keyKhóa bí mật được biểu diễn bằng yyyy (điền vào khóa bí mật của tài khoản của bạn khi sử dụng), tham sốmethodLà tên cụ thể của giao diện API mở rộng cần truy cập.argsĐược gọi làmethodCác tham số của giao diện.

Chúng tôi sử dụng TradingView làm nguồn tín hiệu để gửi lệnh giao dịch đến robot nền tảng giao dịch định lượng của nhà phát minh.CommandRobotGiao diện này.

TradingView

Trước hết, bạn cần có tài khoản TradingView Pro. Tính năng WebHood trong báo thức không khả dụng ở cấp độ Cơ bản. Chúng ta sẽ xem biểu đồ trên TradingView.

img

Thêm một chỉ báo vào biểu đồ và các thuật toán script khác. Ở đây chúng tôi sử dụng những thứ được sử dụng phổ biến nhấtMACDĐèn báo, sau đó đặt chu kỳ dòng K thành 1 phút (để kích hoạt tín hiệu nhanh hơn và tạo điều kiện trình diễn).

img

Nhấp chuột phải vào biểu đồ và chọn Thêm cảnh báo từ menu bật lên.

img

Đặt trong cửa sổ bật lên "Cảnh báo"WebHookỞ bước này, bạn không cần phải vội vàng thiết lập. Trước tiên, chúng ta hãy chạy robot theo dõi tín hiệu trên Nền tảng giao dịch định lượng của Inventor.

Robot ra lệnh tín hiệu giám sát

Mã nguồn chiến lược:

javascript
// 全局变量 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) } }

Mã nguồn chiến lược

Mã chiến lược rất đơn giản, phát hiệnGetCommandGiá trị trả về của hàm khi một thông điệp tương tác được gửi đến chương trình chính sách,GetCommandHàm này sẽ trả về tin nhắn này và sau đó chương trình chiến lược sẽ thực hiện các hoạt động giao dịch tương ứng dựa trên nội dung của tin nhắn. Nút tương tác đã được thiết lập trên chiến lược này, có thể kiểm tra chức năng tương tác. Ví dụ, chạy chiến lược này và cấu hình robot với một cuộc trao đổi mô phỏng của Nền tảng giao dịch định lượng Inventor.WexApp

img

Nhấp vào nút tương tác để kiểm tra khả năng tiếp nhận lệnh mua của robot.

img

Bạn có thể thấy chuỗi lệnh mà robot nhận được là:buy:0.01

Chúng ta chỉ cần yêu cầu URL WebHook truy cập API mở rộng nền tảng giao dịch định lượng Inventor khi cảnh báo TradingView được kích hoạt.CommandRobotKhi sử dụng giao diện, các tham số được mang theo làbuy:0.01Vậy thôi.

Thiết lập WebHook của TradingView

Quay lại TradingView, chúng ta điền URL của WebHook. Đưa choaccess_keysecret_keyĐiền thông số của riêng bạnAPI KEYmethodĐã sửa, chúng ta chỉ cần truy cậpCommandRobotGiao diện API mở rộng này,argsCác thông số là[机器人ID,命令字符串]Ở dạng này, chúng ta có thể lấy trực tiếp ID của robot thông qua trang robot như hình minh họa:
img
Lần này chúng ta để tín hiệu kích hoạt và mua 0,02 xu. Chuỗi lệnh là:"buy:0.02". Như vậy là hoàn thành URL WebHook. Phương pháp này chỉ hỗ trợ ghi tín hiệu vào URL. Nếu bạn muốn lấy nội dung của tin nhắn cảnh báo có thể được phát ra bởi chính chiến lược TV, hãy tham khảo https://www.fmz.com/api#�� %B4%E6%8E%A5%E9%AA%8C%E8%AF%81.

https://www.fmz.com/api/v1?access_key=e3809e173e23004821a9bfb6a468e308&secret_key=45a811e0009d91ad21154e79d4074bc6&method=CommandRobot&args=[191755,"buy:0.02"]

Thiết lập trên TradingView:

img

Đang chờ tín hiệu kích hoạt...
Đang chờ tín hiệu kích hoạt..
Đang chờ tín hiệu kích hoạt.
...

img

Robot đã nhận được tín hiệu:

img

Theo cách này, bạn có thể sử dụng các hàm biểu đồ phong phú và thuật toán chỉ báo trên TradingView kết hợp với các robot chiến lược của Nền tảng giao dịch định lượng Inventor để đạt được giao dịch tự động mà bạn muốn. So với việc chuyển các chiến lược trên TradingView sang ngôn ngữ JavaScript và Python, độ khó được giảm đi đáng kể.

Mã chiến lược của "Robot đặt lệnh tín hiệu giám sát" chỉ dành cho mục đích học tập và nghiên cứu. Bạn cần tự tối ưu hóa và điều chỉnh để sử dụng thực tế. Nó hỗ trợ hợp đồng tương lai và nên đặt ở chế độ lệnh thị trường. Xem chiến lược tham số mã để biết chi tiết.
Đây chỉ là điểm khởi đầu. Nếu bạn có bất kỳ câu hỏi hoặc đề xuất nào, vui lòng để lại tin nhắn.

Related Recommendations
Comment
All comments (99)

    // 目前已经不支持:https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"ok12345"]这种方式,需要将参数编码,需要修改如下:
    https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515%2C"ok12345"]

    以前那个多简单明了啊。。。。[186515,"ok12345"]。。。。。为什么一定要修改成这么复杂的啊%5B186515%2C%22ok12345%22%5D

    a year ago

    img

    2 years ago

    我想要实现止盈止损,我应该在警报里添加什么样的参数,还是直接修改代码,这些订单类型fmz应该都是封装好了我直接调试代码对吗

    2 years ago

    条件单下单没有封装,因为交易所不统一,封装的是市价单、限价单。条件单需要单独使用exchange.IO 函数调用交易所接口。需要具体改策略。

    2 years ago

    img

    2 years ago

    处理条件单的代码改动太大了,我想的是能不能对止盈信号做一个延时的处理,但是又不影响下一次信号传进来的处理,这样对代码改动不会太大

    2 years ago

    这里留言太多了,有问题发工单吧,不好找回复。

    2 years ago

    工单都是您处理的吗

    2 years ago

    为什么添加不了期货交易所

    2 years ago

    您好,可以发下具体截图,添加哪个交易所?

    2 years ago

    您好,我已经实现了添加交易所,但是我要怎么实现多个交易对呢,现在这个实盘能识别btcusdt

    2 years ago

    这个策略方案是一个简单的例子,只能做单个品种,多品种的可以参考另一个例子:
    https://www.fmz.com/digest-topic/9794

    2 years ago

    我在测试代码里不小心发送了错误的交易对,然后代码就开始循环报错,好像是一直在请求,只有重启实盘,我想知道是哪里出了问题

    2 years ago

    可以发具体场景。

    2 years ago

    应该是交易对、合约代码搞错了,检查下。

    2 years ago

    "Flag":"{{strategy.order.id}}",
    "Exchange":1,
    "Currency":"1000SATS_USDT",
    "ContractType":"swap",
    "Price":"{{close}}",
    "Action":"long",
    "Amount":"33333"
    }我的信号写成close了,为什么日志显示无法获取价格呢

    2 years ago

    可以发具体场景。您可以具体调试下代码找找问题。这个策略公开的,可以具体自行优化改动。

    2 years ago

    这个代码就是策略交互这里,我测试1000sats这个交易对,我想的就是用收盘价开单,市价太贵了,但是会报错,我代码水平太差了,gpt用了找不出来具体的问题

    2 years ago

    这里测试信号指的是最终发到FMZ上的信息,你在trading view 上设置webhook 的时候写的是{{close}} 它实际发送的时候就是具体价格了。所以你在这里测试的时候只能填写具体价格,FMZ上没有、也不识别这个{{close}}占位符。

    2 years ago

    明白了,感谢!我用tv试试

    2 years ago

    测试信号的时候填写具体价格,FMZ上不会识别你这个{{close}} ,这个是trading view上的占位符,文章看下,看明白就懂了。

    2 years ago

    这是您文章里关于这个的例子,因为这里-1都能识别是市价单,中间关于{close}也能识别,但是我查平台的api文档查不到什么对应市价单

    2 years ago

    价格传-1就是市价单。文档上有。

    2 years ago

    我要怎么实现处理多个警报呢,比如同一时间,同一交易对,或者不同交易对,有多个警报传过来,但是我看我只能每秒处理一个,而且没有办法排序

    2 years ago

    Trading view 的webhook 请求发送到FMZ平台,平台底层有消息队列,是一个一个处理交互的。

    2 years ago

    上面回复过您了,您看下。

    2 years ago

    请问能不能对接一下deepcoin交易所,十分感谢

    4 years ago

    deep自己都没开api咋对接?

    4 years ago

    显得你很能了是不是?我问版主关你屁事啊

    4 years ago

    没有API接口的是没办法~

    4 years ago

    我社区里发了个问题,能帮我看看不

    4 years ago

    这个要看有多少用户需求的。

    4 years ago

    发明者什么时候能对接币赢合约期货啊?币安和欧意返手续费太少了,高频机器人,手续费太伤了

    4 years ago

    您好,是需要coinw这个交易所合约接入吗?还没对这个交易所评估过。

    4 years ago

    是的小梦老师,如果接入,会有很多量化接入进来,因为币赢返佣80%

    4 years ago

    尴尬了,您这边确定币赢合约有API接口吗?

    4 years ago

    有啊 img 我们可以自己用通用协议绑定吧?只是要求要填IP地址,这个IP地址要填哪个地址呢?

    API 入口链接:https://coinw.pw/API

    4 years ago

    这个地址打不开哇。没有合约的API文档呀。

    4 years ago

    https://www.coinw.fit/front/API 这个网址有api,要梯子才能打开 img

    4 years ago

    这是现货API接口,老板! #_#!【大汗】
    现货FMZ已经支持的。

    4 years ago

    那就没办法咯

    4 years ago

    是呀,我也问过他们客服了,压根没开合约的API接口哇。。。。

    4 years ago

    小梦老师:我想在你公布的机器人上面加上 开单后挂止盈止损功能,要在哪里加?止盈止损功能的内在函数,FMZ上有吗?

    4 years ago

    这个止盈止损要具体修改策略了,不是一两句就可以实现的。
    FMZ直接支持PINE语言了,直接跑PINE脚本比较简单。

    4 years ago

    https://www.coinw.fit/front/API 这个网址有api,要梯子才能打开

    4 years ago

    这个是coinw的现货API哇,coinw现货FMZ是已经支持的了,他们合约都没有接口的。您最好咨询下coinw。我问了他们客服,说是没有合约API。

    4 years ago

    发明者什么时候能对接币赢合约期货啊?币安和欧意返手续费太少了,高频机器人,手续费太伤了

    4 years ago

    你好大佬,我做的合约策略,开仓后有时中途会加仓,那么我最后要平仓的时候,用cover_long怎么平掉全部的仓位(因为不知道中间会加几次),"cover_long:1"里面的1改成什么,跪求代码

    5 years ago

    这个你可以具体设计的,比如你设计 请求里 cover_long:1, 改成 cover_long:all , 这样你在FMZ的这个 监听策略里把收到交互cover_long时修改一下, 判断如果是all,就全部平仓。要实现这个是要修改这个策略的。

    // 全局变量 var BUY = "buy" // 注意:现货用的命令 var SELL = "sell" // 现货用的命令 var LONG = "long" // 期货用的命令 var SHORT = "short" // 期货用的命令 var COVER_LONG = "cover_long" // 期货用的命令 var COVER_SHORT = "cover_short" // 期货用的命令 ...... .... .. . } 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) { // COVER_LONG 就是 “cover_long” ,判断到是这个action ,进入这里的if // 这里你再具体判断 all 之类的参数,去做全部平仓的操作设计,具体编写 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) }
    5 years ago

    请问解决了吗?同问

    5 years ago

    请问你解决了吗。。。我也遇到这个问题了

    5 years ago

    我的TV策略消息是这样的:订单{{strategy.order.action}}@{{strategy.order.contracts}}成交{{ticker}}。新策略仓位{{strategy.position_size}}
    如果我想做合约的话,是不是要添加4个警报呢?做多、平多、做空、开空
    webhook能不能引用策略里面的字段呢?还是要我写死才行?webhook里面的4种方式long、cover_long\short、cover_short怎么样才能和警报里面的消息对上吗?

    5 years ago

    兄弟,TV的策略直接链接FMZ的这个你弄成功了吗?可以的话指导一下小弟啊,我弄来弄去还是没弄好!

    5 years ago

    请问怎么在tv,策略上的开平仓警报怎么构建,webhook url

    5 years ago

    使用FMZ的扩展API接收TV请求,可以获取Body内容,参看:https://www.fmz.com/api#直接验证
    现在TV发出请求的url里,body里的数据都可以收到了。

    5 years ago

    使用FMZ的扩展API接收TV请求,可以获取Body内容,参看:https://www.fmz.com/api#直接验证

    5 years ago

    我想把 tv的消息文本也传过来野,可惜不能携带,只能url携带参数,不是针对tradingview信息。

    5 years ago

    有个直连方式的可以获取到请求的Body里的信息,在策略广场搜索下找下。

    5 years ago

    请问:[1234567,"buy:50"] 这个是买入价值50usdt的BTC,
    但当我卖出时,[1234567,"sell:50"] 却显示【错误:Sell(-1, 50): insufficient balance】
    那我如何设置,才能全部卖掉第一次买的BTC呢?

    5 years ago

    修改策略,让50除以当时价格。

    5 years ago

    这个功能强啊!

    5 years ago

    老师您好,我按照您的步骤一步一步照搬下来,就是服务器选用的是发明者自带的服务器,但是TV那边已经发信号了但是发明者这边的机器人还是不执行信号命令,是不是因为服务器的原因?请您答疑!!

    5 years ago

    要看具体问题,你的机器人上配置的交易所是现货、期货?机器人日志上显示什么?

    5 years ago

    配置的是币安的现货,机器人日志上上什么提示都没有,TV那里就是触发条件和webhook上设置一下就可以了吧?

    5 years ago

    如果收到命令,机器人状态栏上,“上次收到命令” 这个地方会显示收到的命令。
    检查下是不是哪里没有配置对。

    5 years ago

    厉害了,收藏慢慢看

    5 years ago

    img img img img 我按照步骤添加的合约代码,为什么还是显示错误,是那一步做错了吗?

    5 years ago

    老哥,API KEY截图要打码,安全第一。

    5 years ago

    日志上显示 Binance 说明添加的交易所对象是 币安现货。但是你的策略设置了期货合约代码,所以报错。

    5 years ago

    img 我在币安的API权限都开了,我也开通的合约账户,但是策略运行时总是添加不了期货交易所,是代码出问题了吗?

    5 years ago

    img
    你交易所添加错了。

    5 years ago

    比如tv策略里有多头空头的指示,这个会根据tv策略里的提示进行开空、开多、平仓么?

    5 years ago

    需要在Trading view上设置报警,报警设置上填写webhook地址。可以实现开多开空平仓。

    5 years ago

    期货合约代码写什么。

    6 years ago

    https://www.fmz.com/api#exchange.setcontracttype... 这个函数描述中有,可以看下。

    6 years ago

    期货的视频教程在哪里

    6 years ago

    期货现货使用是一样的, 只是链接里面 参数替换一下而已。
    var BUY = "buy"
    var SELL = "sell"
    var LONG = "long"
    var SHORT = "short"
    var COVER_LONG = "cover_long"
    var COVER_SHORT = "cover_short"
    long就是开多头仓位,short就是开空头仓位, cover_long 就是平多头,cover_short 平空头。

    https://www.fmz.com/api/v1?access_key=e3809e173e23004821a9bfb6a468e308&secret_key=45a811e0009d91ad21154e79d4074bc6&method=CommandRobot&args=[191755,"buy:0.02"]

    链接里面buy替换一下而已。

    6 years ago

    币安期货不支持吗?能支持的是哪个交易所

    6 years ago

    都可以, 期货用期货的指令, 不是sell buy 了。 具体看下代码。

    6 years ago

    如果是要平多仓同时开多,也就是信号设置是 cover_long:10 和 short:10,但是TV里设置后只能执行一个信号,这不是丢单吗?请问这个问题怎么解决

    6 years ago

    TV上添加两个报警。一个平多 ,一个开空。TV可以添加N个报警。

    6 years ago

    args=[191755,"buy:0.02"],这里增加参数,做多同时可做空也可省略其中一个参数会不会更好?多个TV报警会不会出现意外两个相同点位的报警只发一个过来?

    5 years ago

    TV的报警发送稳定性不太清楚,这个要看TV那边。

    5 years ago

    合约怎么搞啊?编程小白,英文除了拼音字母啥也不认识。

    6 years ago

    有视频教程可以看下,B站的。

    6 years ago

    B站 视频 叫什么

    6 years ago

    本篇文章开头就有链接。

    6 years ago

    那是设置的现货的操作代码,请问期货应该咋个重新编写代码

    6 years ago

    期货设置合约就行了, 策略参数上,另外 在TV 上配置的 webhook url 里面要用 期货的命令 long, cover_long之类的。

    6 years ago
  • 1
  • 2
  • Go toPage
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)