Total Pageviews

2015/03/04

基金挑選法則

The intelligent investor此本書有提到幾個挑選基金的概念

  • 根據研究證明,基金收取的費用越高,其未來的收益會越低。High returns只會是暫時的,但是high expenses卻是固定的
  • 在挑選基金的時候,記得把fund expenses當作第一優先的過濾條件。未來的收益無法預測,但是fund expenses則是唯一可以預測的,故若兩個表現差不多的基金,挑選fund expenses較低的那檔基金 
  • 不要只單看過去的績效來預測未來的績效,過去的贏家常常是未來的輸家,但是過去的輸家未必會是未來的贏家。所以,挑選基金時,避免挑選績效一直表現不好,且fund expenses高於平均的基金

基金的費用可以到晨星網站查詢。舉個例子來說,假設這是一份基金的排名,且我對安本環球 - 世界股票基金A2天達環球策略基金 - 環球策略股票基金 A 累積股份這兩檔基金有興趣

我們可以點選進去這兩檔基金的費用,檢視其費用的差異,圖中總開支比率就是這檔基金一整年會收取的費用,包含 與基金管理及運作相關的支出相對基金資產總值的總開支比例,一般計入管理費及其他所有開支包括交易費、法例相關費用及其他運作及行政費用。



按照Graham的挑選基金的原則,就會挑選安本環球 - 世界股票基金A2此檔基金,因為其fund expenses較低

Reference
[1] http://www.amazon.com/The-Intelligent-Investor-Definitive-Investing/dp/0060555661
[2] http://tw.morningstar.com/ap/main/default.aspx

How to read characters in a string in java

Requirement
If I have a String "(預)     16,276.22"
I would like to parse this String and get "(預)     " and "16,276.22" separately.

How to do
Here is the sample code:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
String str2 = "(預)     16,276.22";
String numericString = "";
String nonNumericString = "";

char[] str2Array = str2.toCharArray();
for (char c : str2Array) {
    // print each character
    System.out.println("character = " + c);
    if (StringUtils.isNumeric("" + c) || ",".equals("" + c) || ".".equals("" + c)) {
        numericString += "" + c;
    } else {
        nonNumericString += "" + c;
    }
}
// print numberic part
System.out.println("numericString = " + numericString);
// print non-numeric part
System.out.println("nonNumericString = " + nonNumericString);

debug message:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
character = (
character = 
character = )
character =  
character =  
character =  
character =  
character =  
character = 1
character = 6
character = ,
character = 2
character = 7
character = 6
character = .
character = 2
character = 2
numericString = 16,276.22
nonNumericString = ()     



How to convert a char to a string in Java

Problem
I have a char and I need a String.
1
2
char c = 'a';
String s = c;

But eclipse complain it has compile error : Type mismatch: cannot convert from char to String

Solution
String concatenation can fix this type mismatch error:

1
2
char c = 'a';
String s = "" + c;


Reference
[1] http://stackoverflow.com/questions/8172420/how-to-convert-a-char-to-a-string-in-java

2015/03/01

