iT邦幫忙

2022 iThome 鐵人賽

1
Software Development

從 Node.js 開發者到量化交易者:打造屬於自己的投資系統系列 第 31

Day 31 - 設定交易訊號:與 TradingView Webhooks 共舞

  • 分享至 

  • xImage
  •  

本系列文已經在昨天完成鐵人賽,今天這篇是額外的補充。在 Day 26 - 測試交易策略:TradingView 策略測試器 我們介紹 TradingView 這個平台工具,在 TradingView 除了可以觀看圖表和各式技術指標、測試交易策略外,還提供了 快訊 (Alerts) 的與 Webhooks 的功能。不過 Webhooks 只有對 TradingView 的付費方案用戶提供該服務,這也是筆者將這篇文章放在額外補充的原因。

什麼是 TradingView 快訊?

TradingView 快訊(Alerts)可以用於即時行情監控,當股價滿足設定條件時,TradingView 快訊會立即發出通知。TradingView 快訊除了以 App 通知、Web 顯示彈出視窗以及發送電郵外,還可以設定以 Webhooks 發出快訊。

根據 TradingView 用戶所屬的 方案,提供不同的快訊數量:

  • 免費用戶只能建立 1 個快訊。
  • Pro 用戶可以立建 2 0個快訊。
  • Pro+ 用戶可以建立 100 個快訊
  • Premium 用戶可以建立 400 個快訊,且可以額外擁有秒級快訊。

什麼是 TradingView Webhooks?

TradingView Webhooks 可以在每次觸發快訊時,將 POST 請求發送到某個 URL。我們可以使用 Webhooks 作為交易訊號,當觸發買賣條件時,就向 Trader API 請求進行下單委託。

不過 TradingView 並沒有向免費方案用戶提供這項服務,如果願意花點錢升級成 Pro 以上的方案,Webhooks 確實是實現自動化交易非常實用的工具。目前 TradingView 提供的臺灣股市行情數據,證券櫃檯買賣中心 掛牌的股票(上櫃、興櫃)是即時行情,臺灣證券交易所 掛牌的股票(上市)則延遲行情 15 分鐘。如果要取得上市股票的最新報價,需要額外付費訂閱臺灣證券交易所的行情數據。

Trader x TradingView 系統概觀

結合 Trader 應用伺服器與 TradingView 互動的系統環境圖描繪如下:

https://ithelp.ithome.com.tw/upload/images/20221001/20150150COlX35SkIY.png

使用者需要在 TradingView 上設定快訊與 Webhooks。當快訊條件觸發後,資料處理流程如下:

  • ① TradingView → Trader API:TradingView 向 Trader API(Webhook URL)發送請求,進行下單委託。
  • ② Trader API → Trader Service:Trader Service 處理使用者向 Trader API 發送的請求。
  • ③ Trader Service → FugleTrade:Trader Service 向富果交易系統請求下單委託。
  • ④ FugleTrade → E.SUN Securities:富果交易系統向玉山證券驗章並轉送下單委託。
  • ⑤ E.SUN Securities → Exchange:玉山證券向交易所發出下單委託電文。
  • ⑥ Exchange → E.SUN Securities:玉山證券收到交易所的委託或成交回報電文。
  • ⑦ E.SUN Securities → FugleTrade:FugleTrade 接收來自交易所及玉山證券的委託或成交回報。
  • ⑧ FugleTrade → Trader Service:Trader Service 與富果交易系統 Streamer 連線,接收委託及成交回報。
  • ⑨ Trader Service → LINE Notify:當收到委託或成交回報時,Trader Service 會向 LINE Notify 請求發送推播訊息。
  • ⑩ LINE Notify → User:LINE Notify 收到推播請求後,會將訊息發送給使用者。

使用 ngrok 測試 Webhook URL

ngrok 是一個跨平台的應用程式,可以將本地端伺服器公開到 Internet,而讓外部網路存取內部網路伺服器。

由於 Webhook 提供者當在發生某些事件時會傳送 POST 請求,所以 Webhook URL 必須是可以在網際網路上公開造訪的。當我們在本地端伺服器測試時 Webhook 時,ngrok 就是一個非常好用的工具,可以快速將 localhost 透過 ngrok 作爲反向代理讓外部存取。

要取得 ngrok 可以至官方網站 Download 頁面下載,根據您的作業系統平台依照指令操作即可安裝 ngrok。

當 ngrok 安裝完成後,可以打開終端機使用 ngrok 指令啟用反向代理:

$ ngrok http 3001

https://ithelp.ithome.com.tw/upload/images/20221001/20150150gIOpbAzFh1.png

