2017年11月28日 星期二

★TOP★ 用 googlefinance 抓港股的基本數據

★post always on top★
自從 yahoo finance 的download api失效後,我的股票投資系統內的港股的基本數據如息率、pe、pb和eps便要手動輸入了。前幾天參考了網上一些高人的程式,做了以下一個googlefinace 試算表:


現時這個試算表的股價,yield,pe,eps和市值已經自動輸入了。可惜pb還沒法自動抓倒,要手動輸入資產淨值(手動)來計算。
(註:yield是用最近股息乘以2或4自動得到的。息率是利息(手動輸入)除以股價。
不知為什麼,0778.hk 置富產業信託的資料自動傳回數據是空的,只好用手動輸入了。

股票                               交易日期     交易類型   股份數 交易價格
0823.HK領展房產   2019年02月19日賣出         -500     $88.15 157.79 -43,917.21
0388.HK香港交易所 2018年11月2日 賣出          -200     $222.60 159.00 -44,361.00
1888.HK建滔積層板 2018年11月2日 賣出        -7000    $6.62 165.00 -46,175.00(平倉 -30,273 -38.68%)
2638.HK 港燈-SS   2018年7月18日   賣出         -5000     $8.18 146.00 -40,754.00
2800.HK 盈富基金 2018年6月19日   買入         1000     $29.90 133.80 30,033.80 (撈底)
0012.HK 恒基地產 2018年6月12日   買入          1000    $45.40 162.53 45562 (真黑仔!又坐艇)
0270.HK 粵海投資 2018年05月18日 賣出         -4000    $13.40 192.00 53408 (平倉 +21,414.01 +12.60%)
0050.HK 香港小輪 2018年5月16日   賣出         -8000      $9.12 282.00 -72,638.00 (又清一隻 +5,502 (+6.20%))
0341.HK 大家樂     2018年5月14日   賣出         -2000    $20.15 144.27 -40,155.73 (止蝕-12,434.27 (-22.96%))
0435.HK 陽光房地產基金 2018年5月11日 賣出 -5000      $5.42 130.62 -26,969.38 (清倉)
 0066.HK 港鐵公司         2018年5月10日 賣出    -500     $45.10 125.00 -22,425.00 (等錢使) 20180809 +1000@40.85

0002.HK 中電控股        2018年05月03日 賣出    -500     $81.50 146.00 -40,604.00 (等錢使) +500@80,7買回
1888.HK 建滔積層板 2018年3月28日 買入 3500 $12.00 180.40 42,180.40 (接了飛刀!)+3500@10.26又中伏!
0388.HK 香港交易所 2018年3月19日 買入 200 $277.00 228.00 55,628.00 (失策!接了飛刀)+200@244.4溝淡
0405.HK 越秀房產信託基金 2018年3月15日 賣出 -10000 $5.42 194.00 -54,006.00 (增持現金)

0778.HK 置富產業信託 2018年2月22日 買入     5000   $9.17     194.00  46,044.00 7月24日賣出5000@$9.6
0011.HK  恒生銀行   2018年2月14日    賣出       -200   $189.60  135.75  -37,784.25
0011.HK 恒生銀行     2018年2月6日      買入        300   $178.10  191.28  53,621.28
0066.HK 港鐵公司     2018年2月2日      買入      1000   $44.40    158.95  44,558.95
0270.HK 粵海投資     2018年1月31日    賣出     -4000   $11.60 
0006.HK 電能實業     2018年1月31日    賣出     -1000   $69.00 (6月29日平倉,-1000@55.1 (+11+16,965.81 +11.69%)
0823.HK 領展房產基金 2018年1月30日 買入      2000   $69.25
0270.HK 粵海投資     2018年1月22日    賣出     -8000   $11.22
0808.HK 泓富產業信託 2018年1月9日   賣出     -7000    $3.42  
20190223 現金 $219639  
截至上月的全面理財總值*為:HKD 1,962,805.90
20181120 現金 $176764 + US$779.93 
截至上月的全面理財總值*為:HKD 1,546,344.44

2017年11月24日 星期五

沾些十倍兄的人氣 - 祝賀十倍兄FB千個讚❤

今日在十倍兄的fb: https://www.facebook.com/TenBaggerHK/  留言:

恭喜十倍兄fb千人讚
相比我的余氏中文輸入法fb https://www.facebook.com/eyuime 只有26個likes 😣
我也有寫「余氏物語 - 退而休則股」網誌: http://edwardyuinvest.blogspot.hk/
請大家互相學習、討論!
(註:我寫了一個股票openoffice/libreoffice的試算表:曾氏通道_(ODS版)_v3_68_finance_google_intraday.ods,若各位有興趣可到以上fb或blog留言,謝謝十倍兄的fb版面

★★★ 
試算表:曾氏通道_(ODS版) 下載連結在余氏中文輸入法fb https://www.facebook.com/eyuime





s❤

2017年11月23日 星期四

20171123 牛市溝淡是否正確?---溝淡粵海投資(0270)@10.42

自從公佈了粵港供水協議後,粵海投資(0270)股價便一路跌。今日跌破了我的系統買入價,而且也跌破曾氏通道95%悲觀價。雖然現在是30000點牛市,忍不住溝淡了粵海投資(0270)@10.42。不知牛市溝淡是否正確?

2017年11月21日 星期二

20171122 今日開市放了唯一的一手盈富@30.35

今日開市放了唯一的一手盈富(2800)@30.35。而師奶則等著又放4手@30.5。

20171121 幫師奶放了4手盈富(2800)@29.95

今日恆指升557點到29818點,但我只有1手盈富,是在$29.3買回來的。我只有幫師奶放了4手盈富(2800)@29.95。看來今年衝上3萬點無難度了!

2017年11月16日 星期四

20171117 溝淡載通(0062)@24.45

近日大家樂和載通都跌破我的系統的買入價。大家樂是52週新低,但它的增長(0.72%)和sharpe ratio(0.34)不妙,而載通的增長(8.83%)和sharpe ratio(0.95)較好。所以我只溝淡載通(0062)@24.45。
p.s. 作為參考,騰訊的增長(17.91%)和sharpe ratio(1.64)
                          盈富的增長(1.98%)和sharpe ratio(0.62)

2017年11月7日 星期二

閱文大細飛都抽唔中,反而最後一包維他奶(0345)都飲(沽)埋@19.24

今日閱文放榜,我老婆和我用大(20手)細(1手)飛都抽唔中,殘念😣
反而最後一包維他奶(0345)都飲(沽)埋@19.24!
好彩其他股票也有不錯的升幅❤

2017年11月2日 星期四

20171103 沽出置富(0778) @9.55

由於需現金,所以沽出5份2置富(0778) @9.55。

置富產業信託
1月高
 28,596
期低水 22
77 (0.27%)
687億
成交
 11,601
3 (0.03%)

現價(港元)
 9.540
升跌
+0.030
成交量
|
1.21百萬
買價(延遲)1
9.540
前收市價/開市
9.510 / 9.510
升跌(%)
+0.315%
成交金額
1.15千萬
賣價(延遲)1
9.550
波幅
9.500 - 9.550

#YahooFinance #關閉另一個API #20171101

yahoo finance 繼關閉歷史股價下載後,從11月起又關閉即時股價下載:
It has come to our attention that this service is being used in violation of the Yahoo Terms of Service. As such, the service is being discontinued. For all future markets and equities data research, please refer to finance.yahoo.com.
http://download.finance.yahoo.com/d/quotes.csv…

看來我的系統又要改了 😣

2017年10月30日 星期一

20171030 反常的決定 - 高位買盈富@29.3!?

今日是恆指結算,又是盈富基金(2800)除淨前最後一日,心血來潮做了一個違反常識的決定,就是高位買盈富@29.3!1手500股試吓,心理上可分享牛市的盈利,又可收到息(0.78),效果就如債基從本金裡派息一樣,自欺欺人 😄

2017年10月28日 星期六

大細飛抽閱文,睇吓運氣點?

我因流動現金不足,所以同老婆用大細飛抽閱文,當用$200蚊買六合彩,睇吓運氣點。
我抽一手200股,約需$11000,手續費100。老婆抽20手,約需$22萬,手續費100。

2017年10月2日 星期一

20171003 首次買入陽光房託(0435) @5.01

今日陽光房託(0435) 陽光房地產基金 1月低
也到了我的系統的下限,首次小注買入(0435) 5000股 @5.01

另祝各位中秋節快樂,請欣賞:
20170923 永和中秋晚會 林俊逸 02 但願人長久
https://sites.google.com/site/eykmime/poem1

2017年9月27日 星期三

20170927 等錢使,又飲維他奶 沽早咗@17.5

 等錢使,昨晚set定維他奶沽@17.5。點知今日維他奶狂升,沽早咗賺少千幾銀 😣!



維他奶國際
52週高
收市價(港元)
 
 18.080
升跌
 
+0.660
成交量
|

 2.57百萬
買價(延遲)1
 
18.080
前收市價/開市
 
17.420 / 17.480
升跌(%)
 
+3.789%
成交金額
 
4.63千萬
賣價(延遲)1
 
18.140
波幅
 
17.480 - 18.180

2017年9月13日 星期三

20170913 首次買入載通(0062)@24.9

今日首次買入載通(0062)@24.9    買入價原因是系統到了下限

RSI 1026.7180超賣
收市價(港元24.950 3月低

2017年9月10日 星期日

2017年9月8日 星期五

20170908 維他奶(0345)真好「飲」- 沽出@17.3

今日維他奶(0345)除淨,想不到即日便可填息,維他奶真好「飲」- 沽出小量@17.3。
維他奶是我組合裡較賺錢的股票,估不到我由細飲到大,到退休還好「飲」!

2017年8月1日 星期二

20170801 又係盈富 - 沽清@28.1

今日盈富基金(2800) 52週高 波幅 27.95 - 28.25
因已到系統賣出價位,所以沽清了退而休則股組合內的盈富@28.1。

不經不覺買賣盈富基金已3年。自2014年9月高位買入,經歷了2015大時代,2016小時代,溝淡至2017年初的10000股@約$23.7。之後從$24逐步減持,今日終於沽清!
埋單計數:投入                    收益

485,232.80         +20,279.78   (+4.18%)



成績認真麻麻!

同期我太太的穩陣師奶組合內的盈富因少買賣,表現良好:
                     278,964.00         +58,617.00    (+21.01%)


2017年7月18日 星期二

20170718 盈富基金的威力

自從用了www.ticker.com.hk來計算股票組合的回報之後,發覺我的「退而休則股」組合回報
資金加權平均收益率
 (2017 年 (YTD) +15.93% 比我太太的「穩陣師奶」組合 (+21.80%) 大幅落後。原因可能是我半年來放了大部份盈富而換入了香港小輪(0050),維他奶(0345),置富(0778) 和粵海投資(0270)。

現時我的「退而休則股」組合總回報(5.88%)。我嘗試模擬如果我唔放盈富,效果是:(8.05%)

最後我用程式回測(backtest)了以下的情景:假設在2012年9月6日用20萬買入10000股盈富@$19.7。若持有(buy & hold) 5年到今日(2017-07-18),年化回報率(CAGR)是5%,收益是53%,大約現值30萬6千(包括股息)。若用低買高賣策略(5年來買7次賣5次,CAGR只不過是加了少少到5.6%,收益60%,現值32萬,辛苦吧!

2017年7月13日 星期四

20170713 代太太減持小量盈富(2800.hk) @27.00

今天盈富基金(2800.hk) 52週高
原本昨晚收市是$26.7。我太太告訴我代她放小量盈富@$26.85。誰知今早開市恆指大升300多點,竟然成交價是$27.00!有小小驚喜!

我的組合內的盈富因要增加現金比例,自從恆指25000點時已在$24.85、$25.2、$26.1放了大部份了。但我太太因沒有心理負擔,不會時常買賣,反而回報比我高很多!

2017年7月10日 星期一

20170710 沽清匯豐碎股,和增持粵海投資(0270.hk) @10.3

今天決定沽清匯豐碎股,原來碎股只能用即市價賣走,而賣價@73.5比市價74.15低10多個價位。今天匯豐收報74.6,52週高,雖然賣得比較低,但因為碎股相差幾十元而已,無所謂啦!5年埋單蝕-19,060.64 (-20.36%) 

另外不知為什麼粵海投資(0270.hk)又跌破系統低價,所以增持了@10.3。這個買入決定不知對定錯,因為現在是牛市,應該增加現金比例才是。

2017年7月6日 星期四

20170706 增持維他奶(0345.hk) @15.54

今天維他奶(0345.hk)不知為什麼股價下跌到了我的買入價
維他奶國際1月低,所以根據系統增持了@15.54。維他奶一直以來是我的組合裡賺錢的股份,雖然它的息率(2.26%)很低,但是它的增長很高,roe又高,可用來平衡組合裡的高息公用股和reit。

2017年7月1日 星期六

20170701 Kelly Criterion 在股票的應用

一直以來有留意Kelly Criterion 在股票的應用。在看過池兄的blog文後http://poolshunter.blogspot.hk/2017/06/kelly-criterion.html ,便在網上找尋"simultaneous kelly for stock portfolio",找到一些更豐富的內容,現在綜合一下,請各位指教。

1. How to apply Kelly criterion to a portfolio made by a stock plus a option?
https://quant.stackexchange.com/questions/26324/how-to-apply-kelly-criterion-to-a-portfolio-made-by-a-stock-plus-a-option

I know that by a portfolio made by only by one stock (and a risk free bond) I can use the formula:

f* = (R-Rf)/d^2

f* - Wealth fraction that maximize the log return
R - Asset Return
Rf - Risk-free return d - Standard Deviation

Answer:
======
Kelly is mostly based upon assets with zero correlation made independent of each other.
The way I approximate Kelly for multiple bets with correlation is:

Assume after your first bet the capital is gone.
Place a second bet based upon the Kelly of the remaining capital.
Factor in correlation..
Part 3 is the challenging part. I assume that with multiple bets at zero correlation placed simultaneously that I would bet the full Kelly per bet made. I assume that with multiple bets at a correlation of 1, I would divide the Kelly by the number of bets. So if for example I were to make 5 bets with a Kelly of 20%...
a correlation of 1 would be 20% divided by 5 or 4% per bet. A correlation of zero would be 1-(0.80^5)
to determine total capital at risk and then divide by 5 which is ~13.45% per bet.
A correlation of 50% is the average of the two or ~8.7% Anything else is a weighted average
but you have to be careful not to get the weightings backwards.
For example a correlation of 20% you take 80% of the Kelly amount 13.45 and 20% of 4% and sum them together.

小記:看不懂Part 3

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

2.

Quantitative Trading: Kelly vs. Markowitz Portfolio Optimization

In my book, I described a very simple and elegant formula for determining the optimal asset allocation among N assets:

F=C-1*M   (1)

where F is a Nx1 vector indicating the fraction of the equity to be allocated to each asset, C is the covariance matrix, and M is the mean vector for the excess returns of these assets. Note that these "assets" can in fact be "trading strategies" or "portfolios" themselves. If these are in fact real assets that incur a carry (financing) cost, then excess returns are returns minus the risk-free rate.
小記:這就是終極版的「發達公式」,非我等凡人可用+-*/或excel計算出來的!
------------------------------------ 
3. Simple closed form solution for unconstrained Simultaneous bet Kelly staking
So given, for example, events A, B, C, D, and E, with corresponding single-bet Kelly stakes of κA, κB, κC, κD, and κE,
then the Kelly stake for the 1-team parlay consisting of only bet A would be:
κA * (1-κB) * (1-κC) * (1-κD) * (1-κE)
While the Kelly stake for the 3-team parlay consisting of bets A, B, and C would be:
κA * κB * κC * (1-κD) * (1-κE)
Much simpler, no?
小記:這個可用!已改了我的組合程式上試試!

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

4. Algorithms for optimal allocation of bets on many simultaneous events
Chris Whitrow 

Conclusions
When the number of bets is small, the optimal sizes of bet seem to be almost exactly proportional to the Kelly stakes on individual bets. 

小記:這個最簡單!已改了我的組合程式上試試! 

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

(註:我的組合程式上的個別kelly是用以下的公式的:

Sharpe ratio S = (R-Rf)/d,
f = (R-Rf)/d^2 = S/d

據說the maximum compounded growth rate g is given by g=r+S^2/2. 
We usually drop the risk-free rate, so we have g=S^2/2.

現時盈富(2800.hk)的sharpe ratio大約是0.57


2017年6月30日 星期五

20170630 匯豐放剩碎股@$74

一直以來想清倉匯豐,因為四年以來平均買入價$77,在2016年7月尾因忍不住放了@$50.9,蝕了2萬幾元,十分心痛!今天終於放剩碎股@$74。埋單蝕了(-20.71%)

2017年6月6日 星期二

20170606 替太太平倉希慎(0014) @37.5

自從4年半前(2013年1月)替太太買入希慎(0014)後,今晚終於可以平倉了(@37.5)。
不計收息的話,希慎只賺了+957.50 (+1.30%) 賣出原因不是等錢用,而是我太太覺得賬面見紅礙眼!

2017年5月31日 星期三

20170531 又放盈富@26.1

雖然恆指還未到28000,但因現金水平太低,所以又放盈富@26.1。退休人士還是安全些好!

2017年5月22日 星期一

Google's Undocumented Finance API

這幾天來因yahoo finance的歷史股價下載api中斷,我便決心轉用google finance。
原本很簡單的,google finance的網頁有過往股價的顯示和下載如:
https://www.google.com.hk/finance/historical?q=HKG:2800&startdate=2012-01-01&enddate=2017-12-31&num=200&output=csv
但... :( 竟然得到以下對待!:-
404. That’s an error.
The requested URL was not found on this server. That’s all we know.
原來非美國股票只能顯示(&output=),不能下載(&output=csv)。

我參考了 http://www.networkerror.org/component/content/article/1-technical-wootness/44-googles-undocumented-finance-api.html
動手做了以下的 ods oobasic 代碼 (excel vba 請斟酌改動):

-------------------------------------------------------
'20170520 - try google instead of yahoo
'    cURL = "http://ichart.finance.yahoo.com/table.csv?s=" & cSymbols & "&a=" & cStartMonth & "&b=" & cStartDay & "&c=" & cStartYear & "&d=" & cEndMonth & "&e=" & cEndDay & "&f=" & cEndYear & "&g=" & cGranularity & "&ignore=.csv"
     cURL = "https://www.google.com/finance/getprices?q=" & LEFT(cSymbols,4) & "&x=HKG&i=86400&p=5Y&f=d,c,h,l,o,v"

   ' Open up a new spreadsheet from the above URL.
   ' Specify the CSV filter with options that decode the CSV format comming back from Yahoo.
   ' Specify the Hidden property so that the spreadsheet does not appear on the screen.
      oCalcDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0,_
      Array( MakePropertyValue( "FilterName", "Text - txt - csv (StarCalc)" ),_
            MakePropertyValue( "FilterOptions", "44,34,SYSTEM,1,1/10/2/10/3/10/4/10/5/10/6/10/7/10/8/10/9/10" ),_
            MakePropertyValue( "Hidden", True ) ) )
            ' 20170520 - change True to False for debug
 
Do Until oCalcDoc.IsLoaded
  wait(100)
Loop

   ' Get the first sheet of the Calc document.
    oSheet = oCalcDoc.getSheets().getByIndex( 0 )
    oCell = oSheet.getCellRangeByName("K1")
    oCell.setString("")
    oCell.setFormula("=COUNTA(A2:A3737)")
    iCount = oCell.getValue()

' 20170522 - convert unix timestamp to date in Google finance history OSheet
'            also swap Open / close price
Dim iRow
Dim tempCell
Dim tempint as double
Dim iUnixTime
for iRow = 9 to iCount + 1
    oCell = oSheet.getCellRangeByName("B" & CSTR(iRow))
    tempCell = oCell.getValue()                                       ' tempCell = B[i]
    oCell.setValue(oSheet.getCellRangeByName("E" & CSTR(iRow)).getValue())  ' B[i] CLOSE = E[i] OPEN
    oSheet.getCellRangeByName("E" & CSTR(iRow)).setValue(tempCell)          ' E[i] = tempCell
    oSheet.getCellRangeByName("G" & CSTR(iRow)).setValue(tempCell)          ' G[i] = tempCell adjclose = close
 
 ' convert unix timestamp in google finance getprices to date
'  =IF(LEFT(A9,1)="a", INT(VALUE(RIGHT(A9,10))/86400) + DATE(1970,1,1), IF(LEFT(A8,1)="a", G8+A9, G8+A9-A8))
 
    oCell = oSheet.getCellRangeByName("A" & CSTR(iRow))
    if LEFT(oCell.getString(),1) = "a" then
       tempint = RIGHT(oCell.getString(),10)
       iUnixTime = INT(tempint/86400) + DATEVALUE("1970-01-01")
       oCell.setValue(iUnixTime)
    else
       oCell.setValue(iUnixTime + oCell.getValue())
    endif
next

' v1_14 - use cellrange copy
' OldPosition =  "A2:G" & CSTR(1+iCount) ' "A2:G90"
' 20170522 - for google finance, copy A9:
 OldPosition =  "A9:G" & CSTR(1+iCount) ' "A9:G90"

  oSource = oSheet.getCellRangeByName(OldPosition)    

               ' NewPosition =  "I" & CSTR(1+iRow) & ":J" & CSTR(1+iRow) ' "I18:J18"
               ' print "1+iRow=", 1+iRow, " NewPosition=", NewPosition
               ' oTargetSheet = ThisComponent.Sheets.getByName("stockprice")
               
               'oTarget = oTargetSheet.getCellRangeByName(NewPosition)
 '              NewPosition =  "A37:G" & CSTR(36+iCount) ' "A37:G90"
 ' 20170522 - for google finance, end row - 7
                iCount = iCount - 7
             
                NewPosition =  "A37:G" & CSTR(36+iCount) ' "A37:G90"              
               oTarget = oChartSheet.getCellRangeByName(NewPosition)
           oTarget.DataArray = oSource.DataArray

   ' Be sure to close the spreadsheet, because it is hidden, and the user cannot close it.
   ' 20170520 - do not close for debug
    oCalcDoc.close( True )
 ThisComponent.calculateAll()

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