[閱讀筆記] 最困難的事別交給最有能力的人 - Part 1


  1. 達成共同的目標就像膠水,可以迅速把團隊成員凝聚在一起。
  2. 一團和氣,一敗塗地。
  3. 一般人討厭被管,但喜歡有人帶。
  4. 只有管理沒有領導,只能激發出稱職的表現,主管雖然可以掌控團隊,團隊還是沒有全力以赴的動力。
  5. 加上領導,就能激勵員工加倍努力,表現也會更上一層樓。因為替卓越的領袖工作,員工會受到適當的鼓勵、支持與信任,也因此願意貢獻所長,覺得未來充滿希望,也能自由發揮。
  6. 計畫人人都會訂,重點是如何去執行。
  7. 如果需要無法掌握的人的合作才能完成,就不要設deadline,而是設定績效目標和策略目標。
  8. 明確地說『不』能讓你的團隊更獨立,也更有生產力。拒絕也許是最好的回應,你說『不』的次數夠多嗎?
  9. 老子曾說:『人待我以不智,仍應明智以對。』
  10. 讓員工自己訂目標,更容易成功
  11. 要確保團隊成員都能清楚看到目標,主管必須採取更明確的行動,一定要讓員工知道什麼人、什麼時候需要達到什麼目標、標準為何,以及可能要付出什麼代價。
  12. 一個人能達成目標,很大的原因是因為目標一開始是他們設定的,而且他們會不時審視目標、想像自己時間目標的模樣。所以,你要協助員工定下自己的目標,這麼做可以引導行動,幫助他們更容易實現目標。
  13. 主管要經常談論目標,描繪出令人難忘的成功畫面,以確保大家沒有隨著日常工作的忙碌而淡忘。團隊成員都必須了解自己在整體目標裡扮演什麼角色,明白自己的貢獻加上團隊其他成員的貢獻,如何一起促成團隊的功能。
  14. 如果不知道自己要去哪裡,最後很可能走到別的地方。
  15. 根據研究顯示,女性同時處理七件工作時,會達到臨界點,男人則是五件。
  16. 如果讓員工專注於少量的工作或目標,他們就能很有效率。不過,數量如果太少,有些人會覺得工作內容重複、枯燥,熱情就會漸漸消失,生產力也會隨之下降;如果太多,就會開始出錯,球就會掉到地上。
  17. 替團隊成員設定目標和任務時,要避免列出一堆包羅萬象的責任,相反的,你要替團隊成員寫下明確的目標,最多不能超過七個,實際數量是五個,三個以內又更好。這樣你更可以看到符合期望的結果。
  18. 只有聰明絕頂的人,才能同時抱持兩種相互矛盾的想法而無礙思考。
  19. 一艘船不能有兩位船長。如果一名員工得聽兩個老闆下指令,三個人都會變得很沒效率。
  20. 所有主管都有不受歡迎的時候,主管的工作就是這樣。不過,雖然你不能遠永受員工喜愛,你還是可以永遠受尊重,這是遠比受歡迎更為重要的事。
  21. 想避免批評,就什麼都不要做、什麼都不要說、當個沒價值的人。
  22. 把遠慮轉化為先見之明和周詳的規劃。
  23. 讚美別人的行為,等於鼓勵更多好的行為,也滿足人想好好做事、得到更多讚美的心願。
  24. 稱讚任何好表現,等於掌握了讓人奮力而為的力量,也能強化這些力量,使其超越我們所認知的範圍。
  25. 找出團隊中吃苦耐勞的員工,仔細觀察他有沒有疲憊的跡象,你要幫他控制步調。這種人不會承認自己負荷不了,這是他們的特質。但無論對方如何抗拒,你都要在必要時讓他們休息充電、恢復精力。
  26. 吃苦耐勞的馬,身上總是套上最多馬鞍。
  27. 今天的問題往往是昨天工作品質不佳的後果,要想辦法避免相同的問題再次發生。
  28. 團隊中如有喜歡引人注意的人,過沒多久,團隊其他成員會覺得自己沒有得到足夠的關注。更糟的是,你發現大家都不再把心思放在目標上,而是爭奪注意力。
  29. 需要大量關注的人,不會改變一生的習慣。你可以交付他更多的工作,讓他沒有時間鬧事。如果這個方法還不奏效,只能請他離開。
  30. 行動助長信心,讓信心更堅定;任何形式的不行動都會助長恐懼。想打擊恐懼,就要行動;想讓恐懼增加,就等待、拖延、待會再做。
  31. 一個人為了逃避思考,一定會想盡各種辦法。
  32. 釋放天生的生產力,我們需要
    • 知道目標是什麼,也看得到成功的模樣、明白成功的感覺
    • 相信自己正朝著目標前進
    • 專注於實現目標,拋開對實現目標沒有幫助或幫助不大的事務
  33. 想提高生產力,就要確定員工知道目標、了解目標,並在達成目標時,鼓勵他們享受成功的滋味。過去的事就不要追究,鼓勵員工再剩下的時間從事有生產力的工作,不要在乎過去浪費了多少時間,明智的投資時間,從現在開始。
  34. 不要忘記獎勵有生產力,每天都有工作進展的員工,很多主管都忽略了這點,只注意到要獎勵重大醒目的成就。平日的生產力同樣值得表揚,因為生產力一定會帶來成就。
  35. 生產力是與生俱來的特質,不是後天學得的技能。
  36. 在職場上,緊急和重要往往南轅北轍,不斷爭奪你的注意力,把你往相反的方向拉。
  37. 急著想幫助同事的心態是『緊急』對上『重要』的陷阱之一。到頭來員工可能發現自己一直在做別人的事,自己的工作卻進展有限。
  38. 有些事你就是做不完。時間永遠不夠,本來就不可能做完所有的事,因此你要一重要性安排工作,才能優先處理最重要的事物。
  39. 緊急的事情,不等於重要的事情
  40. 最重要的事絕不能任憑最不重要的事擺佈。
  41. 一項比較困難的工作,並不代表他在完成後一定能創造出更大的成果、更多的利潤、或更大的成就。根據經驗顯示,結果通常剛好相反,那些難搞的工作往往在時間和精神的投資報酬率表現最差。
  42. 讓最優秀的人才專注在能夠帶來最大報酬的任務上,就可以成就更多,而團隊整體成果也可能會一飛沖天。想要創造出最佳的成果,就要讓最好的人才去執行機會最大的任務。
  43. 為了要向北走,有時候可能必須先往南走一段路。
  44. 在工作上,推理能力除了用來作決策,也包括隨後所採取的行動。
  45. 比較不聰明卻又野心勃勃、充滿自信的人,往往會在擁有決策權時造成危害。
  46. 每當有困難的工作必須完成的時候,我就會把它交給一個懶人;他還真能找到簡單的方法完成它。
  47. 你要灌輸員工一個道德觀念,即使他們需要告訴你的是個壞消息,你也期望得到坦率、誠實而真誠的回答。
  48. 一旦團隊學會安排工作的先後順序,你就可以放心讓他們在不求助你的狀況下做出更多的決定,這樣一來,團位的整體生產力還能變得更好。
  49. 你必須狠心地對瑣事視而不見,才有時間解決最重一的問題,同時,你也應該盡可能把工作分配出去。你該做的是讓你的團隊在最少的督導範圍內,做出他們自己該做的決定。因為如果你不讓他們為己的工作成果負責時,他們就會開始忙著做其他的事。
  50. 當一個人被剝奪做出重要決策的機會,它就會開始把所有能做的決定,都當成是重要決策。他會開始挑剔歸檔的方式,強烈希望每支鉛筆都被削的很尖,渴望確定窗戶事打開(或關上)的,並且傾向使用兩到三種不同顏色的筆。

