什麼是Pine腳本?
Pine Script 是一種腳本語言,用於修改 TradingView 平臺上的圖表。該平臺爲您提供了許多功能來做到這一點,但 Pine Script 可以讓您朝着您的目標邁進。無論您是想更改價格行爲圖表的顏色還是回測新策略,Pine 編輯器都將幫助您根據需要自定義實時圖表。
該代碼有很好的文檔記錄,因此請務必查看用戶指南以獲取更多信息。通過本教程,我們旨在討論一些基礎知識並提供可用於交易數字貨幣的指標。
準備
開始使用 Pine Script 非常容易。我們編寫的任何代碼都在 TradingView 的服務器上運行,因此我們可以使用編輯器並從瀏覽器開發腳本 - 無需額外下載或配置。
在本教程中,我們將爲比特幣/幣安美元 (BTCBUSD) 貨幣對創建圖表。如果您還沒有帳戶,您可以免費創建一個帳戶(也可以提供專業訂閱,但本指南不是必需的)。
點擊此鏈接,您將看到類似於以下內容的圖表:

您的圖表可能會更加複雜。
在這裏,我們想要一個功能齊全的圖表 - 單擊按鈕即可訪問它。這爲我們提供了更詳細的概述和繪圖工具,以及用於繪製趨勢線等功能的選項。

功能齊全的圖表。您可以通過單擊突出顯示的選項卡上方的視圖來編輯時間範圍。
我們不會討論如何使用各種可用的工具,但如果您對技術分析感興趣,我們強烈建議您查看它們以熟悉它們。在左下角(圖中突出顯示),您會發現幾個不同的選項卡 - 單擊 Pine Editor。
鬆編輯器

該編輯器爲您提供了一系列迷人的功能。我們將告訴它我們想要做什麼,然後單擊“添加到圖表”以查看我們的評論出現在頂部。請注意,如果您一次輸入多條註釋,圖表可能會變得雜亂,因此我們將在示例之間刪除它們(右鍵單擊圖表 > 刪除指標)。
可以看到我們已經有兩行代碼了。讓我們單擊“添加到圖表”看看會發生什麼。

在原始圖表下方添加了第二個圖表。新圖表將代表相同的數據。將鼠標移到“我的腳本”按鈕上,然後單擊省略號將其刪除。讓我們更詳細地討論代碼。
學習(“我的腳本”)
第一行設置我們的評論。它只需要您想要調用指標的名稱(在本例中爲“我的腳本”),但我們還可以添加一些可選變量。其中一個變量是覆蓋,它告訴平臺將指標放置在當前圖表上(而不是新的扇區上)。正如您在第一個示例中看到的,它默認爲 false。因此,我們現在不會看到它運行,overlay=true 將指標添加到當前圖表。
劇情(關閉)
該線是繪製比特幣收盤價的指令。該圖爲我們提供了折線圖,但我們也可以顯示價格走勢和條形圖,稍後我們將看到。
現在讓我們嘗試以下操作:
//@version=4 study("我的腳本", overlay=true) plot(open, color=color.purple)
添加此符號後,您應該會看到第二個圖表(看起來原始圖表已移至右側)。我們所做的只是繪製開盤價。由於當天的開盤價是前一天的收盤價,因此它們具有相似的形狀是有意義的。
好的!讓我們刪除現有的註釋(請記住,我們通過右鍵單擊並按刪除指示器來執行此操作)。將鼠標移至 BTC/BUSD 上,然後單擊隱藏按鈕也可刪除當前圖表。
許多交易者更喜歡價格走勢圖表,因爲它們比我們剛纔做的簡單繪圖給我們提供更多信息。讓我們在下面添加它們。
//@version=4 study("我的腳本", overlay=true) plotcandle(開盤價, 最高價, 最低價, 收盤價)
一個好的開始,但缺乏色彩讓它有點沉悶。理想情況下,當特定時間範圍內開盤價大於收盤價時,我們應該有紅色蠟燭,而當收盤價超過開盤價時,我們應該有綠色蠟燭。我們將在蠟燭圖()屬性上方添加一行:
//@version=4 study("我的腳本", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close)
這種情況發生在每個價格行爲圖表中,以及檢查開盤價是否大於或等於收盤價。在這種情況下,這意味着價格在特定時期內下跌,因此價格走勢圖將顯示爲紅色。否則,它將被染成綠色。修改drawcandle()函數以輸入配色方案:
//@version=4 study("我的腳本", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close, color=colors)
如果您尚未刪除現有指標,請將其刪除,然後將此指標添加到圖表中。我們應該有一些代表正常價格行爲圖表的東西。

