Total Pageviews

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曾說: 如果人們能以史為鑑,那我們將得到多少的教訓 ! 但是激情和黨派之見蒙蔽了我們的雙眼;經驗啟示的智慧猶如船尾燈,照亮的,只有身後的波浪


2015/01/31

2015/01 Travel

十分

十分瀑布


十分靜安吊橋

十分老街

台北孔廟

2015/01/23

How to Pixelate an Image in PicPick

Pixelation effect essentially lowers the definition of images, while increasing the size of the individual pixels, or dots, that make up images.  

If you need to pixelate your image, you can try PicPick and it's free.

Step1. Open the existing file in PicPick

Step2. Click Choose

Step3. Choose the area you would like to do pixelate

Step4. Click on the "Effects" button and then select the "Pixelate"option from the drop-down menu that appears. 



Step5. In the "Pixelate" menu, drag the "Pixelate" slider to the right to add and increase the amount of pixelation applied to your image. Then click OK.
Check the result:


















Reference
[1] http://www.picpick.org/en/features
[2] http://www.ehow.com/how_7307828_pixelate-image-using-photoshop.html

2015/01/16

如何看懂財務報表

如果說一張照片勝過千言萬語,對企業來說,數字也有相同功效。

以下的資產負債表中的資產部的份可以看到,結至2014 Q3為止,東鋼這家公司,手上現金約有11.78億,其他的資產包含應收帳款、廠房及設備、投資等等,目前手上資產共有377.5億


以下是東鋼這家公司負債的狀況,這個部分是公司的負債,包含應付帳款(如供應商的貸款、電話費, etc.)等等,結至2014 Q3為止,負債總額共151億






股東權益的部分,就是總負債、投入資本和保留盈餘的總和。
  • 保留盈餘(即下圖太過簡化,可以參考此 link 中67.61億的地方:http://goodinfo.tw/stockinfo/StockFinDetail.asp?RPT_CAT=BS_M_QUAR&STOCK_ID=2006),意思是公司把這筆錢留在公司,以便有額外的錢可以投資、做研發,讓公司成長。
  • 股東權益總額 = 資產 - 負債,即377.5 - 151 = 226.5  (億)
  • 每股淨值 = 股東權益總額 / 普通股股本 = 226.5 / 99.82 = 22.69 (尾數有差異,目前我不知道為什麼)


以下的損益表可以告訴我們,這家企業賺了多少錢、錢花到哪裡去,這家公司本益比是多少
  • 營業毛利 = 收入減去成本 = 85.02 - 79.14 = 5.88 (億)
  • 營業過程還會產生一些管理費用,所以營業利益 = 營業毛利減去營業費用 = 5.88 - 4.19 = 1.69  (億)
  • 每家公司都會有其業外的投資,例如2014Q3的業外收入有3.9,故其稅前淨利 = 營業利益 + 業外損益 = 1.69 + 2.23 - 0.58 = 3.34  (億)
  • 企業每年都要繳稅金給政府,故減去稅金以後,可以得到稅後盈餘 2.87  (億)
  • 本益比 = 股價除以每股稅後盈餘



現金流量表協助你追蹤前錢一個地方移往另外一個地方
  • 營業活動現金為正數,代表有賺錢,金額越多代表財力越好,不需要借錢周轉,財務較為穩健
  • 投資活動現金,是針對公司因生製及售賣貨物而購買的固定資產,以及變賣任何公司不再需要的固定資產,如變賣祖產是流入、購買廠房是流出。若是營業活動現金是負的,但是投資活動現金是正的,代表目前賺的錢不是本業在賺錢,是本業外收入,這時就要注意這家公司的狀況
  • 理財活動現金流量,包括從投資者如銀行及股東投入的現金,以及當企業把收入回饋投資者的現金流出。
    • 向銀行借錢,公司就產生正的現金流量;
    • 如果公司實施庫藏股,由於現金流出到外部股東的手中,現金流量就是負數
    • 發放現金股利,使得公司現金流出,現金流量表是負數
    • 現金增資,是向股東要錢流入公司
  • 應現金流量 = 營業 + 投資 + 理財
  • 期末現金流量是指該季結束時能夠收回的現金流量,算法是 期初現金流量 + 淨現金流量 = 3609.82 + (-2431.97)
  • 自由現金流量(Free cash flow, FCF),是可自由運用的現金流,是從營運來的現金流量扣減維持現有營運所需的資本支出和稅金後之餘額。企業可以用這些現金為公司的成長擴充,也可以作為發放股東股利,清償負債或是預留下來備度過景氣蕭條期。總之,自由現金流量是公司在不影響營運下可以自由使用的現金餘額,也是衡量公司財務彈性的指標


Reference

2015/01/08

[基金] 已撤銷核備是什麼意思?

今天登入到網路銀行的時候,發現之前買的基金突然被備註為" 已撤銷核備 "

基金下方說明,「已撤銷核備」為在台灣已下架(停售)的基金,往後不能單筆申購此筆基金,若是之前有設定定期定額的話,則可以繼續購買扣款,但是不能再往上調高金額。















看了網路上的一些說法,一檔基金下架(停售)有可能幾個原因
  1. 投資大陸的比重過重 (據說大部分是這個原因)
  2. 國內投資人比重超過九成,變成所謂國內基金
  3. 基金公司為了維持最適的操作規模,自行宣布停售

但是看了環球發現的公開說明書,在中國大陸的比重是0,所以第一點不成立



















國內投資人比重2.79%,所以第二點也不成立
















終於最後找到新聞 "根據摩根給各通路公文上表示,「量太少已不具在台灣註冊之商業可行性考量」,因此將在103年12月31日撤銷在台灣銷售以及募集"

原來是太少人買了,只是不知道下架後會有什麼影響,就先繼續觀察了

Reference
[1] http://blog.xuite.net/blacktin/wretch/129375026-%E5%9F%BA%E9%87%91%E6%A8%99%E7%A4%BA%E3%80%8C%E5%B7%B2%E6%92%A4%E9%8A%B7%E6%A0%B8%E5%82%99%E3%80%8D
[2] https://www.ptt.cc/bbs/CFP/M.1234665668.A.96A.html
[3] http://www.chinatimes.com/newspapers/20141205000282-260208

How to do Conditional Control in Stored Procedure

There are three input parameters for this stored procedure
  • INPUT_YEAR: ex. 103 (ROC era system)
  • INPUT_QUARTER: ex. 4 means quarter 4
  • INPUT_USER_ID: login user id
This procedure will execute different part based on different quarter.
We can use IF-THEN-ELSIF to fulfill this requirement.

The syntax for IF-THEN-ELSIF is :
IF condition1 THEN
   {...statements to execute when condition1 is TRUE...}

ELSIF condition2 THEN
   {...statements to execute when condition2 is TRUE...}

ELSE
   {...statements to execute when both condition1 and condition2 are FALSE...}

END IF;

Example:
  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
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
create or replace PROCEDURE PROC_FMS406R_TAB6_FCST_VALUES 
(
  INPUT_YEAR IN VARCHAR2 
, INPUT_QUARTER IN VARCHAR2 
, INPUT_USER_ID IN VARCHAR2 
) AS 
BEGIN
  NULL;
  IF INPUT_QUARTER = '1' THEN
    dbms_output.put_line('Q1');
    --1.2.9 撈出本年度收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表
    --1.2.9.1 當前端選擇第一季(本年度1~3月都是預估數)
    MERGE INTO FMS406FI T1
    USING
    (
      SELECT YYY_MM, ALC1, ALC2, ALC3
      FROM
      (
        SELECT *
        FROM FMS406FG
        WHERE SEQ = 2 AND (YYY_MM BETWEEN INPUT_YEAR||'01' AND INPUT_YEAR||'03')
        ORDER BY YYY_MM DESC
      )
      WHERE ROWNUM = 1
    ) T2
    ON (T1.YEAR = INPUT_YEAR AND T1.TYPE='1' AND T1.QUARTER = INPUT_QUARTER)
    WHEN MATCHED THEN UPDATE 
    SET T1.AMT1 = T2.ALC1, T1.AMT2 = T2.ALC2, T1.AMT3 = T2.ALC3
    ;
    dbms_output.put_line('execute 1.2.9 撈出本年度第一季收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表');
   
  ELSIF  INPUT_QUARTER = '2' THEN
    dbms_output.put_line('Q2');
    --1.2.9 撈出本年度收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表
    --1.2.9.2 當前端選擇第二季 (本年度4~6月都是預估數)
    MERGE INTO FMS406FI T1
    USING
    (
      SELECT YYY_MM, ALC4, ALC5, ALC6
      FROM
      (
        SELECT *
        FROM FMS406FG
        WHERE SEQ = 2 AND (YYY_MM BETWEEN INPUT_YEAR||'01' AND INPUT_YEAR||'06')
        ORDER BY YYY_MM DESC
      )
      WHERE ROWNUM = 1
    ) T2
    ON (T1.YEAR = INPUT_YEAR AND T1.TYPE='1' AND T1.QUARTER = INPUT_QUARTER)
    WHEN MATCHED THEN UPDATE 
    SET T1.AMT4 = T2.ALC4, T1.AMT5 = T2.ALC5, T1.AMT6 = T2.ALC6
    ;
    dbms_output.put_line('execute 1.2.9 撈出本年度第二季收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表');
        
  ELSIF  INPUT_QUARTER = '3' THEN
    dbms_output.put_line('Q3');
    --1.2.9 撈出本年度收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表
    --1.2.9.3 當前端選擇第三季 (本年度7~9月都是預估數)
    MERGE INTO FMS406FI T1
    USING
    (
      SELECT YYY_MM, ALC7, ALC8, ALC9
      FROM
      (
        SELECT *
        FROM FMS406FG
        WHERE SEQ = 2 AND (YYY_MM BETWEEN INPUT_YEAR||'01' AND INPUT_YEAR||'09')
        ORDER BY YYY_MM DESC
      )
      WHERE ROWNUM = 1
    ) T2
    ON (T1.YEAR = INPUT_YEAR AND T1.TYPE='1' AND T1.QUARTER = INPUT_QUARTER)
    WHEN MATCHED THEN UPDATE 
    SET T1.AMT7 = T2.ALC7, T1.AMT8 = T2.ALC8, T1.AMT9 = T2.ALC9
    ;
    dbms_output.put_line('execute 1.2.9 撈出本年度第三季收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表');
        
  ELSIF  INPUT_QUARTER = '4' THEN
    dbms_output.put_line('Q4');
    --1.2.9 撈出本年度收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表
    --1.2.9.4 當前端選擇第四季 (本年度10~12月都是預估數)
    MERGE INTO FMS406FI T1
    USING
    (
      SELECT YYY_MM, ALC10, ALC11, ALC12
      FROM
      (
        SELECT *
        FROM FMS406FG
        WHERE SEQ = 2 AND (YYY_MM BETWEEN INPUT_YEAR||'01' AND INPUT_YEAR||'12')
        ORDER BY YYY_MM DESC
        )
        WHERE ROWNUM = 1
    ) T2
    ON (T1.YEAR = INPUT_YEAR AND T1.TYPE='1' AND T1.QUARTER = INPUT_QUARTER)
    WHEN MATCHED THEN UPDATE 
    SET T1.AMT10 = T2.ALC10, T1.AMT11 = T2.ALC11, T1.AMT12 = T2.ALC12
    ;
    dbms_output.put_line('execute 1.2.9 撈出本年度第四季 收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表');
    
  END IF;
  
END PROC_FMS406R_TAB6_FCST_VALUES;

Assume I assign these values into three parameters:
  • INPUT_YEAR: 103
  • INPUT_QUARTER: 4
  • INPUT_USER_ID: ALBERT
The stored procedure will execute this section
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  ELSIF  INPUT_QUARTER = '4' THEN
    dbms_output.put_line('Q4');
    --1.2.9 撈出本年度收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表
    --1.2.9.4 當前端選擇第四季 (本年度10~12月都是預估數)
    MERGE INTO FMS406FI T1
    USING
    (
      SELECT YYY_MM, ALC10, ALC11, ALC12
      FROM
      (
        SELECT *
        FROM FMS406FG
        WHERE SEQ = 2 AND (YYY_MM BETWEEN INPUT_YEAR||'01' AND INPUT_YEAR||'12')
        ORDER BY YYY_MM DESC
        )
        WHERE ROWNUM = 1
    ) T2
    ON (T1.YEAR = INPUT_YEAR AND T1.TYPE='1' AND T1.QUARTER = INPUT_QUARTER)
    WHEN MATCHED THEN UPDATE 
    SET T1.AMT10 = T2.ALC10, T1.AMT11 = T2.ALC11, T1.AMT12 = T2.ALC12
    ;
    dbms_output.put_line('execute 1.2.9 撈出本年度第四季 收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表');
    
  END IF;


Execution result:
1
2
Q4
execute 1.2.9 撈出本年度第四季 收入數之預估數,寫入﹝FMS406FI﹞國庫現金收支估測分析表



Reference
[1] http://www.techonthenet.com/oracle/loops/if_then.php
[2] http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/controlstatements.htm#LNPLS386