TradingView信號執(zhí)行實盤交易的終極方案
經(jīng)常使用TradingView的交易者都知道,TradingView可以推送消息到其它平臺。之前在文庫中也公開了一篇TradingView的信號推送策略,推送的消息內(nèi)容是寫死在請求url中的,有些不靈活。本篇我們重新用一種方式來設(shè)計一個TradingView信號執(zhí)行策略。
場景和原理
可能有新手同學(xué)看到本篇文章題目和上面的描述有些懵,沒關(guān)系!我們先把需求場景、原理闡述清楚。讓您知道我在講什么。OK,我們這就切入主題。
1、需求場景:
說了半天是要這個東西做什么工作呢?簡單說就是我們在TradingView上有很多可以選擇使用的指標、策略、代碼等,這些都可以在TradingView上直接運行,可以畫線、計算、顯示交易信號等。并且TradingView有實時的價格數(shù)據(jù)、充足的K線數(shù)據(jù)方便各種指標計算。TradingView上這些腳本代碼叫做PINE語言,唯獨一點不太方便的就是在TradingView上實盤交易。雖然在FMZ上已經(jīng)支持PINE語言,也可以實盤運行。但是也有TradingView的鐵粉還是希望以TradingView上的圖表發(fā)出的信號去下單交易,那么這個需求也可以通過FMZ來解決。所以本篇就是講解這種解決方案的具體細節(jié)。
2、原理:

整個方案中涉及4個主體,簡單來說分別是:

所以如果想這么玩就需要這幾個準備:
1、TradingView上運行的腳本,負責(zé)發(fā)送信號請求到FMZ的擴展API接口,需要TradingView賬號至少是PRO會員。
2、在FMZ上部署一個托管者程序,需要是可以訪問到交易所接口的那種(例如新加坡、日本、香港等地的服務(wù)器)。
3、在FMZ上配置當(dāng)TradingView信號發(fā)送過來時,要(下單)操作的交易所的API KEY。
4、你需要有個「TradingView信號執(zhí)行策略」,這個策略就是本篇主要講的。
TradingView信號執(zhí)行策略
上一個版本的「TradingView信號執(zhí)行策略」設(shè)計不太靈活,消息只能寫死在TradingView發(fā)送的請求的url中。假如我們希望TradingView推送消息時在Body中寫一些變量信息,這個時候就無能為力了。例如在TradingView上這樣的消息內(nèi)容:

那么TradingView上是可以如圖中設(shè)置這樣,把消息寫在請求的Body中發(fā)送給FMZ的擴展API接口。那FMZ的這個擴展API接口如何調(diào)用呢?
FMZ的一系列擴展API接口中,我們要用到的是CommandRobot
這個接口,通常是這樣調(diào)用這個接口:
這個請求url的query
中的access_key
和secret_key
就是FMZ平臺的擴展API KEY
,這里演示所以設(shè)置為xxx
和yyyy
。那這個KEY怎么創(chuàng)建呢?在這個頁面:https://www.fmz.com/m/account
,創(chuàng)建一個就可以,妥善保管,切勿泄露。

回歸正題,繼續(xù)說CommandRobot
接口的問題。如果需要訪問的是CommandRobot
接口,請求中的method
就設(shè)置為:CommandRobot
。CommandRobot
這個接口的功能就是通過FMZ平臺向某個ID的實盤發(fā)送一個交互消息,所以參數(shù)args
中包含的就是實盤ID和消息,上面這個請求url例子就是向ID為186515
的實盤程序,發(fā)送消息ok12345
。
之前是用這種方式請求FMZ擴展API的CommandRobot接口,消息只能寫死例如上面例子中的ok12345
。如果消息在請求的Body中,就需要用另一種方式:
這樣請求就可以通過FMZ平臺,發(fā)送請求中Body的內(nèi)容作為交互消息給ID為130350
的實盤了。如果TradingView上的消息設(shè)置為:{"close": {{close}}, "name": "aaa"}
,那么ID為130350
的實盤就會收到交互指令:{"close": 39773.75, "name": "aaa"}
為了讓「TradingView信號執(zhí)行策略」收到交互指令時能正確理解TradingView發(fā)送的這個指令,要提前約定一下消息格式:
策略設(shè)計成了多交易所架構(gòu),所以可以在這個策略上配置多個交易所對象,也就是可以控制多個不同賬戶的下單操作。只用在信號結(jié)構(gòu)中Exchange指定要操作的交易所即可,設(shè)置1就是要讓這個信號操作第一個添加的交易所對象對應(yīng)的交易所賬戶。如果要操作的是現(xiàn)貨ContractType設(shè)置為spot,期貨就寫具體合約,例如永續(xù)合約寫swap。市價單價格傳-1就可以了。Action設(shè)置對于期貨、現(xiàn)貨、開倉、平倉都是有區(qū)別的,不能設(shè)置錯。
接下來就可以設(shè)計策略代碼了,完整的策略代碼:
策略參數(shù)和交互:

「TradingView信號執(zhí)行策略」完整策略可以在FMZ策略廣場搜索到。
簡單測試
策略運行前要配置好交易所對象,在策略參數(shù)中設(shè)置好「FMZ平臺的AccessKey」、「FMZ平臺的SecretKey」這兩個參數(shù),不要設(shè)置錯。運行起來顯示:

會依次打印出:在TradingView上需要填寫的WebHook地址、支持的Action指令、消息格式。重要的是WebHook地址:
直接復(fù)制粘貼寫在TradingView上對應(yīng)位置就可以。
如果想模擬TradingView發(fā)送信號,可以點擊策略交互上的TestSignal按鈕:

這個策略會自己發(fā)送一個請求(模擬TradingView發(fā)送信號請求),調(diào)用FMZ的擴展API接口,給策略自己發(fā)送一個消息:
當(dāng)前策略就會收到另一個交互消息,并且執(zhí)行:

并且下單交易。
實際場景中使用TradingView的測試
使用TradingView測試需要TradingView賬號是Pro級別,測試之前有一些前置小知識需要簡單講解一下。
以一個簡單的PINE腳本(TradingView上隨便找的修改了一下)為例子
1、PINE腳本可以在腳本發(fā)出下單指令時附帶一些信息
以下這些是占位符,例如我在報警中「消息」框中寫入{{strategy.order.contracts}}
,那么在觸發(fā)下單時就會發(fā)送消息(根據(jù)報警上的設(shè)置,郵件推送、webhook url請求、彈窗等),消息中就會包含這次執(zhí)行訂單的數(shù)量。
{{strategy.position_size}}
?- 返回Pine中相同關(guān)鍵字的值,即當(dāng)前倉位的大小。{{strategy.order.action}}
?- 為執(zhí)行的訂單返回字符串“buy”或“sell”。{{strategy.order.contracts}}
?- 返回已執(zhí)行訂單的合約數(shù)量。{{strategy.order.price}}
?- 返回執(zhí)行訂單的價格。{{strategy.order.id}}
?- 返回已執(zhí)行訂單的ID(在生成訂單的函數(shù)調(diào)用之一中用作第一個參數(shù)的字符串:strategy.entry,strategy.exit或strategy.order)。{{strategy.order.comment}}
?- 返回已執(zhí)行訂單的注釋(在生成訂單的函數(shù)調(diào)用之一中的comment參數(shù)中使用的字符串:strategy.entry、strategy.exit、或strategy.order)。如果未指定注釋,則將使用strategy.order.id的值。{{strategy.order.alert_message}}
?- 返回alert_message參數(shù)的值,該參數(shù)可以在調(diào)用用于下訂單的函數(shù)之一時在策略的Pine代碼中使用:strategy.entry、strategy.exit、或strategy.order。僅在Pine v4中支持此功能。{{strategy.market_position}}
?- 以字符串形式返回策略的當(dāng)前持倉:“l(fā)ong”、“flat”、或 “short”。{{strategy.market_position_size}}
?- 以絕對值(即非負數(shù))的形式返回當(dāng)前倉位的大小。{{strategy.prev_market_position}}
?- 以字符串形式返回策略的上一個持倉:“l(fā)ong”、“flat”、或 “short”。{{strategy.prev_market_position_size}}
?- 以絕對值(即非負數(shù))的形式返回前一個倉位的大小。
2、結(jié)合「TradingView信號執(zhí)行策略」構(gòu)造消息
3、讓TradingView根據(jù)這個PINE腳本運行時發(fā)出信號,需要在TradingView上加載這個腳本時設(shè)置報警

當(dāng)TradingView上的PINE腳本觸發(fā)交易動作,就會發(fā)送webhook url請求。


FMZ的實盤就會執(zhí)行這個信號。


視頻地址
B站:https://www.bilibili.com/video/BV1BY411d7c6/
文章中的代碼僅供參考,實際使用可以自行調(diào)整、擴展。