繪製移動平均線 (MA)
下面我們有一些基礎知識。讓我們繼續討論第一個自定義指標 - 指數移動平均線或 EMA。它是一個有價值的工具,可以讓我們消除市場干擾,更容易理解市場走勢。
指數移動平均線與簡單移動平均線 (SMA) 略有不同,因爲該平均線關注最新數據。它傾向於對突然的變動做出反應,通常用於短期交易(例如日間交易)。
簡單移動平均線 (SMA)
我們也可能會畫一個簡單的移動平均線,所以我們應該稍後比較它們。將此行添加到您的腳本中:
繪圖(sma(關閉,10))
這代表前 10 天的平均值。調整括號中的數字以查看考慮不同時期時曲線的變化程度。

簡單移動平均線基於前 10 天。
指數移動平均線 (EMA)
指數移動平均線可能有點難以理解,但不用擔心。讓我們詳細考慮這個方程:
EMA = (收盤價 - 前一天的 EMA) * 乘數 - 前一天的 EMA
那麼這告訴我們什麼呢?那麼,每一天的新移動平均線都是根據前一天的移動平均線計算的。乘數是最近一段時間的“數據權重”,計算公式如下:
乘數 = 2 / (EMA 長度 + 1)
對於簡單移動平均線,我們需要確定指數移動平均線將持續多長時間。在結構方面,指數移動平均圖與簡單移動平均圖類似。將其繪製在簡單移動平均線旁邊,以便您可以比較它們:
//@version=4 study("我的腳本", overlay=true) plot(sma(close, 10)) plot(ema(close,10))

您可以看到兩種類型的移動平均線之間存在細微差別。
嵌入腳本
到目前爲止,我們已經手寫了代碼,以便您熟悉它。但是,讓我們提供一些有助於節省時間的東西,特別是在編寫更復雜的腳本時,並且我們不想從頭開始。
單擊位於編輯器右上角的“新建”按鈕。您將看到一個包含所有不同類型技術指標的下拉菜單。單擊指數移動平均線查看指數移動平均線指標的源代碼。

然後將其添加到圖表中。
這與我們自己的代碼不同——您會注意到 input() 屬性。它非常好用,因爲您可以單擊此框...

您還可以通過單擊設置輪輕鬆更改彈出窗口中的一些值。

我們將在以下腳本中添加兩個 input() 屬性來演示如何執行此操作。
相對強弱指數 (RSI) 圖表
相對強弱指數(RSI)是技術分析中的基本指標之一。它被稱爲動量指標,這意味着它衡量資產買賣的速率。 RSI 評分範圍從 0 到 100,試圖告訴投資者資產是否超買或超賣。通常,如果資產的得分小於或等於 30,則被視爲超賣;如果資產的得分大於或等於 70,則被視爲超買。
如果您轉到“新建”>“RSI 策略”,您可以親自看到這一點。 RSI 在 14 個週期(即 14 小時或 14 天)內進行測量,但您可以自由調整此設置以適合您自己的策略。
將其添加到圖表中。您現在應該看到一些箭頭(由代碼中的 Enter.strategy() 屬性標識)。 RsiLE 表明該資產可能處於超賣區域,因此存在潛在的買入機會。而 RsiSE 則強調了資產處於超買區域時的潛在賣點。請注意,與所有指標一樣,它們不應被視爲價格上漲或下跌的明確證據。
執行回測
有一種方法可以讓我們測試自定義指標。儘管過去的表現並不能保證未來的結果,但回測腳本的過程讓我們瞭解它們在接收信號方面的有效性。
下面是一個簡單腳本的示例。我們將創建一個簡單的策略,當比特幣價格跌破 11,000 美元時進入多頭交易,並在價格超過 11,300 美元時退出交易。因此,我們可以知道該策略在歷史上的盈利情況。
//@version=4 策略(“ToDaMoon”,覆蓋=true) 輸入 = 輸入(11000) 退出 = 輸入(11300) 價格 = 關閉 如果(價格<= 輸入) 策略。輸入(“BuyTheDip”,策略。long,評論=“BuyTheDip”) 如果(價格> =退出) 策略。關閉所有(評論=“SellTheNews”)
在這裏,我們將進入點和退出點定義爲變量 - 兩者都是輸入,這意味着我們可以稍後在圖表上更改它們。我們還設置了一個價格變量,它記錄每個時期的收盤價。因此,使用 if 語句是有邏輯的。如果括號內的部分爲真,則縮進塊將被激活。否則,它將被跳過。
此外,如果價格下跌或等於所需的入場價格,則表達式將被評估爲 true,我們將打開買入交易。一旦價格等於或超過所需的退出價格,第二個區塊將被激活,並關閉所有未平倉交易。
我們將使用箭頭向圖表添加註釋來指示進入點和退出點,因此我們在註釋框中命名了這些點(在本例中爲“逢低買入”和“新聞賣出”)。複製符號並將其添加到圖表中。

