TradingView下單指令介紹-Pine Script語法教學(三)

本文為 Pine Script 語法教學的系列文章,建議依照以下順序閱讀,先從熟悉基本的 TradingView 程式碼開始,很快就可以開始寫屬於自己的第一支策略囉!

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

    稱呼

    電子郵件

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

    投資經驗

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

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

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

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

    還有什麼想詢問的?

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

    一、TradingView-Pine Script下單指令介紹

    這篇文我們就用前面教過的程式碼來組出一條下單指令,先介紹「下單指令」是什麼,下單指令也就是常聽到的交易指令。如果用傳統交易方式來說明,就像是打電話給營業員,告訴他今天我們要用什麼價格、買什麼商品,用什麼方式買。

    一個完整的程式交易下單指令通常會由以下幾個要素構成:

    1. 買賣指令: 下甚麼單?買單或是賣單
    2. 命名進出場:這筆交易指令的進出場名稱(非必要選項)
    3. 時間:在什麼時間?
    4. 價格:用什麼價格?
    5. 委託方式:什麼委託方式?stop觸價單、limit限價單、market市價單

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

    二、TradingView 買賣下單指令:

    TradingView 不管多單的買賣或空單的買賣,進出場都是用「entry」「exit」來表示,以下我們來一一介紹4個下單指令:strategy.entry、strategy.exit、strategy.close、strategy.close_all

    1. strategy.entry

    這是進入市場部位的命令。如果具有相同 ID 的訂單已經掛起,則可修改訂單。如果沒有指定 ID 的訂單,則會發出新的訂單。要停用進場指令,應使用命令 strategy.cancelstrategy.cancel_all

    與函數 strategy.order 相比,strategy.entry 功能受金字塔式交易法影響,可以正確反轉市場部位。如果 ‘Limit’ 和 ‘stop’ 參數均為 ‘NaN’,則訂單類型為市價訂單。

    函數內的參數如下:

    strategy.entry(id, direction, qty, limit, stop, oca_name, oca_type, comment, alert_message)
    
    例子:
    //@version=5
    strategy(title = "simple strategy entry example")
    if open > high[1]
    	strategy.entry("enter long", strategy.long, 1) 
           // 如果當前開盤價高於前一個高點,則市場單做多
    if open < low[1]
    	strategy.entry("enter short", strategy.short, 1) 
           // 如果當前開盤價低於前一個低點,則市場單做空

    2. strategy.exit

    這是一個退出指定進場或整個市場部位的命令。如果具有相同 ID 的訂單已經掛起,則可以修改訂單。如果進場訂單尚未成交,但是出現退場訂單,該退場訂單將暫待,直到進場訂單成交後才會放置退場訂單。要停用退場訂單,應使用命令 strategy.cancelstrategy.cancel_all。如果函數 strategy.exit 被調用一次,則只會退出一次。

    如果要退出多次,應該多次調用命令 strategy.exit。如果您使用停損和移動停損,其訂單類型是 ‘stop’,只有其中一個會被放置(會首先被成交)。如果以下所有參數 ‘profit’、’limit’、’loss’、’stop’、’trail_points’、’trail_offset’ 皆為 ‘NaN’,則命令將失敗。

    要使用市價訂單退出,則應使用命令 strategy.closestrategy.close_all

    函數內的參數如下:

    strategy.exit(id, from_entry, qty, qty_percent, profit, limit, loss, stop, trail_price, trail_points, trail_offset, oca_name, comment, comment_profit, comment_loss, comment_trailing, alert_message, alert_profit, alert_loss, alert_trailing)
    
    例子:
    //@version=5
    strategy(title = "simple strategy exit example")
    if open > high[1]
    	strategy.entry("long", strategy.long, 1) 
           // 如果當前開盤價高於前一個高點,則市場單做多
    strategy.exit("exit", "long", profit = 10, loss = 5) 
    // 名稱為“long”的倉位,出場條件(盈利 10 點或虧損 5 點)

    3. strategy.close

    它是一個從具有指定 ID 退出訂單的命令。如果有多個具有相同 ID 的進場訂單,則它們都將同一時間退出。如果在觸發命令時沒有指定 ID 的開放訂單,該命令則不會生效 。該命令使用市價單。每個進場都由分開的市價單關閉。

    函數內的參數如下:

    strategy.close(id, comment, qty, qty_percent, alert_message, immediately)
    
    例子:
    //@version=5
    strategy("closeEntry Demo", overlay=false)
    if open > close//開盤價大於收盤價及進場做多
    	strategy.entry("buy", strategy.long)
    if open < close//開盤價小於收盤價及平倉做多的倉位
    	strategy.close("buy", qty_percent = 50, comment = "close buy entry for 50%")
    plot(strategy.position_size)//顯示目前倉位數量

    4. strategy.close_all

    退出當前市場所有倉位,使其平倉。

    函數內的參數如下:

    strategy.close_all(comment, alert_message, immediately)

    例子:

    //@version=5
    strategy(“closeAll Demo”, overlay=false)
    if open > close//開盤價大於收盤價及進場做多
    strategy.entry(“buy”, strategy.long)
    if open < close//開盤價小於收盤價及平倉所有的倉位
    strategy.close_all(comment = “close all entries”)
    plot(strategy.position_size)//顯示目前倉位數量

    買賣下單指令整理

    買賣指令說明
    strategy.entry 進入市場部位的命令
    strategy.exit 退出指定進場或整個市場部位的命令
    strategy.close 平倉指定ID倉位
    strategy.close_all 平倉所有倉位

    三、TradingView 命名進出場:(“Buy_MA”)、(“我是名稱”)

    1. 區分觸發條件

    如果在同一個策略中,同時有好幾個進出場邏輯一起運行,在圖表與交易明細上很難去區分這筆交易是由甚麼條件觸發。

    這時就可以將不同邏輯的進出場方式個別命名,命名不是強制選項。若省略沒填,會直接使用 TradingView 內預設的名稱 Long 與 Short。

    2. 幫助策略開發

    一個策略有多個進出場方式,建議把它命名為不同的名稱,在識別上會比較容易。後續調整策略時,也可以很明確的知道是哪一個進出場的績效表現好,哪個績效不好,對於整個策略開發流程有很大的幫助。

    3. 避免相同名稱

    在命名進出場名稱的時候要注意,如果同一個交易策略中,有相同的名稱,在 Pine 編輯器編譯的時候會跳出失敗指令 ,所以要避免有相同的進出場名稱。

    strategy.entry(“Buy_MA “, strategy.long, 1)

    Buy_MA 為這筆交易的名稱。在程式碼中需要以 (“”) 夾住進出場名稱,如 (“我是進場名稱”)。

    四、TradingView 進出場價格: market、at 價格

    進出場價格可以說是整個策略最重要的部分,主要分為市價和指定價格,市價是直接成交,指定價格要搭配 stop、limit 使用,後面會一起說明。

    進出場價格說明
    market市價, 馬上成交不指定價格,以市場上最新的價格做交易
    指定價格以指定價格委託,可以填數值或是運算值。如10,000、「今天最高價」HighD(0) 或 「一根K棒的最高價」H

    五、TradingView 委託方式:stop、limit、 market

    1. market 市價單 – 速度優先

    market 為市價單,也是剛剛委託價格中的市價。 market 單跟 stop 單、limit 單最大的不同是不用指定價格,因為它本身就是用當下的市場價格。能夠以最快的速度成交,但也因為不指定價格,通常會成交在比較差的點位。

    🔶 一般用於需要搶速度的策略,market單能用最有效率的方式成交。

    strategy.entry(‘Buy_MA’, strategy.long, 1)

    2. limit 限價單 – 價格優先

    limit 為限價單,下方的程式碼意思為,「在價格 9400 掛一口多單的限價委託單」。當市場價格來到9400以下時,則買進一口多單。

    🔶 一般用於拉回買進或是逢高賣出,可以成交在比市價更好的價格。

    strategy.entry(‘Buy_MA’, strategy.long, 1, limit=9400)

    limit 單的特性是可以指定委託價格,而實際成交價一定會等於或優於限制的價位。所以如果是委託買進的價格,比現在的市場價格還高, limit 單會直接成交。但在實務使用上,比較常使用的是 stop 停損單和 market 市價單, limit 限價單要搭配下單機使用,所以比較不會使用到。

    3. stop 停損單 – 趨勢優先

    stop 為停損單,即主觀交易中俗稱的觸價單。下方程式碼意指,「 當未來價格來到 9500 以上,買進一口多單 」。

    🔶 一般用於突破型策略,當突破某個價格當下要立刻買進,用 stop單是很好的選擇。

    strategy.entry(‘Buy_MA’, strategy.long, 1, stop=9500)

    stop 單是掛單在那邊等,等價格到就買進,換句話說如果委託買進的價格比現在市場價還低,就會直接成交。

    買賣指令說明
    market市價單,速度優先。 以當下的市場價格立刻成交。
    一般用於需要搶速度的策略,market 單能用最有效率的方式成交。
    limit限價單,價格優先。當價格優於委託價時成交。
    一般用於拉回買進或是逢高賣出,可以成交在比市價更好的價格。
    stop停損單、觸價單,趨勢優先。當價格突破委託價時成交。
    一般用於突破型策略,當突破某個價格當下要立刻買進,則 stop 單是很好的選擇。


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

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

    Anti Fraud 10140382164
    Anti Fraud 10140382163
    Anti Fraud 10140382165

    量化通QuantPass
    量化通QuantPass

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

    文章: 233

    發佈留言

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