TradingView 常用內建保留字-Pine Script語法教學(二)

上一篇文(第一次學 TradingView 程式碼就上手),我們介紹了 TradingView 的程式語法 Pine Script 的基本要素。TradingView 是一套萬用的看盤軟體,所以在TradingView 內建的程式語法編譯器(Pine 編輯器)中,已經把程式交易當中常常會使用到的情境,預設為程式的內建保留字。

立即訂閱電子報,掌握最新資訊!

    稱呼

    電子郵件

    以下非必填,但若您願意分享,我們將能推送更精準的內容給您

    投資經驗

    是否為理工科背景、工程師或有寫程式的經驗?

    有興趣的主題
    量化交易台股期貨海外期貨虛擬貨幣美股

    有興趣的量化交易軟體/平台
    不清楚MultiChartsTradingViewPythonXQ

    想透過量化交易達成甚麼目的?
    不確定自動交易選股回測投資績效量化自己的投資方法想找現成的策略套用

    還有什麼想詢問的?

    零成本體驗TradingView台指期量化交易|全自動下單,小台微台也適用

    前言

    我們常使用交易程式碼,例如:進出場價、進場時間、部位、未平倉損益、最大曾經虧損等等。Pine 編輯器在我們撰寫程式碼的時候的會自動跑出提示,讓我們可以更節省時間的去寫一段程式碼。

    截圖 2023 03 07 下午2.44.28
    TradingView 的 Pine 編輯器於編寫程式時會自動跑出提示(打clos,系統自動帶出相同字母的字)

    Pine Script 的英文字母大小寫是有區別的,這點要特別注意!,本篇文章會介紹幾種常用的內建保留字。我們也可以透過 Pine腳本語言參考手冊 中查找程式碼相關的使用方式。

    點擊搜尋欄輸入要查詢的指令 => 中間就會出現使用方法及示例。

    截圖 2023 03 07 下午2.52.22

    TradingView Pine Script常用內建保留字

    1. 布林邏輯判斷內建字:And、Or、Not

    and or 與 not 為布林邏輯判斷的內建字, and 是所有條件都需要符合才會成立,or 則是其中的一個條件符合就會成立,not 則是要該條件不符合才會成立。

    內建字說明
    And且,所有條件須皆成立。if 上漲 and 成交量放大 then 買進。要兩個條件都符合才會買進。
    Or或,只要有一個條件成立。if 上漲 or 成交量放大 then 買進。只要一個條件符合就會買進。
    Not非,該條件不符合才會成立。if not 上漲 then 買進。只要條件不符合就會買進。

    跟四則運算一樣也可以使用小括號(),括號內的優先運算。

    if (上漲 and 成交量放大) or 收盤價 > 均線 ,

    就做買進

    以上的例子當中,只要 (上漲 and 成交量放大 ) 或是 收盤價>均線 ,當中兩組有一組條件成立就會觸發買進訊號。而其中我們將 (上漲 and 成交量放大 ) 用 () 綁釘在一起,使之成為同一組的條件。

    訂閱電子報,即時獲取TradingView快閃優惠

    2. K棒價格相關內建字:open、high、low 、close

    程式交易的的策略,大多數是基於 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 值

    3.時間相關內建字:year、month、timestamp

    「時間」在我們寫策略的時候也是常常使用到的條件判斷。時間的內建字可細分為年、月、日、時。在討論時間相關內建字之前,我們必須先了解在 TradingView Pine Script 的架構中,日期與時間的顯示方式。

    在 TradingView 的日期格式。其格式必須符合IETF RFC 2822ISO 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。請注意,這與函數通常的行為不同,後者返回交易所所在時區的時間。

    截圖 2023 03 07 下午4.26.07
    • 呼叫內建字 timestamp:該函數會返回 UNIX 時間的指定日期和時間。
    • 呼叫內建字 year(time):提供 UNIX 時間的年份(在交換時區)。
    • 呼叫內建字 month(time):提供的 UNIX 時間的月份(在交換時區)。

    備註:UNIX 時間是自 1970 年 1 月 1 日 00:00:00 UTC 以來經過的毫秒數。

    內建字說明
    timestamp時間, 24小時制。
    year(time)年份,西元1970年起算之年數。
    month(time)月份,三月會回傳3,十月會回傳10。

    4. 進出場相關內建字:strategy.opentrades.entry_price、strategy.closedtrades.exit_price

    這些內建字的英文組成,大部分淺顯易懂。

    進場內建字

    程式碼說明
    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)出場時間

    5. 部位相關內建字:部位方向、持倉數量

    顯示部位方向: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) 同時顯示部分及口數

    6. 損益相關內建字:最大獲利、 最大虧損

    顯示最大獲利: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) 本次交易最大曾經虧損金額

    7. 停損停利出場相關內建字SetStopLoss、 SetExitOnClose

    這部分在 exit 裡面就會先設定 limit 與 stop

    8. 繪製指標與文字相關內建字:plot、label.new

    內建字說明
     plot 繪製指標或K線
    label.new 標示特定的文字,格式為 “文字” ,文字為綠色 。


    加入LINE社群量化交易討論群」無壓力討論與分享!

    加入Discord 「量化交易討論群」即時獲取實用的資源!

    Anti Fraud 10140382164
    Anti Fraud 10140382163
    Anti Fraud 10140382165
    量化通QuantPass
    量化通QuantPass

    量化通是個致力於全民量化金融教育的社群,我們希望透過由淺入深的內容,帶領大家以正確觀念來實踐自動化的金融投資研究分析。

    文章: 233

    發佈留言

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