- 登入
- 註冊
上一篇文(第一次學 TradingView 程式碼就上手),我們介紹了 TradingView 的程式語法 Pine Script 的基本要素。TradingView 是一套萬用的看盤軟體,所以在TradingView 內建的程式語法編譯器(Pine 編輯器)中,已經把程式交易當中常常會使用到的情境,預設為程式的內建保留字。
我們常使用交易程式碼,例如:進出場價、進場時間、部位、未平倉損益、最大曾經虧損等等。Pine 編輯器在我們撰寫程式碼的時候的會自動跑出提示,讓我們可以更節省時間的去寫一段程式碼。
Pine Script 的英文字母大小寫是有區別的,這點要特別注意!,本篇文章會介紹幾種常用的內建保留字。我們也可以透過 Pine腳本語言參考手冊 中查找程式碼相關的使用方式。
點擊搜尋欄輸入要查詢的指令 => 中間就會出現使用方法及示例。
and 、or 與 not 為布林邏輯判斷的內建字, and 是所有條件都需要符合才會成立,or 則是其中的一個條件符合就會成立,not 則是要該條件不符合才會成立。
內建字 | 說明 |
And | 且,所有條件須皆成立。if 上漲 and 成交量放大 then 買進。要兩個條件都符合才會買進。 |
Or | 或,只要有一個條件成立。if 上漲 or 成交量放大 then 買進。只要一個條件符合就會買進。 |
Not | 非,該條件不符合才會成立。if not 上漲 then 買進。只要條件不符合就會買進。 |
跟四則運算一樣也可以使用小括號(),括號內的優先運算。
if (上漲 and 成交量放大) or 收盤價 > 均線 ,
就做買進
以上的例子當中,只要 (上漲 and 成交量放大 ) 或是 收盤價>均線 ,當中兩組有一組條件成立就會觸發買進訊號。而其中我們將 (上漲 and 成交量放大 ) 用 () 綁釘在一起,使之成為同一組的條件。
程式交易的的策略,大多數是基於 K 棒來作為條件判斷或是指標計算。在 TradingView 當中,K 棒價格的開高低收就是很直觀的open、high、low 跟 close。(這邊切記因為有大小寫之分,所以一定要用小寫開頭,跟MultiCharts 不一樣,所以也不能使用大寫縮寫來取代。)
除此之外 value[N] 是前 N 根K棒的值,例如:close[1] 代表的是前一根K棒的收盤價、close[2] 代表的是前兩根K棒的收盤價、 high[2] 就是前兩根K棒的收盤價。
內建字 | 說明 |
open | 開盤價 |
high | 最高價 |
low | 最低價 |
close | 收盤價 |
value[N] | 向前數 N根 K棒,當時的 value 值 |
「時間」在我們寫策略的時候也是常常使用到的條件判斷。時間的內建字可細分為年、月、日、時。在討論時間相關內建字之前,我們必須先了解在 TradingView Pine Script 的架構中,日期與時間的顯示方式。
在 TradingView 的日期格式。其格式必須符合IETF RFC 2822或ISO 8601標準(“DD MMM YYYY hh:mm:ss±hhmm” 或 “YYYY-MM-DDThh:mm:ss±hh:mm”,因此是“20 Feb 2020”或“2020-02-20”)。如果未提供時間,則使用“00:00”。如果未提供任何時區,則將使用GMT+0。請注意,這與函數通常的行為不同,後者返回交易所所在時區的時間。
備註:UNIX 時間是自 1970 年 1 月 1 日 00:00:00 UTC 以來經過的毫秒數。
內建字 | 說明 |
timestamp | 時間, 24小時制。 |
year(time) | 年份,西元1970年起算之年數。 |
month(time) | 月份,三月會回傳3,十月會回傳10。 |
這些內建字的英文組成,大部分淺顯易懂。
程式碼 | 說明 |
bar_index – strategy.opentrades.entry_bar_index(strategy.opentrades – 1) | 進場後經過幾根K棒 |
strategy.closedtrades.entry_price(strategy.closedtrades – 1) | 進場價 |
strategy.opentrades.entry_id(strategy.opentrades – 1) | 進場名稱 |
(time – strategy.opentrades.entry_time(strategy.opentrades – 1))/ 1000 * 60 * 60 * 24 | 進場日期 |
time – strategy.opentrades.entry_time(strategy.opentrades – 1) | 進場時間 |
程式碼 | 說明 |
bar_index – strategy.closedtrades.exit_bar_index(strategy.closedtrades – 1) | 出場後經過幾根K棒 |
strategy.closedtrades.exit_price(strategy.closedtrades – 1) | 出場價 |
strategy.closedtrades.exit_id(strategy.closedtrades – 1) | 出場名稱 |
time – strategy.closedtrades.exit_time(strategy.closedtrades – 1)/ 1000 * 60 * 60 * 24 | 出場日期 |
time – strategy.closedtrades.exit_time(strategy.closedtrades – 1) | 出場時間 |
顯示部位方向:strategy.opentrades.size(strategy.opentrades – 1)>0?1:strategy.opentrades.size(strategy.opentrades – 1)<0?-1:0
顯示持倉數量:math.abs(strategy.opentrades.size(strategy.opentrades – 1))
顯示部位方向,多單為正 1,空單為負 1,空手為 0,比如多單 1 口是「1」,空單 100 口是「-1」。只考慮方向不考慮持倉的數量。
顯示自己持有的口數,不管是多單 3 口或是空單 3 口都是回傳「3」,空口回傳「0」。
而實務上我們為了要同時顯示部位的方向和數量。直接使用strategy.opentrades.size(strategy.opentrades – 1),就可以 5 口空單回傳「-5」、空手回傳 「0」、 多單 2 口回傳 「2」。
內建字 | 說明 |
strategy.opentrades.size(strategy.opentrades – 1)>0?1:strategy.opentrades.size(strategy.opentrades – 1)<0?-1:0 | 部位方向,只顯示1 (多單)、-1 (空單)、0 (空手) |
math.abs(strategy.opentrades.size(strategy.opentrades – 1)) | 在倉口數,只顯示持有單位數量 |
strategy.opentrades.size(strategy.opentrades – 1) | 同時顯示部分及口數 |
顯示最大獲利:strategy.opentrades.max_runup(strategy.opentrades – 1)
顯示最大虧損:strategy.opentrades.max_drawdown(strategy.opentrades – 1)
內建字 | 說明 |
strategy.opentrades.max_runup(strategy.opentrades – 1) | 本次交易最大曾經獲利金額 |
strategy.opentrades.max_drawdown(strategy.opentrades – 1) | 本次交易最大曾經虧損金額 |
這部分在 exit 裡面就會先設定 limit 與 stop
內建字 | 說明 |
plot | 繪製指標或K線 |
label.new | 標示特定的文字,格式為 “文字” ,文字為綠色 。 |