潮流特區

最新文章

【如何用Trading View 運用不同技術指標寫交易策略】

創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2024-06-13

教授pine script 時最多新手問的就是一些主要的技術指標如何去寫,當你最初練習pine script時就先用一些常用的技術指標來試試寫策略,到熟習後,即使一些未見過的技術指標,只要你在google找到指標的公式,也能自行寫出來。 例如,MACD是內置的指標,第一步是記得trading view的內置指標是要加上「ta.」的,寫法如下: [macdLine,signalLine,_]=ta.macd(close,12,26,9) 再要把MACD的快線在圖表上顯示,就用plot這個功能,寫法如下: plot(macdLine,title="MACDLINE",color=color.red,linewidth=1) 不過,有些指標可能並非內置的,又或即使是內置,但你習慣了自行寫出來,假設大家不懂得什麼是bollinger’s band,然後在網上找到它的公式就是通道的頂部是20日平均線加上兩個標準差,而底部是20日平均線減去兩個準差,那我們就可以自己寫出來。 例如平均線是SMA,要寫出來就要加上「ta.」,先想一個名稱給你每個要計算的答案,什麼名稱都可以,但名稱不可以用數字開頭。例如你想叫平均線的名稱做SMA20,就用以下的寫法: sma20=ta.sma(close,20) 然後又給標準差一個名稱,假設你叫它為ST,那寫法如下: st=ta.stdev(close,20) 然後再分別給多通道的頂部及底部名稱,假設叫做upper及lower upper = sma20+ 2*st lower = sma20 – 2*st 寫法就是這樣簡單,然後upper及lower就可以用作其他計算的部份,例如你的入市策略是最高價升穿bollinger’s band 達5%,那寫法如下: 先給你的入市條件一個名稱,假設名為buyCondition,也給upper高5%的情況一個名稱,假設是upperhigh uppperhigh=upper*1.05 buyCondition=ta.crossover(high,upperhigh) 此外,其他我們常見的技術指標如RSI, ATR等也是內置的,寫法同樣是先給它們一個名稱,例如你想叫它們做rs及atrValue,寫法如下: rs=ta.rsi(close,14) atrValue=atr(14) 其他有些主要常用的技術指標也要自行計算的,如Stochastic,寫法如下: //@version=5 indicator("stochastic") stcLength=input(14) periodK=input(3) periodD=input(3) fastSTC=ta.stoch(close,high,low,stcLength) slowK=ta.sma(fastSTC,periodK) slowD=ta.sma(slowK,periodD) plot(slowK,title="slowK",color=color.red,linewidth=1) plot(slowD,title="slowD",color=color.blue,linewidth=1) 我們再試試寫Rate of change這個指標,先在網上找到它的公式如下: 然後大家可自行先用Trading View 先試試寫出來才看答案,若沒有寫錯,那寫指標這部份的學習便沒有問題了。 Rate of change寫法答案: length = input.int(9) source = input(close) roc_smooth = input(5) roc = ta.sma((100 * (source - source[length])/source[length]),roc_smooth) 最後我們看看super Trend這個指標的寫法,有些時候我們希望指標的參數是可以寫好後直接在圖表上更改的,又或有幾個指標的參數也是一樣的,我們會重覆使用,那就先給參數一個名稱,例如叫做length,可以參考以下superTrend這個指標的寫法: //@version=5 indicator("SuperTrend", overlay=true) length = (10) multiplier = (3) atr = ta.atr(1) basis = ta.highest(high, length) + ta.lowest(low, length) basis := basis / 2 upperBand = basis + (multiplier * atr) lowerBand = basis - (multiplier * atr) trendUp = close > upperBand[1] ? true : close[1] > upperBand[1] ? true : false trendDown = close < lowerBand[1] ? true : close[1] < lowerBand[1] ? true : false plot(trendUp ? upperBand : lowerBand, color=color.blue, linewidth=2, title="SuperTrend") 這裏用了「? :」這種寫法,?前是條件,?後是若符合條件要怎樣,而:後則是若不符合條件要怎樣,若大家看其他Tradind View用家寫的策略,這是十分常見的寫法。 trendDown = close < lowerBand[1] ? true : close[1] < lowerBand[1] ? true : false 這個的意思就是trendDown是名稱,然後看看收市價是否小於上一支陰陽燭的supertrend的底部,若符合條件就是true,否則就再看看上一支陰陽燭的收市價是否低於上一支陰陽燭的supertrend的底部,若符合條件,也是true,但兩個條件也不符合就是false。 我們網頁: www.quants.hk Youtube: https://www.youtube.com/@markchunwai Facebook專頁: https://www.facebook.com/quantshk/ Patreon: https://www.patreon.com/quantshk

