TradingView回測教學-如何用Pine編輯器建立策略腳本?(完整步驟圖解教學)

上一篇TradingView回測教學系列文章中,詳細教學了如何用TradingView策略測試器帶入預設交易策略並進行回測模擬交易,

而這一篇文章要教你如何在TradingView用Pine編輯器建立交易策略進行回測,以"參考現有腳本再加以修改"的方式,快速帶你進入TradingView寫程式交易策略的世界。(沒錯就是寫code)

市場先生最開始學習寫程式交易時,都是看著別人的一些簡單策略範本去修改,慢慢的就能知道很多指令該怎麼寫。

接下來會介紹怎麼使用Pine編輯器,包含完整步驟圖解,手把手帶你建立Pine Script策略腳本,以及在策略測試器帶入編寫的策略,並進行回測模擬。

還沒用過TradingView的可以先閱讀:最完整的TradingView新手使用教學

Pine編輯器 介紹

Pine編輯器 (英文名稱:Pine Editor) 是TradingView用來編輯Pine Script程式的工具,Pine Script是TradingView開發的程式語言,用來編寫自訂的技術指標和交易策略。

簡單來說,在TradingView的Pine編輯器可以自己寫出程式交易的策略 (稱為交易策略腳本),透過「策略測試器」套用腳本,就能跑回測評估交易策略的績效。

補充:腳本是什麼?

腳本 (英文名稱:script) 是含有一段程式碼的檔案,在Pine編輯器裡寫出自己的交易策略程式後,將它存成一個檔案,這就是一個腳本。

想了解Pine Script怎麼寫,看這篇:Pine Script 重要語法介紹

如何在 Pine編輯器 建立策略腳本

這篇文章會介紹兩種簡單易上手的方法來建立Pine Script策略腳本:

• 方法一是從TradingView預設策略腳本進行修改

• 方法二是把「指標」腳本改為「策略」腳本進行回測

這麼做的好處是程式碼會先有基底的框架,再自己進行微幅的修改,比起要從零開始自行編寫一套策略,這種先參考預設程式碼再行修改的方式,可以邊做邊學習,對不熟悉程式的人來說更為友善。

市場先生補充: 指標(Indicator) VS. 策略(Strategy)

在TradingView上,指標(Indicator)和策略(Strategy)是兩種不同的工具,以下做簡單說明:

• 指標(Indicator):指標會在圖表上標示出數據,使用指標只會標示出指定指標的位置、繪製出視覺上輔助的走勢等等,但並不會真正模擬執行進出場交易。

• 策略(Strategy):使用策略可以根據預設的條件模擬交易,有明確的進出場點,回測結果可用來評估策略的可行性。

兩者雖然都涉及寫程式,但只有策略才能回測。

想深入了解指標和策略的差異比較,看這邊:指標和策略有什麼不一樣?

開始前須要先註冊TradingView帳號,免費註冊帳號後,就不會一直彈出廣告,看過的常用線圖、指標的畫面,在免費註冊後也會幫你保存 (免費版只能存1個)。

接下來要介紹的步驟全程都可以在TradingView免費版上操作,不需要付費升級就能跑回測。

登入TradingView官網:TradingView官網連結

以下步驟建議用電腦版閱讀,同時搭配TradingView畫面操作更為直觀。

方法一:修改TradingView預設腳本

怎麼在TradingView用內建策略跑回測這篇文章中,有介紹過如何使用TradingView預設策略在策略測試器中跑回測,

現在,要教你修改之前範例中使用的「移動平均雙線交叉 (MovingAvg2Line Cross)」預設策略,在腳本中加入自己編寫的程式,再進行回測。

步驟一:選擇商品

選擇商品:在TradingView搜尋欄輸入SPX,搜尋 S&P 500 指數,點選 S&P 500 開啟圖表。

步驟二:打開Pine編輯器

點圖表下方「Pine編輯器」(英文版介面可以點Pine Editor),打開Pine編輯器視窗,畫面下方就是編輯器寫程式的地方。

步驟三:開啟預設腳本

透過以下步驟可在Pine編輯器開啟TradingView內建的策略腳本

1. 點未命名腳本 (Untitled script) 旁的「⌵」符號

2. 點「建立新的 (Create new)」

3. 選「內建 (Built-in)」

4. 在搜尋欄輸入「移動平均」找尋前文用過的「移動平均雙線交叉策略 (MovingAvg2Line Cross)」

5. 點選「移動平均雙線交叉策略 (MovingAvg2Line Cross)」,開啟預設腳本

現在在Pine編輯器中可以看到「移動平均雙線交叉 (MovingAvg2Line Cross)」策略的程式碼。

步驟四:改寫腳本

我們要將步驟三開啟的內建腳本進行修改:

Step1 理解預設腳本

