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,就可以有十倍的速度了。







































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

2017年11月10日 星期五

選出每日新高的股票

由於我大部份時間都是選強勢股,做順勢交易,所以很重要的是要知道當前哪些股份是強勢股。

其中一個我常用的方法是看創新高股票的名單,這個名單在不少財經網站都會有。但既然有了Amibroker,那我就可以DIY自己的創新高股票名單了。不但可以自訂參數,或加上額外的條件,而且以後相同的程式碼亦可拿去放進策略裡測試。

在Amibroker裡,有一個很有用的Function:HHV(Highest High Value)。

語法是這樣的:HHV(X, n)

- X是O,C,H,L,V
- n 是時間參數

比如,10日內的最高價就是 HHV(High, 10)。

那選出創10日新高的股票就很簡單是 High > HHV(High, 10)。

可是,卻沒選出一隻股票出來。



這沒有可能,又不是大跌市,而且只是10天新高,又不是1000天,按理應該有很多隻,所以是哪裡有問題呢?。檢查了時間和選股範圍都沒有問題,那就應該是程式碼出問題。

對了,原來這10天內的最高是把今天的最高都算進去的,所以即使今天創了新高,今天的高位亦只能等於10天內的最高,自然是選不出任何股票了。

哪怎麼辦呢?

怎樣能寫出過去10天(不計今天)的最高呢?

原來要用到Ref這個Function。

這個Function正正是用來把數列移動的。

比如說,Close 就是收市價。那前一天的收市價就是 Ref(Close, -1)

既然,10日的最高價是 HHV(High, 10)。
那前一天的10日最高就是 Ref(HHV(High, 10), -1) 了。

我們再試一次:



有84隻股票選了出來呢!終於成功了!

但84隻太多了,我也不想看這麼多,把參數改一改,改成100:



只剩下33隻了。

好,我先看看這些股票,明天再說。









200天EMA (二)

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