【新手學習用pine script 寫運用MACD的交易策略】

創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2024-06-13

學了pine script的基本格式後,大家便可以試試寫一些簡單的策略做backtest。例如以下的例子: //@version=5 strategy("MACD Strategy", overlay=true) fastLength = input(12) slowlength = input(26) MACDLength = input(9) MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength) aMACD = ta.ema(MACD, MACDLength) delta = MACD - aMACD if (ta.crossover(delta, 0)) strategy.entry("MacdLE", strategy.long, comment="MacdLE") if (ta.crossunder(delta, 0)) strategy.entry("MacdSE", strategy.short, comment="MacdSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr) 15 大部份的策略都涉及使用技術指標,那就要每個指標的參數都設定一個變數,例如macd的參數是12, 26,9,那三個數字都要設定為變數,這樣做是為了日後使用可以隨時更改。 在Trading View中寫很多的指標都是以ta. 為開始的,例如你要寫普通的平均線就是ta.sma( ) ,若要寫EMA 指數平滑移動平均線就要寫ta.ema( ) 而( ) 內需要有兩個數值,第一個是用什麼來計算,例如你想用收市價、最高價、最低價,還是成交量等等。而另一個數值就是長度。假設你要計算一條用成交量來計算的10日平均線,那寫法就是ta.sma(成交量, 10)。甚至你要計10日內的RSI平均值也可以,寫法就是ta.sma(rsi數值, 10)。 以上的策略可以看到,原創者所謂的MACD、aMACD及Delta是他自行去設定計算方式的。 首先他計MACD的方法是MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength) fastLength在最初已設定為12,那ta.ema(close,fastLength)就是計算以收市價計,12日的EMA。而slowlength最初也設定為26,那就是計算以收市價計,16日的EMA,然後前者減去後者就是原創者所指的MACD。 而aMACD = ta.ema(MACD, MACDLength)代表了,首先我們計算出MACD的答案,再用這個答案來計算平均數,而MACDLength最初已設定為9,那就是代表了aMACD是以MACD的值來計算9日的EMA。 這樣就有了MACD及aMACD的數值,將MACD – aMACD就會得到delta的答案。 即使是完全新手應該也覺得十分容易吧? 再來我們要學一些基本的,在Trading View中我們要寫「升穿」或「跌穿」就是ta.crossover ( ) 以及ta.crossunder( )。 而( ) 之內在ta.crossover代表前面的值升穿後面的值,若在ta.crossunder則代表前面的值跌穿後面的值。例如ta.crossover( A, B) 就代表A升穿B,若是ta.crossunder(A,B)就代表A跌穿B。 然後我們再看以下幾句: if (ta.crossover(delta, 0)) strategy.entry("MacdLE", strategy.long, comment="MacdLE") if (ta.crossunder(delta, 0)) strategy.entry("MacdSE", strategy.short, comment="MacdSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr) 在Trading View中寫交易策略,請記得是必需要有strategy.entry( ) ,這代表要告訴Trading View要入市的時刻。而( ) 內要寫的就一般有三個部份,第一個部份是名稱,要寫成"MacdLE",這個名稱很重要,若你的策略有分注平倉,要讓Trading View知道你要將那一個已入市的倉位平倉,寫平倉時要列明這個名稱的。 寫了名稱後就是要告訴Trading View你是造好還是造淡,造好的寫法是strategy.long,造淡的寫法是strategy.short,其實有了名稱及已表明是造好還是造淡後已足夠,但有些用家想在圖表上標示一些註解,那就用comment=,以上的策略就是想在圖表上看到MacdLE及MacdSE,他才會加上comment。 而最基本寫策略就是 if ………………. 然後strategy.entry( ………) 以上的策略就是Delta由零以下升至零以上就買入,Delta由零以上跌至零以下就造淡。 這樣整個簡單的策略便寫完,但若你想在圖表上畫上一些線標示買入及賣出的訊號。那便加上plot (……………………) Plot的最基本用法是( ) 內加上: 要畫那一個數值, 名稱, 顏色, 線的寬度, 線的形狀。 以上的策略就是要畫strategy.equity代表資金的變化,然後給予名稱時要用title= “ “ ,之後是顏色,寫法是color=color.什麼顏色,例如color=color.blue,之後是線的寬度及形狀。plot.style_area代表將線條繪製成區域圖形,這個功能在version 4或以上版本才有的。 另大家要留意在pine script 中加上// 大多是註解,加了//後即使你寫一些中文也不會有影響的,不會令策略有變化。原創者在寫plot 時加了// 代表這句只是給大家參考,若把// 冊除才會有plot的功能出現。 即使大家是Trading View的全新手也會覺得十分簡單吧! 筆者會定期將一些在社群中看到的例子解釋給大家看,透過這個過程去學習,即使是全新手應也不會覺得太困難。 我們網頁: www.quants.hk Youtube: https://www.youtube.com/@markchunwai Facebook專頁: https://www.facebook.com/quantshk/ Patreon: https://www.patreon.com/quantshk