進行修改前,要先了解原本的程式碼寫了什麼、有什麼意義。


以下進行內建腳本「移動平均雙線交叉 (MovingAvg2Line Cross)」程式碼解析:

第1行:指定Pine Script使用的版本是第六版 (一定要加這一行)

//@version=6

第2行:宣告一個叫做 “MovingAvg2Line Cross” 的策略腳本,而且策略會疊在開啟的圖表視窗上。

• “MovingAvg2Line Cross”:策略名稱
• overlay=true:true表示策略畫的圖會疊在現有圖表上,false表示圖會在另外單獨的視窗顯示

strategy("MovingAvg2Line Cross", overlay=true)

第3-4行:定義變數 快線”fastLength” 和 慢線”slowLength” 的週期,默認值分別是9和18,允許用戶自己輸入改變數值

• input函數:括號( )內數值是預設值,input函數允許用戶在使用腳本時自行輸入數值更改預設值

fastLength = input(9)
slowLength = input(18)

以目前的例子來說,快線和慢線使用input函數,可以在設定的「輸入」看到快線及慢線預設值,但用戶也可以手動輸入數值更改快線/慢線週期設定。


第5行:定義變數”price”價格是收盤價close,close是內建變數,指的是目前圖表時間週期的收盤價。

price = close

第6-7行:使用移動平均線公式計算快線和慢線,ta.sma是Pine Script內建 簡單移動平均(simple moving average) 的函數。

• price:選擇要用什麼價格計算移動平均,可填入open(開盤價)、close(收盤價)、high(最高價)、low(最低價) 等等,這裡代入的price變數已經在第5行設定為收盤價close。
• fastLength:選擇要用幾根K棒計算移動平均,這裡代入的fastLength變數在第3行設定預設值為9
• slowLength:選擇要用幾根K棒計算移動平均,這裡代入的slowLength變數在第4行設定預設值為18

以預設值為例,mafast會取9天收盤價的移動平均,maslow會取18天收盤價的移動平均。

mafast = ta.sma(price, fastLength)
maslow = ta.sma(price, slowLength)

第8-9行:檢查如果快線上穿突破慢線(黃金交叉),觸發多單進場。

• if函數:當括號( )中的條件為真時,會執行下一行程式碼
• strategy.entry函數:進場建倉的內建函數,”MA2CrossLE”是名稱,strategy.long代表建立多頭部位(long),comment=”MA2CrossLE”是註解,名稱和註解的文字都可以修改
• ta.crossover函數:檢查第一個數值上穿第二個數值的情況,用在這裡當mafast上穿過maslow會返回true,剩餘情況返回false

if (ta.crossover(mafast, maslow))
	strategy.entry("MA2CrossLE", strategy.long, comment="MA2CrossLE")

第10-11行:檢查如果快線下穿突破慢線(死亡交叉),觸發空單進場。

• ta.crossunder函數:檢查第一個數值下穿第二個數值的情況,用在這裡當mafast下穿過maslow會返回true,剩餘情況返回false

if函數 及 strategy.entry函數 和前面介紹的用法相似,要注意的是strategy.short代表建立空頭部位(short)。

if (ta.crossunder(mafast, maslow))
	strategy.entry("MA2CrossSE", strategy.short, comment="MA2CrossSE")

第12行:這行被//註解掉,並不會真的執行。如果啟用(將//刪除),會畫出資金曲線。

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

想深入了解程式碼中的函數和參數到底要怎麼使用,看這篇:Pine Script 重要語法解析


原本預設的程式中,策略是多空兩個方向都會做,比如說遇到快線下穿突破慢線(死亡交叉)時,多單會出場平倉,同時空單會進場建倉,反之亦然。

但是做空限制比較多,如果只想做多不想做空(單邊策略),就必須自己手動改寫程式碼。

Step2 改寫預設腳本

現在要示範如何將「移動平均雙線交叉策略」改為:黃金交叉多單建倉 + 死亡交叉多單平倉。

觸發條件內建策略改寫策略
快線上穿突破慢線(黃金交叉)多單建倉
空單平倉
多單建倉
快線下穿突破慢線(死亡交叉)多單平倉
空單建倉
多單平倉

原本程式的邏輯:

  • 第10行程式碼條件被觸發 (死亡交叉發生)
  • 第11行程式碼:系統會模擬空單建倉,多單被自動平倉

不希望做空需要修改第11行的程式碼,變成只將多單平倉,但不建立新的空單,

將程式碼更改為平倉要用到 strategy.close 函數:

strategy.close("MA2CrossLE", comment="Close MA2CrossLE")

“MA2CrossLE”是需要被平倉的多頭交易名稱,和進場建倉時(第9行程式碼)的名稱一樣。

strategy.close 函數 用來平倉前面已經開倉的多頭交易MA2CrossLE,此時不需要再開立空單部位的倉位,因此不需要 strategy.entry 函數。

以下是改寫後的「移動平均雙線交叉單邊做多」的完整程式碼:

//@version=6
strategy("MovingAvg2Line Cross", overlay=true)
fastLength = input(9)
slowLength = input(18)
price = close
mafast = ta.sma(price, fastLength)
maslow = ta.sma(price, slowLength)
if (ta.crossover(mafast, maslow))
	strategy.entry("MA2CrossLE", strategy.long, comment="MA2CrossLE")
if (ta.crossunder(mafast, maslow))
	strategy.close("MA2CrossLE", comment="Close MA2CrossLE")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

更新版本策略說明:

• 黃金交叉發生:做多,多單建倉。

• 死亡交叉發生:出場,多單平倉。

接下來,只要將改寫後的程式碼貼到Pine編輯器上。

步驟五:儲存腳本

1. 點「未命名腳本 (Untitled script) 」儲存

2. 在彈出視窗中的腳本名稱 (Script name)欄位,輸入「移動平均雙線單邊做多」命名腳本,可以自己任意取名

3. 點選「儲存 (Save)」,儲存腳本

步驟六:在策略測試器中開啟腳本

接下來要切換到策略測試器中,開啟步驟五儲存的策略腳本進行回測。

1. 選「策略測試器 (Strategy Tester)」

2. 點「載入您的策略 (Load your strategy)」

3. 點「個人的 (Personal)」

4. 選「移動平均雙線單邊做多」

步驟七:回測完成

TradingView會顯示「移動平均雙線單邊做多」回測結果概要(Overview),

上方圖表面板會標示出應用這個策略進出場的位置,藍色向上箭頭代表多單進場,紫色向下箭頭代表多單出場,

策略測試器(Strategy Tester)下方面板則會顯示回測結果的概覽、績效相關指標等等。

在下方面板選擇「交易列表 (List of Trades)」,可看到現在所有的交易都只有多單進出場,已經不存在空單進出場。

方法二:將指標腳本改為策略腳本

怎麼在TradingView腳本編輯器設定避開空頭的技術指標這篇文章中,有寫過一個可在圖上標示出空頭風險區塊的指標腳本,

在這裡市場先生要教你將上次寫的指標改寫成策略,完成後,就能運用TradingView策略編輯器開啟改寫的策略腳本進行回測。

忘記「指標」和「策略」有什麼差異的人,可以回前面複習一下再往下閱讀。

步驟一:選擇商品

選擇商品:在搜尋欄輸入SPX,搜尋 S&P 500 指數,點選 S&P 500 開啟圖表。

步驟二:打開Pine編輯器

點圖表下方「Pine編輯器 (Pine Editor)」,打開Pine編輯器視窗,畫面下方就是編輯器寫程式的地方。

步驟三:開啟上次儲存的指標腳本

1. 點未命名腳本 (Untitled script)旁的「⌵」符號

如果剛練習完前面方法一,Pine編輯器會開著「移動平均雙線單邊做多」策略腳本,要點開移動平均雙線單邊做多右側的「⌵」符號

2. 點「打開腳本 (Open script)」

3. 選「MAs for risk management」腳本 (之前儲存過的指標腳本)

<還沒看過這篇文的要先照做,「打開腳本」才會有儲存好的「MAs for risk management」指標腳本>

現在在Pine編輯器中可以看到「MAs for risk management」指標腳本的程式碼。

步驟四:改寫腳本

改寫程式碼會分為兩個部分進行:

  1. 將指標改策略
  2. 定義策略進出場條件

Step1 將指標改為策略 (改寫第3行程式碼)

只有策略腳本可以在策略測試器中進行回測,指標腳本不能跑回測,只會標示指標在圖表上,

因此需要將宣告指標腳本的第3行程式碼改寫,原本腳本使用的 indicator函數 要改為 strategy函數。

宣告策略腳本的程式碼:

strategy("MAs for risk managememt", overlay=true)

Step2 定義策略進出場條件 (改寫第10行程式碼)

在策略腳本中,需要清楚定義多單進場和出場的條件,才能進行回測並查看回測結果。

先前指標腳本的程式碼中,第10行程式碼用箭頭在圖上標示出風險區域,這區域就是策略中多單持倉需要出場(平倉)的期間,

所以我們要加上幾行條件判斷式,將標示出箭頭的指令刪除,改寫成當處於風險區域時多單要出場,直到重新確認目前不處於風險區域,則多單可重新進場。

策略概念:不頻繁進出的情況下,避開大幅的下跌(目前只適用在S&P500)
• 出場時機:如果5MA低於250MA包絡線(Envelope)下緣2.5%就出場。
• 暫時出場:觀察5MA有沒有回到包絡線內 (5MA高於250MA包絡線下緣2.5%)。
• 再進場:連續22個交易日(一個月)內,5MA都沒有再次低於250MA包絡線下緣2.5%,就重新進場。(避免頻繁進出)

