iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
Software Development

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

Day 26 - 測試交易策略:TradingView 策略測試器

  • 分享至 

  • xImage
  •  

在前兩天的內容,我們以富果行情 API 結合 LINE Notify 為例,實現股票即時行情監控系統,讓投資人可以更有效地掌握進場與出場時機。今天我們要進一步來談關於交易系統的建立。軟體系統上線前,會經過不同階段的測試,確保產出的品質可以滿足需求,機械化的程式交易也不例外,在使用真金白銀進場前,最好先進行測試,驗證交易策略是否有效。

主觀交易者 vs. 系統交易者

在金融市場中,主要有兩類交易者,一種是 主觀交易者,另一種是 系統交易者。主觀交易者的買賣決策主要依賴個人的判斷,容易受消息影響以及個人情緒的干擾;系統交易者則依靠機械化交易系統來獲取買賣信號,在市場上執行訂單。相較主觀交易,機械化交易系統有以下優勢:

  • 實際進行交易之前,可以利用歷史資料進行測試。
  • 提高客觀性,減少情緒的干擾。
  • 騰出時間做研究,掌握更多的機會。

程式交易就是達成機械化交易的一種手段,當交易系統發出買賣訊號時,讓電腦程式自動執行下單。

如何建構交易系統

設計交易系統的目標,不是在歷史資料測試過程中達成最高的報酬,而是找到某種適用於過去的健全概念,顯示這種概念也非常可能適用於未來。根據 約翰· 墨菲 在《金融市場技術分析》的說明,建構交易系統的五個步驟是:

  1. 從某個概念著手(Start with a concept):這是一個發展交易風格的階段,一般可以分為 順勢系統 以及 逆勢系統。順勢系統順著主要趨勢方向交易,底部形成之後買進,頭部形成之後賣出;逆勢系統主要有三種策略,一是在跌勢的支撐區買進,在漲勢的壓力區賣出;二是在多頭市場的拉回走勢中買進,在空頭市場的反彈走勢中賣出;三是根據擺盪指標的超賣區買進,在超賣區賣出。
  2. 將概念轉換於一組客觀的法則(Turn it into a set of objective rules):就是將概念轉換成可以被執行的交易策略,例如基於順勢交易系統的移動平均線策略,突破 60 天移動平均線時買進,跌破 60 天移動平均線時賣出。
  3. 利用視覺觀察走勢圖上的運作結果(Visually check it out on the charts):將上述步驟的客觀法則套用在價格走勢圖上,觀察實際產生的交易訊號。
  4. 透過電腦進行正式測試(Formally test it with a computer):交易策略的測試主要有兩種,包含回測(back-testing)和前測(forward-testing)。回測是利用過去的歷史資料,檢視交易策略的執行情況並做績效評估;前測是運用模擬交易或使用真實資金建立小規模部位,在市場上直接做交易。回測是測試交易策略一個重要的過程,無法通過測試則交易策略就沒有執行的必要。
  5. 評估結果(Evalute the results):交易者必須對測試結果滿意,否則不可能順利在實際交易中運用。假如往前回測得到了滿意的結果,再做往後測試如果也符合預期,就可以增強對該交易策略的信心,然後慢慢增加部位規模。

雖然對交易策略進行測試是一個重要的步驟,但在進行測試的過程中,不必過於執著績效的最佳化。因為運用歷史資料進行最佳化,經常造成不切實際的預期,實際交易通常都無法複製這些最佳化的績效。就如同我們常看到的投資警語是「過去績效不代表未來績效」。

如何測試交易策略

回測對於建立交易系統是一個重要的過程,如何進行回測驗證交易想法呢?關於回測工具,在 Python 社群 backtrader 是很多人使用的回測框架。在 Node.js 也有人開發了 grademark 套件可以進行回溯測試。不過,使用這些工具的缺點是必須先收集大量的歷史資料,還要撰寫交易策略後才能進行績效評估,相當耗時。出於這個原因,筆者已習慣使用 TradingView 的策略測試器作為主要回測工具。

什麼是 TradingView?

TradingView 是一個為交易者和投資者提供社群網路服務的平台,包含指數、股票、期貨、債券、外匯、加密貨幣等資料一應俱全,除了可以使用強大的圖表功能進行投資分析,也可以使用 股票篩選器 找出投資標的,還可以使用 策略測試器 對交易策略進行回測。在上述提到建構交易系統的 3、4、5 步驟皆可以在 TradingView 上執行,一有交易想法馬上可以驗證是否可行,是十分強大的投資工具。

TradingView 策略測試器

TradingView 的策略測試器是免費功能,只要註冊會員就可以使用。以下我們會以台積電(2330)為交易標的,示範使用 60 日移動平均線(季線)策略。這個策略的進出條件相當簡單,當股價突破季線時買入,跌破季線時則賣出。

首先,登入 TradingView 網站。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150KU2UknxyHw.png

在上方搜尋框,輸入台積電的股票代號「2330」。找到後,按下「啟動圖表」。

https://ithelp.ithome.com.tw/upload/images/20220926/201501506caTN26EB9.png

此時,TradingView 會帶出台積電的K線圖表。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150fOpeyEjpeB.png

在下方我們可以找到「策略測試器」。

https://ithelp.ithome.com.tw/upload/images/20220926/2015015031fWo1Aiyo.png

TradingView 預設已經有非常多種策略可供套用,這裡我們選擇「移動揉搓線」。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150h5Kh5xO8FE.png

選擇完畢後 TradingView 就會帶出這個策略的績效了,不過我們還需要調整一下設定。我們在輸入長度調整為「60」,也就是代表移動平均線為 60 日。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150sMs2Ny1xgM.png

在屬性的設定,訂單數量調整為「1000」,代表每次買賣數量是 1000 股。需要注意這裡我們是將佣金設為 0%,不過真實交易必須考量手續費及交易稅,可以根據自己的需求調整設定。

https://ithelp.ithome.com.tw/upload/images/20220926/201501500JoXDxwt4C.png

然後我們就可以檢視一下跑出來的淨值曲線。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150E7X4sFmJLR.png

也可以查看這個策略跑出來的績效摘要。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150PCSyRAcQUH.png

在交易列表下,會列出每次交易的進出場紀錄。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150idcz1YnCuc.png

TradingView Pine 編輯器

Pine Script 是 TradingView 是由 TradingView 開發的一種程式語言,可以用來編寫技術指標和交易策略。「Pine 編輯器」就是 TradingView 用來撰寫 Pine Script 的工具。

前面使用 60 日移動平均線的範例,可以看到同時有多空進出場紀錄,因為 TradingView 預設的「移動揉搓線」策略是多空雙邊都做,也就是突破季線時多單建倉,跌破季線時多單平倉並且空單建倉,反之亦然。由於在臺股做空限制較多,如果希望將策略改成只做多不做空,這時就需要使用到「Pine 編輯器」來調整該策略的程式碼。

在 TradingView 的圖表畫面下方找到「Pine 編輯器」,然後選擇開啟內建腳本。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150tuBGnl9ob0.png

開啟預設腳本,搜尋並找到「MovingAvg Cross」,這就是剛剛的「移動揉搓線」策略。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150g0Eh0bOFUV.png

選擇預設腳本後,我們可以在「Pine 編輯器」看到這個腳本的程式碼。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150G289YZWSJq.png

我們將程式碼修改如下:

//@version=5
strategy("均線策略", overlay=true)
length = input(60)
confirmBars = input(1)
price = close
ma = ta.sma(price, length)
bcond = price > ma
bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0
if (bcount == confirmBars)
	strategy.entry("突破均線", strategy.long)
scond = price < ma
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0
if (scount == confirmBars)
    strategy.exit("跌破均線", "突破均線", profit = 1, loss = 1)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

完成後,我們儲存命名為「均線策略」。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150O2FNAnpssE.png

回到「策略測試器」,我們可以載入剛剛寫好的腳本。

https://ithelp.ithome.com.tw/upload/images/20220926/2015015033n79vHJRK.png

在交易列表下,可以看到已經改成只有多單的進出場記錄了。

https://ithelp.ithome.com.tw/upload/images/20220926/20150150bYN6iXdsiR.png

經由上述範例,我們簡單示範了如何客製化交易策略。如果有任何交易想法,都可以在「Pine 編輯器」可以撰寫交易策略腳本,再經由「策略測試器」套用該腳本,就可以評估該交易策略的績效是否符合預期。

有關於 Pine Script 的詳細用法,可以參考 TradingView 的 Pine腳本語言參考手冊

本日小結

  • 在金融市場上有主觀交易者與系統交易者。系統交易者依靠機械化交易系統來獲取買賣信號,在市場上執行訂單。
  • 設計交易系統的目標,不是在歷史資料測試過程中達成最高的報酬,而是找到某種適用於過去的健全概念,顯示這種概念也非常可能適用於未來。
  • 回測是利用過去的歷史資料,檢視交易策略的執行情況並做績效評估。但不必過於執著績效的最佳化,因為過去績效不代表未來。
  • TradingView 是一個為交易者和投資者提供社群網路服務的平台,「策略測試器」提供回測交易策略的功能。
  • TradingView「Pine 編輯器」可以撰寫交易策略腳本,經由「策略測試器」套用該腳本,可以評估交易策略的績效。
  • 暸解如何使用 TradingView「策略測試器」測試交易策略,並使用「Pine 編輯器」撰寫交易策略腳本。

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


上一篇
Day 25 - 即時行情監控:富果行情 API 與 LINE Notify 的應用(下)
下一篇
Day 27 - 程式交易系統:以富果交易 API 為例
系列文
從 Node.js 開發者到量化交易者:打造屬於自己的投資系統31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言