交易#2-技術分析篇 : 腳本語言Pine Script基礎應用詳解
TradingView
TradingView 是一個廣泛受歡迎的網站和應用程式,為交易者和投資者提供了一個強大且全面的交易工具和社區平台。可以進行技術分析、追蹤市場、分享交易觀點並與其他交易者互動。,TradingView 提供了強大的圖表分析工具。可以使用各種技術指標和繪圖工具來進行技術分析,並進行詳細的市場研究。無論您是使用簡單的移動平均線還是較為複雜的布林帶,TradingView 都具有廣泛的指標選擇,以滿足不同交易者的需求,還可以將這些分析結果應用於不同的時間框架,從短期交易到長期投資,經由實時市場數據和報價,追蹤全球市場的股票、外匯、加密貨幣等資產的價格走勢。無論您是日內交易者還是長期投資者,TradingView 都能提供最新的市場資訊,輔助我們做出交易決策。
TradingView基礎功能很多,完全零基礎建議上Youtube看著操作一遍,像是介面設置、加入指標等等,基本操作方面如果沒有接觸過一定是需要先熟悉一下,由於需要大量圖片,文字比較難說明,這邊就不過多介紹基本操作了。
Pine Script
Pine Script 是 TradingView 平台上的一種專有程式語言,專為開發自訂技術指標和策略而設計。它是一種簡單易學的語言,同時也非常強大,讓用戶能夠在 TradingView 平台上創建和自動化交易策略。
首先進入TradingView,進入Pine編輯器
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/embed/09fb4af3-6054-4fef-8404-1aba86777a6b.png/public)
接下來可以看到編輯介面,也就是Pine編輯器,新增程式後可以處存檔案,以便日後使用,若要新增指標或策略,直接按右鍵也能快速的新增,接下來從最基礎的範例範例開始逐行講解,我會針對程式做講解,但一些語法上基礎的細節如果有問題可以參考官方Pine Script手冊
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/embed/9f5589b7-258e-4e91-92ab-5d546843a1f3.png/public)
SMA(Simple Moving Average,簡單移動平均線)
可以看到圖中,我已經將第一個程式寫上去了,SMA(Simple Moving Average,簡單移動平均線)是一種常用的技術指標,用於平滑價格數據並識別趨勢的方向。通過計算一段時間內的價格平均值來建立起來,在Pine Script中,您可以使用sma()
函數來計算SMA。該函數接受兩個參數:數據源和期間。
數據源:在大多數情況下,您會將SMA應用於收盤價(
close
),因為收盤價是最常用的價格數據。期間:表示要計算SMA的時間段。例如,如果要計算14日的SMA,則將期間設置為14。
寫法範例如下 :
//@version=4
study(title="Simpl,e Moving Average", shorttitle="SMA", overlay=true)
length = input(14, minval=1, title="SMA Length")
sma = sma(close, length)
plot(sma, color=color.blue, title="SMA")
範例詳解:
//@version=4:指定腳本使用的Pine Script版本。
study(title="Simple Moving Average", shorttitle="SMA", overlay=true):設置指標的標題和視覺化選項,overlay=true表示將指標繪製在價格圖表上方。
length = input(14, minval=1, title="SMA Length"):定義一個用戶輸入變數length,表示SMA的計算期間,並設置其預設值為14。
sma = sma(close, length):使用sma()函數計算收盤價的SMA,將結果賦值給sma變數。
plot(sma, color=color.blue, title="SMA"):使用plot()函數將SMA繪製在圖表上,並設置顏色為藍色。
這個示例將在圖表上繪製一條藍色的SMA線,該線代表收盤價的14日移動平均,結果如下 :
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/embed/dfd84379-27d0-4ef1-bdf1-15cedbc84137.png/public)
strategy - 自動化交易 - 平均線交叉
平均線交叉是一種常見的技術分析策略,常常聽到技術分析中,大家所說的黃金交叉、死亡交叉等,利用不同期間的平均線之間的交叉點來識別買入和賣出信號。該策略通常基於兩條移動平均線:快速均線和慢速均線。
平均線交叉策略:
快速均線:這是一條計算較短期間內的平均價格的移動平均線。它對價格變動更敏感,因此反應更快。
慢速均線:這是一條計算較長期間內的平均價格的移動平均線。它對價格變動較不敏感,因此更平滑。
在平均線交叉策略中,當快速均線從下方交叉上穿慢速均線時,這被視為一個買入信號。這意味著較短期間內的價格上升趨勢開始,可能代表著股價上漲的趨勢。
相反,當快速均線從上方交叉下穿慢速均線時,這被視為一個賣出信號。這表示較短期間內的價格下降趨勢開始,可能代表著股價下跌的趨勢。
這種策略的核心思想是當短期均線向上交叉長期均線時,表示市場可能處於上升趨勢,因此可以考慮買入。相反,當短期均線向下交叉長期均線時,表示市場可能處於下降趨勢,因此可以考慮賣出。
儘管平均線交叉策略在某些情況下可能有效,但它仍然是一種基礎的技術分析策略,並且無法保證績效。交易者可以根據自己的需求和交易風格進行調整和優化,並結合其他指標和技術工具來進一步改進策略的準確性和可靠性。
下面我先寫個範例 :
//@version=4
strategy(title="Moving Average Crossover", shorttitle="MAC", overlay=true)
fast_length = input(9, minval=1, title="Fast MA Length")
slow_length = input(21, minval=1, title="Slow MA Length")
fast_ma = sma(close, fast_length)
slow_ma = sma(close, slow_length)
if crossover(fast_ma, slow_ma)
strategy.entry("Buy", strategy.long)
if crossunder(fast_ma, slow_ma)
strategy.entry("Sell", strategy.short)
//@version=4
:指定腳本使用的Pine Script版本。
strategy(title="Moving Average Crossover", shorttitle="MAC", overlay=true)
:設置策略的標題和視覺化選項,overlay=true
表示將策略繪製在價格圖表上方。
fast_length = input(9, minval=1, title="Fast MA Length")
和 slow_length = input(21, minval=1, title="Slow MA Length")
:定義兩個用戶輸入變數fast_length
和slow_length
,分別表示快速均線和慢速均線的計算期間。
fast_ma = sma(close, fast_length)
和 slow_ma = sma(close, slow_length)
:使用sma()
函數計算快速均線和慢速均線,並將結果賦值給fast_ma
和slow_ma
變數。
if crossover(fast_ma, slow_ma)
:檢查快速均線是否從下方交叉上穿慢速均線。
strategy.entry("Buy", strategy.long)
:如果上述條件成立,則使用strategy.entry()
函數進行買入操作。
if crossunder(fast_ma, slow_ma)
:檢查快速均線是否從上方交叉下穿慢速均線。
strategy.entry("Sell", strategy.short)
:如果上述條件成立,則使用strategy.entry()
函數進行賣出操作。
執行結果如下 :
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/embed/56f3b24f-0ad8-47c3-9b9e-e776000a78d0.png/public)
其根本邏輯為,當快速均線從下方交叉上穿慢速均線時,觸發買入信號;當快速均線從上方交叉下穿慢速均線時,則觸發賣出信號。
要注意的是策略調整,可以參考網路很多人分享的策略做出預測,根據不斷績效來調整程式碼,這可能會用到其他的函數或資料庫,需要更深入的學習探討才能創建更有效的策略,主流平台中,平均線交叉是常用的技術分析策略。
以上為兩種最主要的使用方式,新建指標以及自動化交易的基礎,可以看到第一個範例中我開頭使用了study,這是基於Vision4的寫法,V5是使用indicator寫法,兩種常用的類型都稍微認識了,接下來的交易策略也是簡單且受歡迎的技術分析方法
基於布林帶(Bollinger Bands)的交易策略
布林帶是一種常見且廣泛應用於市場分析的技術指標。許多交易者使用布林帶來識別價格波動的範圍和可能的轉折點。布林帶策略是廣泛應用的技術工具,可應用於不同的市場和時間框架。
波動性的衡量:布林帶通過中間線和上下通道的構建,提供了衡量價格波動性的指標。這有助於識別市場的高波動和低波動時期,並在合適的時機進行交易。
趨勢與反轉的識別:布林帶還提供了識別趨勢和可能反轉的線索。當價格趨向上方通道時,可能表明上升趨勢;當價格趨向下方通道時,可能表明下降趨勢。當價格觸及通道邊界時,也可能表明反轉的機會。
簡單易懂:布林帶策略相對簡單易懂,適合初學者學習。它基於基本的統計原理,並使用常見的技術指標計算。對於新手交易者來說,這是一個很好的起點,可以建立對技術分析的基礎理解。
可自定義性:布林帶策略具有一定的自定義性,您可以根據自己的需求和交易風格進行修改和調整。您可以調整計算期間和偏差倍數,也可以添加其他指標和過濾器來提高策略的準確性和適應性。
儘管布林帶策略有其優勢,但在真實交易之前使用模擬交易或回測來評估和驗證策略的效果。此外,始終謹慎管理風險,設置止損和止盈水平,並確保具備充分的交易知識和技能,這也是學習技術分析的目的。
//@version=4
Strategy("Bollinger Bands Strategy", shorttitle="BB Strategy")
// 設置布林帶的計算期間和偏差
length = input(20, minval=1, title="BB Length")
mult = input(2, minval=0.1, title="BB Deviation")
// 計算布林帶指標
basis = sma(close, length)
deviation = mult * stdev(close, length)
upperBand = basis + deviation
lowerBand = basis - deviation
// 判斷進出場條件
enterLong = crossover(close, upperBand)
exitLong = crossunder(close, basis)
enterShort = crossunder(close, lowerBand)
exitShort = crossover(close, basis)
// 定義進出場訊號
strategy.entry("Long", strategy.long, when=enterLong)
strategy.close("Long", when=exitLong)
strategy.entry("Short", strategy.short, when=enterShort)
strategy.close("Short", when=exitShort)
// 繪製布林帶
plot(basis, "Basis", color=color.blue)
plot(upperBand, "Upper Band", color=color.red)
plot(lowerBand, "Lower Band", color=color.green)
我在這邊演示了一個基於布林帶的簡單交易策略,是較為簡單的雛型
//@version=4
:指定腳本使用的Pine Script版本。
study("Bollinger Bands Strategy", shorttitle="BB Strategy")
:設置腳本的標題。
length = input(20, minval=1, title="BB Length")
:定義一個用戶輸入變數length
,表示計算布林帶指標所需的期間,預設值為20。
mult = input(2, minval=0.1, title="BB Deviation")
:定義一個用戶輸入變數mult
,表示布林帶的偏差倍數,預設值為2。
basis = sma(close, length)
:使用sma()
函數計算布林帶的中間線,這裡使用的是收盤價的簡單移動平均。
deviation = mult * stdev(close, length)
:使用stdev()
函數計算布林帶的標準差,並乘以偏差倍數得到上下通道的寬度。
upperBand = basis + deviation
:計算布林帶的上通道。
lowerBand = basis - deviation
:計算布林帶的下通道。
enterLong = crossover(close, upperBand)
:判斷是否收盤價上穿上通道,表示進場買入信號。
exitLong = crossunder(close, basis)
:判斷是否收盤價下穿中間線,表示出場賣出信號。
enterShort = crossunder(close, lowerBand)
:判斷是否收盤價下穿下通道,表示進場賣出信號。
exitShort = crossover(close, basis)
:判斷是否收盤價上穿中間線,表示出場買入信號。
strategy.entry("Long", strategy.long, when=enterLong)
:定義進場買入訊號,使用strategy.long
表示買入方向。
strategy.close("Long", when=exitLong)
:定義出場賣出訊號。
strategy.entry("Short", strategy.short, when=enterShort)
:定義進場賣出訊號,使用strategy.short
表示賣出方向。
strategy.close("Short", when=exitShort)
:定義出場買入訊號。
plot(basis, "Basis", color=color.blue)
:繪製布林帶的中間線,並設置顏色。
plot(upperBand, "Upper Band", color=color.red)
:繪製布林帶的上通道,並設置顏色。
plot(lowerBand, "Lower Band", color=color.green)
:繪製布林帶的下通道,並設置顏色。
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/embed/63c55747-26f6-4e13-9ad3-eb14921a29b0.png/public)
策略根據收盤價和布林帶的上下通道進行交易判斷。當收盤價上穿上通道時,生成進場買入信號,當收盤價下穿中間線時,生成出場賣出信號。同樣,當收盤價下穿下通道時,生成進場賣出信號,當收盤價上穿中間線時,生成出場買入信號。策略中使用的strategy.entry()
和strategy.close()
函數用於進出場訊號的管理。
相對強弱指標(RSI)
學習相對強弱指標(RSI)是因為它是一個相對簡單且廣泛使用的技術指標,對於初學者來說相對容易理解和應用:
相較於其他複雜的指標和技術分析工具,RSI的計算方法相對簡單明瞭。它使用價格變動的相對強弱來提供交易信號,這使得初學者可以較容易理解和應用。
RSI可以提供超買和超賣的信號,幫助識別市場的過度購買和過度賣出條件。這些信號可以作為買入和賣出的參考,幫助理解和為在適當的時機進行交易。
RSI還可以提供趨勢反轉的信號。當RSI從超買或超賣區域回落並跌破特定閾值時,這可能意味著市場趨勢即將反轉。這對於初學者來說是一個重要的參考點,可以幫助他們抓住趨勢轉折的機會。
RSI在許多交易市場和時間框架中都被廣泛應用,包括股票、外匯、期貨等。可以將所學應用於不同的市場和交易工具中。
RSI指標介紹:
RSI的計算:RSI使用了一個計算式來衡量價格變動的強度和速度。它基於一定期間內的價格變化來計算,通常使用14個交易日作為常見的計算期間。
RSI的範圍和解讀:RSI的值範圍在0到100之間。一般來說,RSI在70以上被視為超買區域,意味著市場可能過度上漲,可能發生價格的回調或反轉;RSI在30以下被視為超賣區域,意味著市場可能過度下跌,可能發生價格的反彈或反轉。
RSI的使用方法:
超買和超賣信號:當RSI超過70時,表示市場處於超買狀態,可能是賣出的時機。當RSI低於30時,表示市場處於超賣狀態,可能是買入的時機。
轉向點和趨勢反轉:當RSI從超買區域回落下跌,並跌破70時,可能意味著市場的上漲趨勢結束,可能發生趨勢反轉。相反,當RSI從超賣區域上升,並超過30時,可能意味著市場的下跌趨勢結束,可能發生趨勢反轉。
RSI的背馳現象:當價格形成高點或低點時,同時RSI的相應變化形成低點或高點,而不是與價格形成相應的高點或低點時,稱為背馳現象。背馳可以提供反轉的信號。
RSI的設置:除了計算期間外,還可以調整RSI的設置來改變其靈敏度和準確性。一般來說,較短的計算期間會使RSI更靈敏,但也更容易產生錯誤信號,而較長的計算期間則會使RSI更平滑,但可能會延遲信號的產生。
//@version=4
study(title="Relative Strength Index", shorttitle="RSI", overlay=false)
length = input(14, minval=1, title="RSI Length")
rsi = rsi(close, length)
plot(rsi, color=color.blue, title="RSI")
hline(70, "Overbought", color=color.red)
hline(30, "Oversold", color=color.green)
//@version=4
:指定腳本使用的 Pine Script 版本。
study(title="Relative Strength Index", shorttitle="RSI", overlay=false)
:設置指標的標題和視覺化選項,overlay=false
表示將指標繪製在獨立的窗格中。
length = input(14, minval=1, title="RSI Length")
:定義用戶輸入變數 length
,表示 RSI 的計算長度。
rsi = rsi(close, length)
:使用 rsi()
函數計算 RSI,並將結果賦值給 rsi
變數。
plot(rsi, color=color.blue, title="RSI")
:使用 plot()
函數將 RSI 繪製在圖表上,並設置顏色為藍色。
hline(70, "Overbought", color=color.red)
和 hline(30, "Oversold", color=color.green)
:使用 hline()
函數繪製 RSI 的超買和超賣水平線,並分別設置顏色為紅色和綠色。
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/embed/142d0dc3-53dd-4298-97ca-fee9cbb0042b.png/public)
可以看到直接帶入RSI函數就能簡單的繪製了,RSI是一個單一指標,僅提供了價格變動的相對強弱信息,通常會與其他技術指標和分析工具一起使用,以獲得更全面的市場分析和交易決策。同樣,也需要模擬來評估和驗證策略的效果
總結
本篇為我整理的技術分析筆記第二篇,撰寫文章同時,也期望能夠將已經掌握的技術性的內容更加融會貫通,並與社區上的大家分享,TradingView是每個交易者一定會用到的圖表工具,也是每個學習技術分析必須學習的軟體,多學習總不會錯,對相關領域有興趣的朋友也可以多多學習,創造更加有趣的策略
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/avatar/f600460b-af4a-43ec-899e-f5b2f15ef561.jpeg/public)
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/avatar/f600460b-af4a-43ec-899e-f5b2f15ef561.jpeg/public)