【新手學pine script語法必需懂的格式】

創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2024-06-11

有關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

【Trading View 基本使用教學】

創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2024-06-11

2014年我們便開始開辦程式交易課程,當時主要教授的是Amibroker,其後再增加有關Multichart的教學。近年始越來越多學員喜歡用Trading View,故此我們的教學內容也逐漸以Trading View的教學替代Amibroker,而且在Patreon也會定期提供一些Trading View的pine script(version 5)教學,希望會對大家有幫助。 學習pine scrip最好的方法就是參考別人已寫出來的例子,筆者會嘗試先用一些簡單的策略,每句語法給大家講解,多看這些例子後就會很容易上手。 首先,若有用Trading View的會員應該也知道,付了年費使用Trading View後,它所提供的是延時數據,所以只能用作backtest,若要用Trading View做autotrade,則需要申請實持數據,目前若要申請美股包括槓桿ETF如SQQQ及TQQQ等的實時數據大約是每月9.95美元,約77.6港元,其實算是十分便宜。但請留意這不包括標普、納指期貨的,若是想autotrade 美期,則需要額外申請,大約是5美元一個月,約39港元。 不過,筆者提提大家,若已付了Trading View的年費也先不用急著申請實時數據,因為若你本身已有申請interactive Broker的數據的話,其實可導入Trading View使用的。在下期課程也會教大家如何將Trading View連接interactive broker做autotrade(舊學員同時是Patreon會員也可免費重讀這部份的)。 故此,要做autotrade除了可選富途,interactive broker也可以。當然,若你想炒幣,選擇會更多,但筆者沒有教這方面的內容。 若果你完全是新手,也可先下載Trading View,會有一個月免費使用,先講解一下圖表的選擇,在「indicator」中可選不同的技術指標,一些較冷門的技術指標也有提供,如筆者已教過的Fisher Transform、可用以判斷即市中好、淡雙方力量的Vortex Indicator (VI)及判斷即市轉勢位的william fractal 等等也有提供。 圖表的選擇也有很多,如Heikin Ashi、Renko、kagi、Point&figure Chart等,當中Point&figure Chart就是OX圖,筆者覺得觀察OX圖的Intraday 圖表會對短炒有一定幫助 這些選擇圖表及指標的功能應不太困難,任何新手下載Trading View後也可自行嘗試。而Trading View最重要的是「Pine Editor」,就是可以在這裏寫交易策略做back test及autotrade,Trading View用的語法名為pine script,當寫好後可直接按「Strategy Tester」便會有backtest結果。 Trading View的backtest report其實內容十分清晰,在「overview」的部份便可看到資金變化,越平穩向上便越好,代表交易策略賺錢十分穩定。而在圖表上部份也顯示了虧損的情況,虧損不能完全沒出現的,但這部份顯示的形態越「平」越好,代表不會突然出現很大的虧損,若上落很大也代表交易策略在真實執行時會很困難。 另外,在「Performance Summary」則會顯示詳細的back test report,這部份很多完全新手常問筆者,「Total Closed Trade」是什麼,這其實代表你的交易策略在某段時間裏的「總交易次數」,report 也有顯示sharp ratio、profit factor等常見的數據。而「list of Trades」則會顯示每宗交易的詳細資料,基本上Multicharts及Amibroker等有提供的數據,Trading View也有提供,但Trading View不用再自行輸入數據,所以較為方便。 至於「Trading Panel」則是用作連接autotrade及導入外部數據用的,這個會逐步再教大家。 不過,要在Trading View寫策略就必需學習Pine Script,這套語法其實並不困難,但大家要留意,目前大家在Youtube或其他網頁看到的教學,絕大部份都是教 Version 4的版本,但Pine Script其實已更新至version 5,更改也頗多,例如要寫10日平均線在Vesrsion 4可以寫成 sma10=sma(close,10),但在version 5則要加上ta.,要寫成sma10=ta.sma(close,10)。 所以若大家用ChatGPT來幫自己寫Trading View的策略時會發現,ChatGPT的答案大部份都錯的,因為ChatGPT的數據是舊的,它給你的答案也是用version 4寫的。 不過,筆者知道有些學員其實已學過version 4 Pine Script的,又或大家可能在網上看到一些用version 4寫的sample,又很想直接使用,其實也有更方便的做法。在Pine Editor寫策略時先加上 //@version=4,然後按右上角的「...」便會見到「Convert code to v5....」,Trading View可協助將version 4的策略直接改為version 5的。 我們網頁: www.quants.hk Youtube: https://www.youtube.com/@markchunwai Facebook專頁: https://www.facebook.com/quantshk/ Patreon: https://www.patreon.com/quantshk

新書《ChatGPT如配合Multicharts學習程式交易》近日在各大書局已有售

創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2023-12-20

新書《ChatGPT如配合Multicharts學習程式交易》近日在各大書局已有售。 若由一個完全新手要完全熟習Multicharts的語法(Power Language),再學習輸入數據、做回測及連接Auto Trade等步驟可能真的需要一定時間。 不過,自ChatGPT出現後,讀者們已可以直接用中文或英文將交易策略寫出來,再運用ChatGPT直接編寫出答案,無論是簡單的技術指標運用,又或陰陽燭策略,甚至較複習的套利策略,ChatGPT都能運用Multicharts的語法直接編寫答案出來。 雖然ChatGPT的答案未必全部正確,但學員只要明白Multicharts語法的使用原理便能懂得直接修改,這種學習方式比過往需要背誦大量Multicharts語法例子的方法更為有效。 而且若大家要寫大量的交易策略做回測也更為方便,因為所有策略不用自己由頭寫起,ChatGPT寫出大部份內容後再修改便可以,最終能節省不少時間。 本書的例子中除了常見的技術指標使用,也有自行組合的陰陽燭形態,以及一些比較高階的短炒及Daytrade 策略,包括分析恒指重磅股走勢短炒期指的方法、長短倉短炒策略- 同時買入騰訊沽空阿里巴巴等,這些策略只要ChatGPT及Multicharts同時配合使用,要寫出來及再修改也並不困難。 另外一些較少見的技術指標如適合Daytrade或短炒的Detrended Price Oscillator、Chande Kroll Stop、Super Trend、klinger Oscillator等,又或用以判斷單邊市及上落市的Choppiness Index,在交易時也有一定的參考價值,本書除了介紹這些指標的特別用法外,也會講解如何透過ChatGPT協助編寫這些指標,並同時在Multicharts上直接運用。