- 登入
- 註冊
本文為 Pine Script 語法教學的系列文章,建議依照以下順序閱讀,先從熟悉基本的 TradingView 程式碼開始,很快就可以開始寫屬於自己的第一支策略囉!
這篇文我們就用前面教過的程式碼來組出一條下單指令,先介紹「下單指令」是什麼,下單指令也就是常聽到的交易指令。如果用傳統交易方式來說明,就像是打電話給營業員,告訴他今天我們要用什麼價格、買什麼商品,用什麼方式買。
一個完整的程式交易下單指令通常會由以下幾個要素構成:
TradingView 不管多單的買賣或空單的買賣,進出場都是用「entry」 及「exit」來表示,以下我們來一一介紹4個下單指令:strategy.entry、strategy.exit、strategy.close、strategy.close_all。
這是進入市場部位的命令。如果具有相同 ID 的訂單已經掛起,則可修改訂單。如果沒有指定 ID 的訂單,則會發出新的訂單。要停用進場指令,應使用命令 strategy.cancel或 strategy.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) // 如果當前開盤價低於前一個低點,則市場單做空
這是一個退出指定進場或整個市場部位的命令。如果具有相同 ID 的訂單已經掛起,則可以修改訂單。如果進場訂單尚未成交,但是出現退場訂單,該退場訂單將暫待,直到進場訂單成交後才會放置退場訂單。要停用退場訂單,應使用命令 strategy.cancel 或 strategy.cancel_all。如果函數 strategy.exit 被調用一次,則只會退出一次。
如果要退出多次,應該多次調用命令 strategy.exit。如果您使用停損和移動停損,其訂單類型是 ‘stop’,只有其中一個會被放置(會首先被成交)。如果以下所有參數 ‘profit’、’limit’、’loss’、’stop’、’trail_points’、’trail_offset’ 皆為 ‘NaN’,則命令將失敗。
要使用市價訂單退出,則應使用命令 strategy.close 或 strategy.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 點)
它是一個從具有指定 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)//顯示目前倉位數量
退出當前市場所有倉位,使其平倉。
函數內的參數如下:
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 內預設的名稱 Long 與 Short。
一個策略有多個進出場方式,建議把它命名為不同的名稱,在識別上會比較容易。後續調整策略時,也可以很明確的知道是哪一個進出場的績效表現好,哪個績效不好,對於整個策略開發流程有很大的幫助。
在命名進出場名稱的時候要注意,如果同一個交易策略中,有相同的名稱,在 Pine 編輯器編譯的時候會跳出失敗指令 ,所以要避免有相同的進出場名稱。
strategy.entry(“Buy_MA “, strategy.long, 1)
Buy_MA 為這筆交易的名稱。在程式碼中需要以 (“”) 夾住進出場名稱,如 (“我是進場名稱”)。
進出場價格可以說是整個策略最重要的部分,主要分為市價和指定價格,市價是直接成交,指定價格要搭配 stop、limit 使用,後面會一起說明。
進出場價格 | 說明 |
market | 市價, 馬上成交不指定價格,以市場上最新的價格做交易 |
指定價格 | 以指定價格委託,可以填數值或是運算值。如10,000、「今天最高價」HighD(0) 或 「一根K棒的最高價」H。 |
market 為市價單,也是剛剛委託價格中的市價。 market 單跟 stop 單、limit 單最大的不同是不用指定價格,因為它本身就是用當下的市場價格。能夠以最快的速度成交,但也因為不指定價格,通常會成交在比較差的點位。
🔶 一般用於需要搶速度的策略,market單能用最有效率的方式成交。
strategy.entry(‘Buy_MA’, strategy.long, 1)
limit 為限價單,下方的程式碼意思為,「在價格 9400 掛一口多單的限價委託單」。當市場價格來到9400以下時,則買進一口多單。
🔶 一般用於拉回買進或是逢高賣出,可以成交在比市價更好的價格。
strategy.entry(‘Buy_MA’, strategy.long, 1, limit=9400)
limit 單的特性是可以指定委託價格,而實際成交價一定會等於或優於限制的價位。所以如果是委託買進的價格,比現在的市場價格還高, limit 單會直接成交。但在實務使用上,比較常使用的是 stop 停損單和 market 市價單, limit 限價單要搭配下單機使用,所以比較不會使用到。
stop 為停損單,即主觀交易中俗稱的觸價單。下方程式碼意指,「 當未來價格來到 9500 以上,買進一口多單 」。
🔶 一般用於突破型策略,當突破某個價格當下要立刻買進,用 stop單是很好的選擇。
strategy.entry(‘Buy_MA’, strategy.long, 1, stop=9500)
stop 單是掛單在那邊等,等價格到就買進,換句話說如果委託買進的價格比現在市場價還低,就會直接成交。
買賣指令 | 說明 |
market | 市價單,速度優先。 以當下的市場價格立刻成交。 一般用於需要搶速度的策略,market 單能用最有效率的方式成交。 |
limit | 限價單,價格優先。當價格優於委託價時成交。 一般用於拉回買進或是逢高賣出,可以成交在比市價更好的價格。 |
stop | 停損單、觸價單,趨勢優先。當價格突破委託價時成交。 一般用於突破型策略,當突破某個價格當下要立刻買進,則 stop 單是很好的選擇。 |