您現在可以看到圖表上的指標。您可能需要縮小才能查看。
TradingView 將您的規則應用於舊數據。您還會注意到從 Pine 編輯器到“策略測試器”選項卡的轉換。這使您可以看到潛在利潤的概覽、交易列表及其各自的表現。

我們進入和退出的交易。
將項目鏈接在一起
現在是時候使用到目前爲止描述的一些概念來編寫我們自己的程序了。我們將使用指數移動平均線和 RSI 的值來結合它們,以便爲價格行爲圖表着色並獲得可想象的洞察力。
這不應被視爲財務建議——因爲沒有客觀定義的正確方法來使用該指標。與所有其他指標類似,該指標應與其他工具結合使用來制定您的投資策略。
讓我們開始編寫新腳本。從圖表中刪除所有指標,並隱藏 BTC/BUSD 圖表,以便我們有一個空白圖表可以開始使用。
讓我們首先定義這項研究。您可以使用任何您想要的名稱,只需確保設置overlay=true即可。
研究(title=“幣安學院腳本”,overlay=true)
還記得我們之前討論過的指數移動平均方程嗎?我們需要爲乘數提供指數移動平均線所用時間段的數據。讓我們將其設置爲需要整數的輸入字段(因此,沒有小數位)。我們還將指定最小值 (minval) 和默認值 (defval)。
研究(title="幣安學院腳本", overlay=true) emaLength = 輸入(title="EMA 長度", type=input.integer, defval=25, minval=0)
我們可以使用新變量計算圖表上每根蠟燭的 EMA 值:
研究(title="幣安學院腳本", overlay=true) emaLength = 輸入(title="EMA 長度", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength)
驚人的。關於相對強弱指數(RSI)。我們將以類似的方式進入該時期:
study(title="幣安學院腳本", overlay=true) emaLength = 輸入(title="EMA 長度", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = 輸入(title="RSI 長度", type=input.integer, defval=25, minval=0)
現在我們可以計算出:
study(title="幣安學院腳本", overlay=true) emaLength = 輸入(title="EMA 長度", type=input.integer, defval=25, minval=0) emaVal = ema(close,emaLength) rsiLength = 輸入(title="RSI 長度", type=input.integer, defval=25, minval=0) rsiVal = rsi(close,rsiLength)
此時,您應該意識到價格行爲圖表的顏色取決於 EMA 和 RSI 值。讓我們考慮一個例子,當 (a) 蠟燭的收盤價穿過 EMA 且 (b) RSI 高於 50 時。
爲什麼?那麼,您可能會決定將這些指標結合使用來告訴您何時購買或出售比特幣。例如,您可能認爲滿足這兩個條件意味着現在是進入多頭交易的好時機。或者,您可以使用指標來提醒您何時不應出售,即使其他指標另有顯示。
所以,下一行看起來像這樣:
study(title="幣安學院腳本", overlay=true) emaLength = 輸入(title="EMA 長度", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = 輸入(title="RSI 長度", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal 且 rsiVal > 50 ? color.green : color.red
如果我們將其翻譯成簡單的英語,則意味着如果 EMA 超過收盤價並且 RSI 得分超過 50,我們會將蠟燭塗成綠色。否則,它將被染成紅色。
然後,繪製指數移動平均線:
study(title="幣安學院腳本", overlay=true) emaLength = 輸入(title="EMA 長度", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = 輸入(title="RSI 長度", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal 且 rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA")
最後,繪製蠟燭,確保包含顏色變量:
研究(title="幣安學院腳本", overlay=true) emaLength = 輸入(title="EMA 長度", type=input.integer, defval=25, minval=0) emaVal = ema(close,emaLength) rsiLength = 輸入(title="RSI 長度", type=input.integer, defval=25, minval=0) rsiVal = rsi(close,rsiLength) colors = close > emaVal 且 rsiVal > 50 ? color.green : color.red plot(emaVal,“EMA”) plotcandle(開盤價,最高價,最低價,收盤價,color=colors)
腳本就完成了!將其添加到您的圖表中以查看其實際情況。

使用 EMA/RSI 的 BTC/BUSD 圖表。
結論性想法
在本文中,我們瞭解了使用 TradingView 的 Pine 編輯器可以完成的操作的一些基本示例。您應該能夠對價格圖表進行簡單的評論,以便從指標中獲得更多見解。
我們在這裏只突出顯示了兩個指標,但創建更復雜的指標很容易 - 無論是通過重新定義內置腳本還是自己編寫它們。
需要鼓舞人心的想法嗎?以下文章可能會幫助您爲下一個項目獲得一些想法:
