2017年12月11日 星期一

200天EMA (二)

上次我指出恆指在明年第一季將會回落至200天EMA水平,理據是什麼?

其實主要是運用中值回歸(Mean Reversion)的概念。由1990年至今,恆指未曾試過有一年,指數是完全沒有掂到200天EMA的。換句話說,不論是牛市或熊市,每個日曆年,恆指都會至少一次回到200天EMA,才繼續其走勢。

如果不計日曆年,以往恆指回到200天EMA相距最長的時間,要數1991年1月至1992年12月,其23個月的時間。第二長則是1993年1月至1994年3月,共14個月。



然而,其時為香港經濟高速發展時期,股市三年間由3,000點,升上12,000點,上升300%!在這樣強的上升動能下,才會導致較長的時間一直在200天EMA之上。近年,香港經濟已步入成熟期,當然不再有如此高的升幅,亦因此難以長時間處於200天EMA之上。

而這一次,恆指由今年1月起計,至今已有11個月遠離200天EMA,因此,推測時間上會在明年第一季,指數與200天EMA再次接觸。










除了時間上的關係,指數與200天線偏離的幅度亦可給我們一點對後市的啟示。

上圖是恆生指數和200天線,下圖的指標是指數和200天EMA的百分比差距。比如當指標在黃色的0線上時,即代表恆指剛與200天EMA相遇。當指標在橙線水平,即恆指比其200天EMA高出10%,在紅線水平時,恆指比其200天EMA高出20%。

黃色區域分別是2004 - 2007年,及2012 - 2015年的牛市。這段牛市的特色是升勢有秩序,每每升得過急,偏離200天EMA超過10%時,變會回落至200天EMA。

而紅色區域則是升勢更急的階段。除了2009年那次是因為海潚超跌後,因QE而急速收復估值外,另外3次:2007、2011和2015都是在高位急升,分別升至拋離200天EMA 38%、17%和16%,之後便展開熊市下跌。

至於2000年以前的階段,我認為參考性不大了。

所以,結論是?

恆指今年從7月起,已多次拋離EMA200 10%以上,但其後只有小幅震盪,並一路從27,000震上30,000。直至12月,終於有一次較大的調整,目前下跌了2000點,約7%的跌幅,已是全年最大的調整。但距離200EMA還有約1,000點距離。

到底恆指會繼續今年7 - 11月的小幅震盪格局,還是反覆下試200天EMA?我傾向認為是後者。這看法沒有更多的資料支持,只是我認為變幻才是永恆,市場不會一直保持同一節奏運行,所以我認為今年7 - 11月的走法已出現變化。

由於不知會以可種形式進行調整,或以急跌一次性完成,或以反覆震盪橫行完成。因此,在操作上,靠近200天EMA就多買一些,遠離200天EMA就多持一點現金。直至落到200天EMA便100%長倉繼續坐這個牛市。

2017年12月8日 星期五

200天EMA

移動平均線是技術分析中最常用的指標,常用的有10天、20天、50天、100天、200天和250天。實際上,選取這些天數沒有什麼神奇的地方,只是取整數求方便,以及每條線之間相隔一定的時間比例,方便觀察市場上短中長線的變化。

假如你嫌這樣不夠精細,在Amibroker中,我們可以做出像下圖的Rainbow EMA,這樣便可以Spectrum的形式觀察移動平均線的變化。但說實話,我自己就覺得Less is More。



在眾多移動平均線中,我自己最重視的,就是200天EMA,它可以說得上是大市的牛熊分界線。

我對這條線的理解,並不是簡單的當指數在200EMA之上就是牛市,當指數在200EMA之下就是熊市。

又或是當指數升穿200EMA就買入,跌穿200EMA就賣出。因為只要簡單做一下回測,就發現這策略是不可行的,特別是在2011 - 2015這段上落市之中,更是被人左一巴右一巴。



這條線真正的用法:是預視牛市和熊市的最後一浪。

先看圖,再解釋。

1997









2000










2007










2011









2015



大家有發現什麼嗎?

在牛市展開最後一浪,一定會先回落至200天EMA,才發力向上衝。同樣地,在熊市完成前,都一定會先反彈至200天EMA,才進行最後大清洗。

以往,在一些較長的牛市中,如1997、2007等,在牛市中段會多次下試200天EMA。所以,不是說下試200天EMA後就一定會出現最後升浪,而是說假如沒有下試200天EMA,最後升浪並未出現。










以現時恆指為例,雖然今年已升至30,000點高位,但上一次下試200天EMA已是16年12月,相距太久,這麼慢的升浪並不會是最後一浪。

我預期這次恆指調整將會以200天EMA為目標,於明年第一季反覆調整,至於其後的上升是否這輪牛市最後一浪,就要看到時的上升速度、成交、市寬等等去驗證了。

2017年12月1日 星期五

新高新低比率 (四)

上次我們看到,在過去數年,若新高新低比率背馳,常能預視大市將作出轉勢。

然而,在今次的升浪中,卻未能發出有效預測。



16年4月時,出現了一次頂背馳,其後出現了一次小型調整。其後,在今年4月,再出現了一次頂背馳。但這一次,非但沒有回調,更突破急速向上。

到底是什麼原因令到今年背馳失效呢?我認為有兩個可能原因:

1. 過去數年是大型上落市,因此,轉角的情況較多;而今年是單邊升市,所以即使背馳也不影響升勢。

2. 今年證監打擊殼股市場,嚴重影響炒作氣氛,導致中小股炒作活動減少,未能隨大市上升。要知道,港股主板雖有1800多隻,但有超過1000隻都是無投資價值的小型、蚊型炒股、殼股。當這堆股半死不活,自然影響比率數字。

現時,再次出現一次頂背馳,到底這次會出現一次較為顯注的調整,還是繼續突破向上呢?也許我們需要從更多其他角度分析,才能找出答案。






2017年11月28日 星期二

新高新低比率 (三)

上次成功地製作出22天新高比率的數據,並畫到股價圖的下方,方便分析。

新朋友可以重溫一下:

這一次,我打算把新低指標也加到圖上,再來看看是否有助預測後市走勢。

既然我們已知道新高比率如何製作,現在要製作新低比率並不難。
在原本的Formula 上加兩行即可:

New_Low_Amount = Low < Ref ( LLV (Low, 22), -1);

AddToComposit ( New_Low_Amount, "~NewLowAmount", "X");



Scan完後,便會多了一個記錄著22天新低數據的Ticker: ~NewLowAmount。
把它除以所有股票數量,得出22天新低比率,然後用Foreign plot出來,變大功告成。



我把新高比率設定成綠色,新低比率設定成紅色,方便觀看。



初步可以看到,大部份時間指數上升時,新高比率會愈來愈高,直至見頂回落;而指數下跌時,新低比率則會愈來愈高,直至見底回升。

為了更直觀地查看指標,我決定把新低比率變成負數,同時把指標變成Histogram。



這樣,指標升跌的方向就會變得跟指數升跌的方向一樣,方便分析任何異常情況。

比如說,技術分析中,常用的背馳概念,或許在這個新高新低比率中,也能應用,幫助分析後市?

比如說,2013、2014、2015年均出現指數與新高新低比率的走勢背馳的情況。指數上升,但創新高的股票比率卻下跌,此現象我們稱為頂背馳,或熊背馳,結果後市見頂回落。



有頂背馳,自然就有底背馳,2012、2014、2015均出現過此現象,指數一底低於一底,但創新低的股票卻愈來愈少,其後大市均見底或出現中期反彈。



假如將其套用到這兩年的市況,又是否適用呢?

續。

2017年11月22日 星期三

每天自動啟動Amiquote (一)

現在每天用Amiquote下載數據,只要按幾下即可,十分方便。雖然如此,對我來說,每天按幾下仍是一件十分不輸快的重覆性工作,應該要想辦法讓電腦去幫忙完成。

很快,我找到了原來Windows是有一個內置的程式叫Task Scheduler,可以設定條件後自動進行工作。比如每天7點啟動Chrome、開機後自動啟動小畫家等等。




既然如此,我自然可以讓它每天早上自動啟動Amiquote,那我又可以多睡一會了(笑)。

好,現在就試試到底搞不搞得到吧。

Task Scheduler進去後的板面是這樣的。



在右手邊有一個Create task 的Button,這裡就是我們新增任務的地方,完成所有設定,它就會自動運行了。首先,我們按下去,會出現這樣一個窗格:



第一步,先填名稱,填一個一看就知道這個Task是做什麼的比較好,比如填Start Amiquote吧。

然後,到Trigger這個位置,按New。




之後會出了這個window。我的做法就是選weekly,然後把星期一至五都打勾。時間就在8時多,太早的話怕數據還沒出來。



OK了之後,就到Action的板面按New,就出來這個window。



































然後,我們在Browse裡找到Amiquote的檔,比如我自己的是叫"HKMainboard"。






















然後OK所有野。在Task Scheduler Library中就會多了這個我們新設的任務:Start Amiquote



然後我們按Run。卻出了這個window,有些地方不對........

























原來,在Task Schedulers裡,不能簡單地這樣選一個程序來開,要有點改動。我們先回到Task Scheduler Library,在"Start Amiquote"上Right Click,選Properties,就可以回到早前設定任務的板面。























在Action->Program裡,我們要把整個路徑放到Add arguments 上,只留下"HKMainboard.tls"在第一行。

設定完成後,我們再Run一次。這次不同了,出了這個window:




































我們按OK後,卻又出了個window.........


















好,都做到這個地步了,你想怎樣我照做就是了。我把HKMainboard.tls複製一份放到桌面,再Run一次.........




























終於成功把HKMainboard開出來了!!!但是...................我還是要在Amiquote裡按Start download ar!! 而且之前還有一步要按OK的,那豈不是完全沒意思嗎?結果還是要我自己按。

看來功夫不只這麼簡單,我還要找辦法在自動啟動Amiquote後,再自動開始下載才行。

續。

2017年11月20日 星期一

Organize Assignment - 管理 Tickers 工具

早前有朋友問,如果想做不同市場的市寬,比如說港股、A股、美股的市寬,應如何做?

其實方法與早前在新高新低比率的文章中所說的沒有分別,但有兩點需要注意的地方:

1. 須要把港股、A股、美股放到不同的Markets

比如好像我自己,就分了美國的NYSE(New York Stock Exchange)、Nasdaq、AMEX(American Stock Exchange)、香港的HKSE,和A股的Shenzhen和Shanghai Exchange。




在哪裡可以做到呢?只要到Symbol -> Categories 就可以改名。



Markets的第一項我建議留空或像我這樣寫"New",因為新的TickerS都會自動被分配到第一個Market,如果你第一個是正常分類的Market,比如HKSE,那有新Ticker的時候就會加進了雜質,不為意沒整理的話,得出來的數據就會錯了。



Categories主要是改名和移動上下的位置,如果要更改裡面的成份,就要到Symbol -> Organize Assignment.





這些Markets是mutually exclusive的,意思是一隻股票只能屬於一個Markets,不能同時屬於兩個Markets。比如0700.HK,你放了它在HKSE,就不能再放到NYSE。

如果同一隻股票想放到兩個組合,那怎麼辦?只要放到Watchlist就可以了。Watchlist是沒有任何限制的。

把股票分配到它們各自所屬的Markets後,只要在制作市寬指標時選相應的Market去Scan就可以。

-------------------------------------------------------------------------------------

2. 紀錄不同市場市寬數據的Tickers須要用上不同的名稱

比如說:

紀錄港股總數:
AddToComposite( 1, "~HKStockAmount", "X");
Scan 的時侯在Filter選Market -> HKEX

紀錄美股總數:
AddToComposite( 1, "~USStockAmount", "X");
Scan 的時侯在Filter選Market -> Nasdaq + NYSE + AMEX

假如單純Copy and paste忘了改名字,就會把舊數據overwrite了。比如說先Scan HK,而後Scan US,但兩個Ticker都叫"~HKStockAmount",那"~HKStockAmount"內的數據就會變成美股數量了。

2017年11月17日 星期五

新高新低比率 (二)

上一次,我們成功得到了「22天新高股票數量」這個數據,但又來了兩個問題:

1. 怎樣把它放到跟指數一起看,方便分析?
2. 現在是一個absolute的數量,每周都有新股上市,股票數量不斷增加,如果分析的時間跨度長的話,「22天新高股票數量」一定會愈來愈大,就很難拿以前的數字作參考。因此,必須把它化為relative的比率,這又要怎樣做呢?

--------------------------------------------------------------------

要解決第一個問題,我們需要用到一個新的Function:Foreign

這個Function可以幫我們讀到當前ticker以外的ticker的數據,直接用例子說明:



我們現在Plot一個技術指標,用的array是Foreign("~NewHighAmount","C"),也就是"~NewHighAmount"這個ticker的收市價。這和我們現正看的ticker:^HSI是完全無關的。

可以看到最底的Pane,黃線顯示的就是「22天新高股票數量」。

--------------------------------------------------------------------

第二個問題,首先要知道新高股票比率如何計算。

新高股票比率 = 新高股票數 / 全部股票數

要得到全部股票數,不難,我們只要用AddToComposite就可以。條件就填1,即是所有股票都符合條件,再給一個新的Ticker名稱,如:

AddToComposite( 1, "~AllStockAmount", "X");

再Scan一次即可。



然後,只要在Plot的Array中放進用 「新高股票數」 和 「全部股票數」計算出來的 「新高股票比率」即可。



即可得到新高股票比率的指標。

「新高股票比率」可算是一種量度整體市況的指標,因它並不是只用一隻股票的數據來計算,而是用到全部股票。在技術分析中,我們稱這類指標為「市寬指標」。

運用以上的方法,大家只要改改參數,即可得到不同Time Frame,短中長線的新高比率指標。如果大家改改公式,便可得到從其他角度計算出來的市寬指標,比如新低比率、在250天線以上的股票比率、RSI超買超賣比率......

大家如果研究到哪個市寬指標比較有效分析市況,不妨拿出來一起討論。