2015/02/28

2015/02 Travel

故宮

嘉義市立棒球場

大林車站一隅

Figure out how to start investing.

What it means to buy a company's stock



Bonds vs Stocks

2015/02/13

How to hide column in ng-grid AngularJS

If we are using ng-grid to display data as bellows:

And want to hide issueSeqNo column as bellows:

All you need to do is add visible:false in  issueSeqNo column as bellows:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  $scope.itemGrid = {
      data : 'itemData',
      selectedItems: $scope.selectedRow,
      columnDefs : [
          { field : 'issueSeqNo', 
            displayName : 'issueSeqNo', 
            width: 120, 
            cellClass: 'text-left', 
            visible:false},
          { field : 'issueSerial', 
            displayName : '公債代號', 
            width: 150, 
            cellClass: 'text-left'}, 
          { field : 'issueDate',   
            displayName : '發行日期', 
            width: 150, 
            cellClass: 'text-left'}, 
          { field : 'debtName',    
            displayName : '公債名稱', 
            width: 600, 
            cellClass: 'text-left'}],
      enableColumnResize :true,
      i18n:'zh-tw',
      multiSelect : false,
      showFooter: true,
      afterSelectionChange: function () {
          if(!angular.isUndefined($scope.selectedRow[0])){
              alert($scope.selectedRow[0].issueSeqNo);
          }
       }
  };


Reference

How to get selected row's value from ng-grid AngularJS in click event

If we are using ng-grid to display data as bellows:


As user click specific row, it should get this row's issueSeqNo and show alert message



 We have a ng-grid like below:
1
2
3
4
5
6
7
 <div class="row text-center">
  <div class="col-sm-12">
    <div class="grid-style" data-ng-grid="itemGrid"
         style="display: inline-block; height: 300px; width: 80%;">
    </div>
  </div>
 /div>

 and our javascript would be
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
   $scope.itemGrid = {
     data : 'itemData',
     selectedItems: $scope.selectedRow,
     columnDefs : [
         { field : 'issueSeqNo', displayName : 'issueSeqNo', width: 120, cellClass: 'text-left'},
         { field : 'issueSerial', displayName : '公債代號', width: 150, cellClass: 'text-left'}, 
         { field : 'issueDate',   displayName : '發行日期', width: 150, cellClass: 'text-left'}, 
         { field : 'debtName',    displayName : '公債名稱', width: 600, cellClass: 'text-left'}],
     enableColumnResize :true,
     i18n:'zh-tw',
     multiSelect : false,
     showFooter: true
 };


If we would like to get selected row's value from ng-grid, just add afterSelectionChange event as bellow:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
  $scope.itemGrid = {
     data : 'itemData',
     selectedItems: $scope.selectedRow,
     columnDefs : [
         { field : 'issueSeqNo', displayName : 'issueSeqNo', width: 120, cellClass: 'text-left'},
         { field : 'issueSerial', displayName : '公債代號', width: 150, cellClass: 'text-left'}, 
         { field : 'issueDate',   displayName : '發行日期', width: 150, cellClass: 'text-left'}, 
         { field : 'debtName',    displayName : '公債名稱', width: 600, cellClass: 'text-left'}],
     enableColumnResize :true,
     i18n:'zh-tw',
     multiSelect : false,
     showFooter: true,
     afterSelectionChange: function () {
         if(!angular.isUndefined($scope.selectedRow[0])){
             alert($scope.selectedRow[0].issueSeqNo);
         }
      }
 };



Reference
[1] http://stackoverflow.com/questions/16911156/how-to-get-the-cell-value-from-ng-grid

2015/02/03

透過信用評等來判斷債券基金的風險

當我們在判斷要購買哪檔債券的時候,第一個會想到風險,風險的大小則是要看該筆債券的投資組合中,各個信用評等的比例

信用評等的目的是顯示受評對象信貸違約風險的大小,一般由某些專門信用評估機構進行。 評估機構針對受評對象金融狀況和有關歷史的數據進行調查、分析,從而對受評對象的金融信用狀況給出一個總體的評價,以下是各個等級:

由下圖可以得知

  • 信用評等越差,違約率越高(但是利差越大)
  • 信用評等越好,違約率越低(但是利差較小)


以「富蘭克林坦伯頓全球投資系列-全球債券總報酬基金美元A(acc)股」這檔債券來說,可以從晨星網站中的投資組合一窺端倪

信用評等又有分屬於投資等級或是非投資等級


由於投資組合中,有一定的比率屬於非投資等級的債券,故有加上此警語「本基金有相當比重投資於非投資等級之高風險債券」


當大部分的投資組合都是信用等級較佳的投資標的,利差可能就會較小,若是信用等級較差的投資標的比較多的話,就有可能賺到比較多的利差。

第一次領薪水就該懂的理財方法書中說的,選擇債券型基金,一定要根據自己期望的投資報酬率與可以忍受的風險,找出最適合自己的投資標的,沒有所謂的對錯,就看你晚上好不好睡。


Reference
[1] http://zh.wikipedia.org/wiki/%E4%BF%A1%E7%94%A8%E8%AF%84%E7%BA%A7
[2] http://tw.morningstar.com/ap/quicktake/portfolio.aspx?PerformanceId=0P00000HPA&activetab=Portfolio
[3] http://www.masterhsiao.com.tw/CatBonds/CreditRating/CreditRating.htm
[4] http://www.books.com.tw/products/0010493110




2015/02/02

Generating entities from tables in Eclipse


Using this following procedure to generate Java persistent entities from database tables. 

1.  File => New => JPA Project => Click Next

2. Assign Project Name => Click Next


3. Click Next


4. Assign Platform and configure database connection => Click Finish


5. The sample JPA project, JPA_Project, had been created


6. Click src => Right Click => New => JPA Entities from Tables


7. Checked the tables which you would like to generate entities => Click Next


8. Click Next


9. Assign package name where your entities would like to place => Click Next


10. Click Finish


11. Check Result


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package gov.nta.entity.fms;

import java.io.Serializable;
import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;

/**
 * The persistent class for the FMS406FF database table.
 * 
 */
@Entity
@NamedQuery(name = "Fms406ff.findAll", query = "SELECT f FROM Fms406ff f")
public class Fms406ff implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "YYY_MM")
    private String yyyMm;

    @Column(name = "REMARKS1")
    private String remarks1;

    @Column(name = "REMARKS2")
    private String remarks2;

    @Column(name = "REMARKS3")
    private String remarks3;

    @Column(name = "UPDATE_DATE")
    private Timestamp updateDate;

    @Column(name = "USER_ID")
    private String userId;

    public Fms406ff() {
    }

    public String getYyyMm() {
        return this.yyyMm;
    }

    public void setYyyMm(String yyyMm) {
        this.yyyMm = yyyMm;
    }

    public String getRemarks1() {
        return this.remarks1;
    }

    public void setRemarks1(String remarks1) {
        this.remarks1 = remarks1;
    }

    public String getRemarks2() {
        return this.remarks2;
    }

    public void setRemarks2(String remarks2) {
        this.remarks2 = remarks2;
    }

    public String getRemarks3() {
        return this.remarks3;
    }

    public void setRemarks3(String remarks3) {
        this.remarks3 = remarks3;
    }

    public Timestamp getUpdateDate() {
        return this.updateDate;
    }

    public void setUpdateDate(Timestamp updateDate) {
        this.updateDate = updateDate;
    }

    public String getUserId() {
        return this.userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

}

2015/02/01

[閱讀筆記] 華爾街刺蝟投資客之投資啟示錄


  1. 一檔好股票是你所能想像的最棒的財富製造機,但是,股市要求你具備勇氣與耐心
  2. 牛市時,誰需要分析師?熊市時,誰需要股票?
  3. 回歸平均值,才是最強大的趨勢;偏差,最終必然會得到修正
  4. 看待投資的正確方法是,看你扣除包括稅負在內所有成本後的報酬率,但是大部分人都不這樣看
  5. 所羅斯曾說: 人類社會財富創造和財富摧毀的週期總是交替循環。財富創造的循環大約延續兩代,也就是延續六十年,隨後無可避免的是三十年的財富摧毀循環期間
  6. 不要以為你的分析模型永遠有用
  7. 絕對不要融資做投資
  8. 複雜系統失敗的原因就是本身的複雜性,失敗的鐵則顯示,大部分事物最後都會失敗。複雜的系統在看來無足輕重的獨立事件發生時會失敗,並透過滾雪球效應,造成慘劇
  9. 測驗一個人是否有一流智慧,就看有沒有能力同時在心理堅持兩種嚴重背離的觀念,卻仍然保持行動能力
  10. 凱因斯曾說:對於完全沒有賭性的人來說,專業投資遊戲極為枯燥、極為可怕;有賭性的人卻必須為自己的天賦,付出代價
  11. 融資源自於人性的貪婪,當失敗時,就會放大其財務損失
  12. Samuel Coleridge曾說: 如果人們能以史為鑑,那我們將得到多少的教訓 ! 但是激情和黨派之見蒙蔽了我們的雙眼;經驗啟示的智慧猶如船尾燈,照亮的,只有身後的波浪