創富坊

有關Trading View的pine script ,其實Multicharts 的power language有點相似,若你是完全新手,可能早兩天的例子仍有些不明白,那今天筆者告訴大家一個寫策略的最基本「格式」,最初便跟著這個格式去寫,到習慣了就會很容易上手。看完這篇應該大家都理解pine script的基本寫法吧!

 

 

//@version=5

 

strategy("My strategy", overlay=true, margin_long=100, margin_short=100)

 

第一步驟:

 

設定變數

 

設定變數

 

例如: rsi_Length=input(9)

 

第二步驟:

 

計算過程(包括技術指標的計算)

 

例如: rs=ta.rsi(close,rsi_Length)

 

第三步驟:

 

設定入市條件

 

例如:

 

LongCondition= rs<=30 and rs>10

 

ShortCondition=rs>=70 and rs<90

 

第四步驟

 

設定入市及離場準則

 

 

可以想像成你想寫英文書信一樣,也會有一定的「格式」要求,要這樣寫Trading View才會明白你想表達什麼。

 

//@version=5

 

strategy("My strategy", overlay=true, margin_long=100, margin_short=100)

 

而以上兩句是一定要有的,version5代表了要告訴Trading View你用的pine script版本,若沒有寫策略就會不能compile,用不到的。

 

 

 

至於strategy 就是告訴Trading View你要寫的是交易策略,Trading View常用的有兩種格式,一種是寫交易策略就是要寫明是strategy,另一種是寫指標,就是沒有入市訊號,只是想自己設計一個技術指標在圖表上觀看,那便要用上indicatior的字眼。

 

如以下的寫法便是寫指標的最開頭部份:

 

//@version=5

 

indicator("My script")

 

另外,寫strategy時大家見到overlay=true, margin_long=100, margin_short=100,因為大家寫好策略後,策略中可能包括了把某些指標顯示在圖表上的,overlay=true就代表你想這些指標顯示在「主圖」上,若想在走勢圖之下顯示,那就寫成overlay=false。

 

而margin_long=100, margin_short=100 是設定長、短倉的入市比例,有時候大家也會看到有些炒家會在這部份加上以下部份,是因為要為backtest做一些設定。在amibroker或multicharts我們會有另外一個頁面做設定的,但Trading View就直接在這裏寫出來便可以。

 

commission_type=strategy.commission.percent, 這代表用百份比來計算佣金

 

commission_value=0.2, 佣金百份比是0.2%

 

initial_capital=10000 最初的本金為10000元

 

slippage= 1, 滑格設定為1個最小價格變動

 

currency=currency.USD  設定用美元來做backstest的單位

 

 

 

例如你想寫以下的策略:

 

 

 

 

RSI(9)跌至30以下但高於10便造好

 

RSI(9)跌至10或升至高於50便平好倉

 

RSI(9)升至70以上但低於90便造淡

 

RSI(9)升至90或跌至低於50便不淡倉

 

這個策略十分簡單,第一個步驟是要看看有那些是有「數字」的,這些數字由於我們想將來可以更容易更改,所以要先將其設定為變數。其實所有技術指標的參數都會是變數,而這個策略中,RSI便需要先設定一個變數。

 

大家在網上找例子會看到很多設定變數的寫法,如看到

 

var int , var float 等,這些筆者之後再講解,最先大家可以先記著這個準則,你先給變數一個名字,然後寫 = input(數字)。

 

以上的例子筆者給RSI的變數名字為rsi_Length,那寫法就是:

 

rsi_Length=input(9)

 

然後第二個步驟是計算過程,某些指標如Zero Lag MACD並沒有內置function的,那就要自己「加減乘除」去計,有些指標是有內置function的,例如RSI便可直接寫。

 

所有寫技術指標的方法都要先加「ta.」在開頭,例如RSI,便是

ta.rsi(列明用那一種數據去計算, 計算的長度)

 

如ta.rsi(close, rsi_Length)

 

就是用收市價去計算,計算日子長度是9日,因為我們在設定參數,已將rsi_Length設定為9。另外你也可以試試用最高價、最低價,成交量,甚至其他技術指標的數值去計算,在Trading View的社群便有些炒家愛計算MACD快線的RSI,寫法就是先計算MACD快線的值,再用以下寫法:

 

ta.rsi(MACD快線值, rsi_Length)

 

最後我們給這個rsi一個名稱,方便寫策略之後的部份可以使用,例如筆者給它名稱為rs

 

寫法就是:

 

rs=ta.rsi(close,rsi_Length)

 

然後第三個步驟就是設定入市條件,最初大家可以用以下的寫法會較簡單:

 

先給四個名稱,包括longCondition , shortCondition, longCloseCondition, shortCloseCondition

 

我們的入市條件是這樣:

 

RSI(9)跌至30以下但高於10便造好

 