將以上進出場概念寫為程式語言的條件判斷式:

if (risky_indicator==0 and strategy.opentrades == 0)
    strategy.entry("Long",strategy.long)
if (risky_indicator==1)
    strategy.close("Long")

以下逐條解析程式碼:

當不處於風險區域且目前無持倉

if (risky_indicator==0 and strategy.opentrades == 0)

多單進場,可使用 strategy.entry()函數:策略名是Long,進場建立多單

    strategy.entry("Long",strategy.long)

當處於風險區域

if (risky_indicator==1)

多單出場,可使用 strategy.close()函數:平倉名為Long的多單

    strategy.close("Long")

改完上述的兩段程式碼,就完成了改寫指標腳本為策略腳本。

將指標腳本改寫成策略腳本的完整程式碼:

//@version=5
//@Mr. Market
strategy("MAs for risk managememt", overlay=true)
short = ta.sma(close, 5)
long = ta.sma(close, 250) * 0.975
risky_period = ta.sma(math.sign(short-long)*0.5 - 0.5,22)*22 
risky_indicator =risky_period<0?1:0
plot(short,  color=color(color.teal))
plot(long,  color=color(color.green))
if (risky_indicator==0 and strategy.opentrades == 0)
    strategy.entry("Long",strategy.long)
if (risky_indicator==1)
    strategy.close("Long")

接下來,將改寫後的程式碼貼到Pine編輯器上。

步驟五:儲存腳本

1. 點「MAs for risk management」旁的「⌵」符號

2. 選「重新命名 (Rename)」另存腳本

3. 輸入腳本名稱「MAs for risk management_strategy」

4. 點「儲存 (Save)」

步驟六:在策略測試器中開啟腳本

接下來要切換到策略測試器中,開啟步驟五儲存的策略腳本進行回測。

1. 選「策略測試器 (Strategy Tester)」

2. 點「載入您的策略 (Load your strategy)」

3. 點「個人的 (Personal)」

4. 選「MAs for risk management_strategy」

如果剛練習完前面方法一,策略測試器還會開著「移動平均雙線單邊做多」回測結果,要先刪除前一個策略,才能帶入新的策略腳本進行回測。

步驟七:回測完成

TradingView會直接帶出「MAs for risk management_strategy」回測結果概要,

上方商品圖表會用箭頭標示出這策略進出場的位置,藍色向上箭頭代表多單進場,紫色向下箭頭代表多單出場,

策略測試器下方面板則會顯示回測結果的概要(Overview)、績效摘要(Performance Summary)等等,

可以看到這策略的勝率(Percent Profitable)有60%,淨利(Net Profit)卻只有0.3%,而且這是在還沒有設定手續費及滑點的前題下,較為理想化的回測結果。

如果想調整設定,點選「MAs for risk management_strategy」右側的六角形設定符號,就可以更改屬性設定,例如初始資金有多少、訂單數量或佣金(手續費)的占比等。

想了解回測相關重要指標,看這裡:為什麼要回測?回測常見績效指標整理

市場先生 總結

TradingView有許多基本指標相關的內建策略腳本,但在回測使用上較基礎單一,只使用預設策略會受到限制,

像是移動均線雙線交叉策略,系統預設是多空都做,可是對選擇長期持有的投資人而言,比較不可能一次做兩個方向,長線投資者希望應用均線策略的目的應該是想避開空頭風險區,

這時如果會自己動手微調程式碼,可以很簡單就達到目的,並獲得詳細的回測結果分析。

TradingView的預設策略腳本豐富,社群用戶分享的腳本也很多,很適合初學者一邊參考程式碼一邊做調整,Pine Script程式碼語法跟Multicharts很類似,有寫過的人可以較快上手,有興趣的來試試看吧。

前往網站:TradingView官網(點此連結)

下一篇:

TradingView回測教學-Pine Script 重要語法介紹

延伸閱讀:

1. 回測是什麼?為什麼需要回測?

2. TradingView 回測教學-如何用策略測試器帶入內建策略進行回測?(完整流程圖解教學)

3. 如何用TradingView腳本編輯器功能設定避開空頭的技術指標【程式篇】

4. 如何用TradingView設定避開空頭的技術指標【指標篇】

5. TradingView模擬交易工具功能介紹(流程圖解)

這篇文章為市場先生資訊整理與觀念教學分享,內容提到任何標的或券商均無推薦之意,投資必定有風險,任何投資決策前請務必自行評估判斷。


如果覺得這篇文章有幫助,
幫我按個讚,分享給更多人看到,謝謝!

編輯:Crystal 主編:市場先生

上 / 下一篇文章

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *