首先先來介紹一下RSI的公式跟原理
RSI (相對強弱指標) = 100*n根K棒內漲幅加總/n根內漲幅加總+n根內跌幅加總)
其實RSI的原理非常簡單,舉例:n若為5根K棒,其中三根漲,漲幅分別為2點、5點及7點,兩根跌,跌幅分別為4點及7點
套用公式即可得到RSI為:100*(2+5+7)/[(2+5+7)+(4+7)]=56
RSI指標表達出,近n根K棒內,買方對盤勢的相對強勢程度。但RSI用在小型股時要特別注意,由於小型股價格較容易操縱,要檢視漲勢是否為曇花一現,以上例來說,若五根內只有一根漲,但漲幅為40點,其他四根跌幅分別為2點、4點、7點以及8點
其RSI將為:100*40/[40+(2+4+7+8)]=66,還是相對高。此時可以回看那根大漲是否為曇花一現的消息面漲幅,待消息消散,是否仍會持續看漲!
在了解RSI基本原理及公式之後
我們就可以進入Tradingview的程式碼講解環節
//@version=5
strategy("RSI Strategy", overlay=true)
//@version=5 是告訴TradingView該用哪種版本編譯這次的程式碼
我們之後都會用version5來講解策略範例!
strategy()是宣告這個策略的基本設定函數
第一個參數"RSI Strategy"則是將這個策略取名
第二個參數overlay則是設定是否把這個策略覆蓋在圖表上面
我們設定為overlay=true,即把進出場訊號標在K棒上面
length = input.int(title="Length", defval=14)
oversold = input.int(title="Oversold", defval=20)
overbought = input.int(title="Overbought", defval=80)
首先,我們先設定三個變數length、oversold還有overbought
分別為rsi的週期長度、超賣區以及超買區
input.int()函數,它是建立一個input物件並利用其中的方法int
建立input物件的好處是能讓我們事後在平台軟體上就可以修改參數
而不用再回來原始碼這裡修改代碼
而int則是integer的縮寫,即是這個參數需要為整數
然而,三行代碼的頭一個參數title都是設定名稱
第二個參數defval是default value的縮寫
也就是這個數值的預設值,譬如rsi預設取14天,defval就設定為14
同理,oversold跟overbought各自預設為20以及80
rsiValue = ta.rsi(close, length)
buySignal = ta.crossover(rsiValue, overbought)
sellSignal = ta.crossunder(rsiValue, oversold)
ta.rsi()函數是利用TradingView內建的ta(Technical Analysis)物件
這個內建物件可以直接把rsi的值帶出來
我們只需要設定rsi指標的close以及length參數
close即是設定rsi要用成交價計算
length則是我們要取的rsi期間,我們這次舉例預設為14天
接下來我們設定buySignal買進訊號以及sellSignal賣出訊號
用TradingView內建物件ta裡面的crossover方法
crossover方法即為「第一個參數向上穿越超買區overbought」的那根K棒
crossunder方法即為「第一個參數向下穿越超賣區oversold」的那根K棒
(我們這次的範例是用順勢策略作示範)
讀者會發現後面第二個參數都是我們在上一段設定的值
分別為length、overbought跟oversold
上一段先宣告這三個變數,就是為了在此建立訊號用!
if (buySignal)
strategy.entry("Buy", strategy.long)
if (sellSignal)
strategy.entry("Sell", strategy.short)
這一段就是建立進出場訊號了!
跟絕大部分程式交易語法一樣,都是建立if條件式
if 後面就是利用我們上一段建立的buySignal成立條件
後面則是用TradingView內建物件strategy裡的進場方法,即strategy.entry()
而第一個參數"Buy"是幫這個訊號取名
他會在進場的時候把這時候取的名稱標記在圖表上
第二個參數strategy.long即為進一口多單,同理可推第二段空單進場!
這裡要特別注意的是,就像Multicharts的語法buy跟sellshort一樣
這裡的strategy.long跟strategy.short也都會直接反向建倉
譬如現在持有一口多單,策略偵測到空頭訊號,會直接下兩口空單
部位會直接變成一口空單,即不會有空手的階段
這是一個策略的最初雛形,尚未有停損停利設定的最原始狀態
plotshape(buySignal, style=shape.triangleup,
location=location.belowbar, color=color.green, size=size.small)
plotshape(sellSignal, style=shape.triangledown,
location=location.abovebar, color=color.red, size=size.small)
這一段我們來幫訊號標(plot)上圖表吧!
plotshape()函數是將零星的標示標於圖表的函數
第一個參數buySignal即為欲標記的情形,即是我們上面所設定的"買進訊號"
第二個參數style即為當第一個參數設定的訊號出現時,出現的標記圖形形狀
(這裡要特別注意的是,跟上一段的"Buy"會標記在圖表不一樣,譬如現在手上有一口多單,因為我們預設最多一口,此時又出現buySignal就不會再出現"Buy",而只會出現我們現在在這裡設定的buySignal的標示)
第三個參數location是設定希望上一個參數設定的圖案要置於K棒上方還是下方
color參數則為設定標示顏色,此座標TradingView很貼心
可以直接用滑鼠選顏色,各位客官用了就知道!
size參數則為設定標示圖形大小,除了我們這個範例設定為small
它還可以設定為huge、large、normal以及tiny,由大到小排列。
然而sellSignal同理可推,讀者可以自行做上下程式碼的比較!
那這樣我們就完成了今天在TradingView上用pine script程式碼的演示!
這裡把整段程式碼貼在下面,方便讀者可以一次複製
直接貼在TradingView編碼視窗,然後按「新增到圖表」就會跑出策略績效了
//@version=5
strategy("RSI Strategy", overlay=true)
length = input.int(title="Length", defval=14)
oversold = input.float(title="Oversold", defval=20)
overbought = input.float(title="Overbought", defval=80)
rsiValue = ta.rsi(close, length)
buySignal = ta.crossover(rsiValue, overbought)
sellSignal = ta.crossunder(rsiValue, oversold)
if (buySignal)
strategy.entry("Buy", strategy.long)
if (sellSignal)
strategy.entry("Sell", strategy.short)
plotshape(buySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sellSignal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
讀者要注意,要複製到右下角的程式碼喔,不要漏掉了!
尚未註冊TrdingView的投資朋友歡迎使用Kevin專屬註冊連結:
享一個月免費試用Premium帳號,到期後可享50%的續約優惠!
(即使不續約,仍可繼續使用TradingView免費版功能)
⭐目前凱龍承接三大項業務,歡迎洽詢:
- 金融量化系列|凱龍下單機租用 & TradngView & MultiCharts 程式碼諮詢撰寫
- Line官方系列|凱龍Line官方模組租用 & Line官方機器人全系列諮詢架設
- 網站SaaS平台|凱龍雲端應用 & 網站SaaS平台諮詢架設