2017年11月16日 星期四

新高新低比率 (一)

上星期分享了選出創新高股票的方法。週末時,我在想如果利用每天創新高創新低的股票比例,是否可以幫助判斷大市趨勢的改變呢?但要做這個分析,首先要有每天創新高創新低的股票比例的數據。

問題是,這個每天「新高股票數量」的數據要怎樣得到,和紀錄下來呢?

要得到某天的數據的話,可以用exploration,但總不能一天一天人手紀錄下來這麼笨吧!最後,我終於找到解決之法,就是運用AddToComposite這個Function。

AddToComposite可以幫我們把數列存到一個新的Ticker中。到底是什麼一回事?我直接用例子說明。

比如我們想紀錄「22天新高股票數量」這個數列:

1.首先,我們設定這個公式條件,像前文講過的:
 High > Ref(HHV(High, 22), -1)

為了方便易看,我們用一個Variable代替這條件:
New_High_ Amount = High > Ref(HHV(High, 22), -1);

2. 然後,用AddToComposit,其語法是這樣的,詳細可參考Amibroker內的Help Content:
AddToComposite(array, "ticker", "field")

AddToComposite( New_High_ Amount, "~NewHighAmount", "X");

我講解一下,array就是把選股條件放進去,"ticker"就是輸入ticker的名稱,"field"可填"O","C","H","L","V"或"X",意思是指定把數列放進ticker中的OCHLV哪一個欄裡,如果填"X"就是放到所有欄中的意思。

3. 最後,由於要Scan才能run到這段code,所以我們要加上一段 Buy = 0; 的Code。Formula的部份就完了。


4. 那我們就可以Scan了。(當然要選好Scan的範圍,這裡就不重複了)



5. Scan完後,我們可以看到,在Market 253中,會多了~NewHighAmount。而且,在圖中,會看到一堆點,這個就是每天「22天新高股票數量」。



現在,我們終於有了「22天新高股票數量」這個數據,但又來了兩個問題:

1. 怎樣把它放到跟指數一起看,方便分析?
2. 現在是一個absolute的數量,每周都有新股上市,股票數量不斷增加,如果分析的時間跨度長的話,「22天新高股票數量」一定會愈來愈大,就很難拿以前的數字作參考。因此,必須把它化為relative的比率,這又要怎樣做呢?

續。



2017年11月14日 星期二

指標 Indicator

我們常會在股價圖中,或圖的下方,加上形形式式的技術指標,去幫助我們分析。

在Amibroker中,使用指標,或編寫自己的指標都很方便。

比如說,Amibroker本身已內置了大量常用的技術指標,在"Charts" windows 中可以見到。



大部份內置的指標都在"Indicator"的Folder內可以找到,比如RSI、MACD、ADX等等。

只要Double Click你想要的指標,它就會被放到新的Pane上。設定參數,再按OK就完成。



假如想要把指標放到已存在的Pane上,比如說把移動平均線放到跟股價圖一起。只要把指標拖到圖上即可。



再來就是編寫指標。這裡我們需要用到一個重要的Function: Plot。

故名思義就是把指標畫到圖上。

Plot有4個必要的參數:
Array數列:就是畫到圖上的數值,或計出數值的公式
Name:給它一個名
Color:顏色
Style:是線形圖、還是柱形圖等等

比如
Plot(1, "Testing", ColorYellow, StyleLine);



就畫出一條數值是 1 的橫線。

又比如:
Plot(ROC(C,250), "Testing", ColorAqua, StyleLine);



就畫出過去250天回報的線了。


2017年11月13日 星期一

Amiquote 加速下載

現在每天都用Amiquote下載港股數據。但有一個問題,就是要下載很久。

由於港股有接近1800只股票,Amiquote下載的速度大概是一秒一隻,換算下來,每天差不多要30分鐘。

而且港股上日的數據,一般要到第二天早上(具體時間不清楚),yahoo才會更新。如果我要每天早早起來,下載數據。感覺上成件事很笨,很沒有效率。明明是在用電腦,怎麼事情都沒有自動化呢?

因此,我上網找了一下到底有沒有方法可以加快下載速度。原來解決方法十分簡單。在Amiquotesetting里就可以辦到。




nunber of simultaneous downloads 上,原本預設的數值是1,即是每次同時下載一隻股票的數據。

只要把這個數字改成10,就可以有十倍的速度了。







































希望可以幫到遇到同樣問題的用家。

200天EMA (二)

上次我指出恆指在明年第一季將會回落至200天EMA水平,理據是什麼? 其實主要是運用中值回歸(Mean Reversion)的概念。由1990年至今,恆指未曾試過有一年,指數是完全沒有掂到200天EMA的。換句話說,不論是牛市或熊市,每個日曆年,恆指都會至少一次回到200天...