以上圖為例,網址 https://5436-2001-b011-1-5f5d-00-1005.jp.ngrok.io 指向 http://localhost:3001。在開發測試時,可以使用 https://5436-2001-b011-1-5f5d-00-1005.jp.ngrok.io 作爲 Webhook URL。

ngrok 適用於本地端開發,如果您的應用程式已經上線,則可以忽略這個步驟。

設定 TradingView 快訊與 Webhooks

我們示範如何在 TradingView 上建立快訊與 Webhooks 設定。進入 TradingView 網站後,在畫面右手邊可以找到快訊。

https://ithelp.ithome.com.tw/upload/images/20221001/20150150qvmbQzCnQY.png

我們必須進入圖表才能設定快訊,以下以 台積電 (2330) 為例,設定觸發條件、選項、到期時間和快訊動作。請在快訊動作勾選「Webhook URL」。

https://ithelp.ithome.com.tw/upload/images/20221001/201501501oBN9WlwHo.png

快訊動作選擇 Webhook URL 後,設定快訊名稱和訊息,並且在「Webhook URL」填入 Trader API 下單委託的 URL。以使用 ngork 為例,如果 Forwarding 本地端伺服器的網址是 https://5436-2001-b011-1-5f5d-00-1005.jp.ngrok.io,請在「Webhook URL」填入:

https://5436-2001-b011-1-5f5d-00-1005.jp.ngrok.io/traders/orders

在「訊息」填入下單委託資訊:

{
  "stockNo": "2330",
  "buySell": "B",
  "price": 500,
  "quantity": 1,
  "apCode": "1",
  "priceFlag": "0",
  "bsFlag": "R",
  "trade": "0"
}

https://ithelp.ithome.com.tw/upload/images/20221001/20150150SRYB6ODsqh.png

以上設定範例表示,當台積電股價向上穿越 500 元時,向 Webhook URL 發出 POST 請求下單委託,限價 500 元買進 1 張台積電股票。按下「Create」之後,就可以建立 TradingView 快訊以及 Webhook 設定。

透過 TradingView Webhook 執行自動化下單

當快訊觸發時,TradingView 會透過以下 IP 位址向 Webhook URL 發出請求:

  • 52.89.214.238
  • 34.212.75.30
  • 54.218.53.128
  • 52.32.178.7

我們需要設定「白名單」允許這些 IP 存取 Trader API。開啟專案目錄下的 .env 檔案,將這些 IP 至加入 ALLOWED_IPS 的環境變數設定,並且每個 IP 位址以逗號 , 分隔:

ALLOWED_IPS="52.89.214.238,34.212.75.30,54.218.53.128,52.32.178.7"

設定完成後就可以啟動 Trader 應用程式:

$ npm start trader

當快訊條件觸發時,TradingView 就會向 Webhook URL 發出 POST 請求。當 Trader API 收到請求後,就會進行下單委託動作,並於收到委託回報時,透過 LINE Notify 向使用者推播訊息:

https://ithelp.ithome.com.tw/upload/images/20221001/20150150fs7c1m04h1.png

TradingView 擁有全球市場的行情數據,並且可以在 TradingView 上建立技術指標與交易策略。透過設定快訊(Alerts)與 Webhooks 製作交易訊號,只要結合券商交易 API,就可以很容易地實現自動化下單服務。

TradingView 提供強大的圖表功能、股票篩選器、策略測試器以及快訊等豐富的功能,對於程式交易者來說是實用的利器。不過 TradingView Webhooks 並非免費服務,這裡就提供另一種實現自動化交易的方案給讀者參考。

本日小結

  • TradingView 快訊可以用於即時行情監控,當股價滿足設定條件時,TradingView 快訊會立即發出通知。
  • TradingView 快訊可以設定 Webhook URL,在每次觸發快訊時,將 POST 請求發送到某個 URL。
  • TradingView Webhooks 非免費服務,必須是 Pro 以上方案才可以設定 Webhooks。
  • 在本地端測試 Webhook URL 時可以使用 ngrok,將本地端伺服器公開到外部網路。
  • 瞭解 Trader 結合 TradingView Webhooks 進行自動化下單的資料處理流程。
  • 暸解如何在 TradingView 上設定快訊與 Webhooks 作爲交易訊號,並結合 Trader API 進行自動化下單。

Node.js 量化投資全攻略:從資料收集到自動化交易系統建構實戰
本系列文已正式出版為《Node.js 量化投資全攻略:從資料收集到自動化交易系統建構實戰》。本書新增了全新內容和實用範例,為你提供更深入的學習體驗!歡迎參考選購,開始你的量化投資之旅!
天瓏網路書店連結:https://www.tenlong.com.tw/products/9786263336070


上一篇
Day 30 - 應用程式部署及結語
系列文
從 Node.js 開發者到量化交易者:打造屬於自己的投資系統31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言