RSI(9)跌至10或升至高於50便平好倉

 

RSI(9)升至70以上但低於90便造淡

 

RSI(9)升至90或跌至低於50便不淡倉

 

LongCondition= rs<=30 and rs>10

 

ShortCondition=rs>=70 and rs<90

 

LongCloseCondition=rs<=10 or rs>50

 

ShortCloseCondition=rs>=90 or rs<50

 

 

 

這些過程中會經常用了 「> 」、「<」、「>= 」、「<=」這些符號,代表了大於、小於、大於或等於、小於或等於。也會用很多and 及or 把策略組織起來。另「!=」代表不等如

 

最後是第四個步驟:

 

第四個步驟你需要用上「if….」、strategy.entry 及strategy.close

 

strategy.entry的寫法,造好及造淡是不同的,

 

造好: strategy.entry(“名稱”, strategy.long)

造淡: strategy.entry(“名稱”, strategy.short)

 

而strategy.close 在之後的括弧( ) 內要加上好倉或淡倉的名稱,這才能對應到是要平好倉還是要平淡倉。

 

寫法如下:

 

if LongCondition

 

strategy.entry(“BUY”,strategy.long)

 

if LongCloseCondition

 

strategy.close(“BUY”)

 

這例子中”BUY”是我給好倉的名稱,在strategy.entry中給予名稱,並要用上” “ 這個符號,然後在strategy.close也把名稱再寫一次。

 

再寫平淡倉的部份如下:

 

if ShortCondition

 

strategy.entry(“SHORT”,strategy.long)

 

if ShortCloseCondition

 

strategy.close(“SHORT”)

 

另大家看其他炒家寫的例子,平倉還可以用strategy.exit、strategy.close_all() 等等的,這些之後筆者再逐一講解。

 

以下是整個策略完整的寫法:

 

//@version=5

 

strategy("My strategy", overlay=true, margin_long=100, margin_short=100)

 

rsi_Length=input(9)

 

rs=ta.rsi(close,rsi_Length)

 

LongCondition= rs<=30 and rs>10

 

ShortCondition=rs>=70 and rs<90

 

LongCloseCondition=rs<=10 or rs>50

 

ShortCloseCondition=rs>=90 or rs<50

 

if LongCondition

 

strategy.entry(“BUY”,strategy.long)

 

if LongCloseCondition

 

strategy.close(“BUY”)

 

if ShortCondition

 

strategy.entry(“SHORT”,strategy.long)

 

if ShortCloseCondition

 

strategy.close(“SHORT”)

 

 

 

不過,大家若將文章中的寫法直接copy到Trading View的pine editor中又會看到顯示有錯誤的,當大家在pine editor寫策略時,看到有「紅色」的部份就是有錯了。

 

一般來說會有幾點是常會出錯的:

 

 

 

 

 

1) “ “ 的格式與Trading View的要求不對,把它再打一次便可以

 

2) if , strategy 等要全部細楷的,有時在文章中若寫了If也就會有不同

 

3) if 之後再寫下一句要在第五個字完開始,把句子移右一點便會變成正確,一般在寫完if的句子後按「enter」,trading view會自動告訴你下一句應該在那個位置開始寫的。

 

4) 自已給的名稱有大細楷分的,例如ShortCloseCondition,當中S, C, 都是大楷,當再寫時大細楷要完全一樣的。

 

這些都是最初常會遇到的問題,改正後便可以。若是完全新手,先記好這個「格式」,在Trading View上先寫幾次,應該不會感到太困難,有了基本概念後再慢慢學其他的寫法,累積經驗後便能逐步寫很多不同的策略。

我們網頁: www.quants.hk

Youtube:  https://www.youtube.com/@markchunwai

Facebook專頁: https://www.facebook.com/quantshk/

Patreon: https://www.patreon.com/quantshk

富昌金融集團聯席董事麥振威

電郵: paul.mark881@gmail.com

 

[編輯聲明]

本篇文章為作者所擁有,經版權持有人授權CyberCTM.com發表。

麥振威

程式交易在美國及臺灣其實早已流行,在中國內地也有不少程式交易的專家,而近年程式交易在香港也逐漸興起,其實程式交易不是很多新手想像的那樣神秘,只要學懂基本的用法,遇上問題時有專人解答,再自己不斷嘗試,經過數月的時間,大部份人也會學懂如何將自己的交易策略轉化為程式語言,又或將來在發現一些市場的特性時,也懂得如何利用程式去自行做測試,優化個人的交易策略,無論是股票、期指等也能透過程式做分析,藉此提高交易的回報,本網誌便是希望介紹各種有關程式交易的知識,讓更多的投資者了解這個新趨勢。

聯絡: paul.mark881@gmail.com
網頁: www.quants.hk
 

熱門推介