2020年1月15日 星期三

[投資理財]為什麼你的退休金只有別人的一半?(作者- 闕又上)讀後心得

先講結論

看到最後回想的時候才突然覺悟到
為什麼你的退休金只有別人的一半?這本書的標題不是單指自己存的退休金
也包含勞退基金的運用(含公司提撥跟自行提撥)
我是有自行提繳6%的人,當初想到的只有為了節稅
並沒有幻想過裡面的錢會有機會錢滾錢(目前只有保證定存2年利率)
前幾年勞退基金有新聞說大賺很多錢,每位勞工都分到好幾萬
但是實際上去看投資報酬率卻是遠遠輸過美國or台股大盤
甚至輸過股25債75的保守型投資策略,30年下來不當的資產配置
可能使廣大的投資人的退休金只有美國人的一半!
美國人的退休金可以自行選擇投資標的,自提率達80%以上,廣大的資金活水活絡美國經濟
甚至拿來投資全世界,我國的台積電就有超過50%的比率是被外資持有
等於我們全國最菁英的人,用我們的肺發電後勞心勞力的成果卻有一半以上貢獻給國外

資產配置該如何配置呢? 書上說可以用年齡來考慮 75歲的人 100-75至少要有25%在股市
25%是最低的股市投資比率,低於此比率的話會無法擊敗通貨膨脹,變成負利率
實際上的配置可以按照個人喜好,以美國大學校務基金的操盤手會建議要有一定比率房地產
例如 60%股市+20%債券+20% Reits,債券可以買美國20年以上公債混搭短年期
Reits可以的話可以分配美國(VNQ)+全球
股票不一定要個股,如果你相信全球市場是會逐步往上的話(以這百年歷史來看是如此)
可以投資VTI等全球ETF or 美國S&P 500的ETF,我們已經比長一輩的人幸運了
他們當時沒有0050或是VTI等被動投資標的,也難以用個股湊出這樣的投資組合
遇到變成壁紙的個股或是跌很多的個股(ex國泰金曾經12xx元)就會血本無歸
所以建議勇敢的思考建構出自己的投資哲學,建立自己的投資組合,勇敢的踏出第一步
沒有第一步,永遠想要在最低點買反而會失去更多追高的機會

本書又介紹兩種投資新法,分別是阿甘投資法跟神龍擺尾法
阿甘投資法
以彼得.林區的做法為例:
1.1940 年 1 月 30 日,只放 1 千美元在美國標普 500 的指數,而且只有一次,五十二年後會成長到 33 萬美元。
2.如果能夠養成紀律,不管每年股市的漲跌,固定在 1 月 30 日再投資 1 千美元,這五十二年一共 5 萬 2 千美元的投資本金,會變成 355 萬美元。更驚人的是變化接續進行。
3.如果有良好的心理素質,也正確的看待股市的波動,學會巴菲特一再強調的危機入市,在股市下跌 10% 時,再加碼一次。這五十二年中有 31 次機會,總投資額變成了 8 萬 3 千元,但帳戶總資產變成了 629 萬元。危機入市不是沒有道理,就像法國印象派畫家雷諾瓦(Pierre-Auguste Renoir)所說的:「痛苦會過去,美麗會留下來。」因為願意承受股市下跌一時的痛苦,這個美麗的投資成果和美元果然都留下來了!

神龍擺尾法
以70%股市+30%債券為例,每年一次(如1/2)計算累積(好幾年可以一起算)的跌幅
如果接近38%的時候就可以做一次股債平衡,以守為攻將20%的債券轉入股票市場
或是不賣掉債券,增加投資股票的金額將配置調整到90%
從谷底反彈約50%以上(or 75%~100%)就可以將資產配置調整回7股3債

給年輕人的致富之道提到建議先存到第一桶金(當然是很痛努的過程)
要買房的時候第一桶金不能全部花掉,取出一部分當頭期款
預期房貸利率會低於你的投資報酬率故不建議都拿去當頭期款
這樣繳房貸的同時還能透過投資利得減輕壓力



2020年1月12日 星期日

[投資理財]投資美股常用網站

1. Morning晨星網站
晨星網站上可以很方便的看到近10年財報數據,以及各種公司基本資料。
2. Yahoo! Finance
Yahoo!通常用來看圖表,也可以下載它的歷史走勢(historical data)
3. Gurufocus
有點像台灣的財報狗,不過很多指標都要是會員才有辦法看
4. ETFdatabase
主要用來查一些美股ETF的資料。
5. Dividend.com
要用來查一些股利相關的資料。
6. Portfoliovisualizer
有很多回測資料可以用,看起來複雜一點,但懂的話很實用。

2020年1月11日 星期六

[投資理財]我的eToro持股清單_20200111

依據之前的投資計劃
估計除了現金外,保有的股票要朝以下的資產配置去走
分別是
個股 30%
股票型ETF 30%
債券型ETF 20%
房地產相關(含個股) 20%
目前總金額1700美金

目前個股的部分
我希望不要壓單一市場 如美國
所以有調配一下區域
香港:9988HK(阿里巴巴),雖然馬雲退休了,但是螞蟻金服(支付寶)的戰鬥力實在太強
三大交易所:倫敦LSE+歐洲的EuroNext+芝加哥商品交易所
                        雖然LSE的股價有點高我有點抖,但以交易所的性質,幾乎不須擔心競爭
荷蘭:ASML是半導體設備的龍頭且市占率高到可怕
日本:任天堂(美股ADR)的創意真的很可怕,從Switch就可以看出來
美國:蘋果(APPL)+谷歌(GOOG)+波克夏·海瑟威(BRK.B)+VISA(V)+迪士尼(DIS)
            都是龍頭也是我自己常用的產品,本益比也都不會太高

股票型ETF
主要是 DRGO+HDV都是高股息相關的ETF
DGRO iShares核心股息成長ETF(iShares Core Dividend Growth ETF) 0.08%
HDV iShares核心高股利ETF( iShares Core High Dividend ETF) 0.08%

債券型ETF
採跟單市場先生(Chiay0327),他的投資組合裡有大量的TLT跟IEF及少量的黃金+石油+農產
IEF iShares 7-10年期美國公債ETF(iShares 7-10 Year Treasury Bond ETF) 0.15%
TLT iShares 20年期以上美國公債ETF(iShares 20+ Year Treasury Bond ETF) 0.15%
GLD SPDR黃金ETF(SPDR Gold Shares) 0.4%
USO United States石油ETF(United States Oil Fund) 0.73%
DBA Invesco德銀農業ETF(Invesco DB Agriculture Fund) 0.89%
ITOT iShares標普美股總體市場指數ETF(iShares Core S&P Total U.S. Stock Market ETF) 0.03%
IVV iShares核心標普500指數ETF(iShares Core S&P 500 ETF) 0.04%

房地產相關(含個股)
目前是投資這四個ETF(VNQ+USRT+XLRE+XLU)+金沙集團(LVS)
不過eToro上似乎找不到非美股的ETF讓我有點擔心
USRT iShares美國核心不動產投資信託ETF(iShares Core U.S. REIT ETF) 0.08%
VNQ Vanguard房地產ETF(Vanguard Real Estate ETF) 0.12%
XLU SPDR公用事業類股ETF(Utilities Select Sector SPDR Fund) 0.13%
XLRE SPDR房地產類股ETF(Real Estate Select Sector SPDR Fund) 0.13%

跟單的明星投資人
1.市場先生(Chiay0327):大概是債七股三的風格,相當保守
2.寶可孟(Lai92007):帶我入門的,債+現金約30%其餘分配美歐及新興市場,
                                     因為是卡神所以有買Visa+MasterCard+American Express也是很合理
3.賴彥駿(mis83b43):投資組合很雜,很多有趣的個股,也有跟其他明星投資人
                                      或是購買eToro AI Portfolios,很認真的人,有他幫我研究說不定賺大錢
4.小賈(lazyeconomics):懶人投資人創辦人,在上海證券當股票分析師,
                                         投資組合內有一些大陸個股,了解當地行情才知道買哪支對吧

2020年1月9日 星期四

Oracle觸發器開發與設計

觸發器是一種自動執行響應數據庫變化的程序。可以設置為在觸發器事件之前或之後觸發或執行。能夠觸發觸發器事件的事件包括下面幾種:

  DML事件
  DDL事件
  數據庫事件

  DML事件觸發器可以是語句或行級觸發器。DML語句觸發器在觸發語句之前或之後觸發DML行級觸發器在語句影響的行變化之前或之後觸發。
        用戶可以給單一事件和類型定義多個觸發器,但沒有任何方法可以增強多觸發器觸發的命令。下表列出了用戶可以利用的觸發器事件:

事件 觸發器描述 
          INSERT            當向表或視圖插入一行時觸發觸發器 
          UPDATE           更新表或視圖中的某一行時觸發觸發器 
          DELETE           從表或視圖中刪除某一行時觸發觸發器 
          CREATE          當使用CREATE語句為數據庫或項目增加一個對象時觸發觸發器 
          ALTER             當使用ALTER語句為更改一個數據庫或項目的對象時觸發觸發器 
          DROP              當使用DROP語句刪除一個數據庫或項目的對象時觸發觸發器 
          START             打開數據庫時觸發觸發器,在事件後觸發 
          SHUTDOWN  關閉數據庫時觸發,事件前觸發 
          LOGON           當一個會話建立時觸發,事件前觸發 
          LOGOFF         當關閉會話時觸發,事件前觸發 
          SERVER         服務器錯誤發生時觸發觸發器,事件後觸發 

創建觸發器的語法如下:

CREATE [OR REPLACE] TRIGGER trigger_name
{before|after|instead of} event
ON {table_or_view_name|DATABASE}
[FOR EACH ROW[WHEN condition]]
trigger_body 

 只有DML觸發器(INSERT、UPDATE、DELETE)語句可以使用INSTEAD OF觸發器並且只有表的DML觸發器可以是BEFORE或AFTER觸發器。
 象約束一樣觸發器可以被設置為禁用或啟用來關閉或打開他們的執行體(EXECUTE),將觸發器設置為禁用或啟用使用ALTER TRIGGER語句:

ALTER TRIGGER trigger_name ENABLE;
ALTER TRIGGER trigger_name DISABLE; 

  要禁用或啟用表的所有觸發器,使用ALTER TABLE語句

ALTER TRIGGER table_name DISABLE ALL TRIGGER;
ALTER TRIGGER table_name ENABLE ALL TRIGGER; 

  刪除觸發器使用DROP TRIGGER

DROP TRIGGER trigger_name; 

 Oracle觸發器開發與設計 
一、 什麼是觸發器?
數據庫觸發器是一個存儲的PL/SQL程序塊,它與一個基表聯系,當在表上執行特定的數據庫維護(插入、刪除、更新這三種操作)時,隱含地執行一個PL/SQL程序塊。

二、觸發器的作用:
。防止非法的數據庫操縱、維護數據庫安全
。對數據庫的操作進行審計,存儲歷史數據
。完成數據庫初始化處理
。控制數據庫的數據完整性
。進行相關數據的修改
。完成數據復制
。自動完成數據庫統計計算
。限制數據庫操作的時間、權限等,控制實體的安全性

三、觸發器的組成:
1、觸發時間:觸發器事件的時間次序(before, afer)[2]

2、觸發事件:什麼SQL語句會引起觸發器觸發(Insert, delete, update)[3]

3、觸發子體:觸發器觸發時要執行的操作(一個完整的PL/SQL程序)

4、觸發類型:觸發器被執行的次數(語句級、行級)[2] //語句級只執行一次,行級會執行多次。

[*]一個表上最多可以創建12個不同類型的觸發器:3*2*2 = 12

四、創建觸發器注意事項:
1、在觸發器中可以調用存儲過程、包;在存儲過程中不得調用觸發器。

2、在觸發器中不得使用commit, rollback, savepoint語句。

3、在觸發器中不得間接調用含有commit, rollback, savepoint的語句的存儲過程及函數。

五、創建語句級觸發器:
語句級觸發器: 請參考PowerPoint教程:存儲過程1.ppt[Page19] 該觸發器在數據庫操作時只執行一次。
說明:
。update中的of是可選項,用于指定語句要修改的列
。要創建的觸發器已經存在時,使用replace選項

//例1:before型觸發器: 
Create or replace trigger DelEmp
  before delete on emp
  Begin
   if (To_Char(sysdate,'dy') in ('星期六','星期日') or
        To_number(To_Char(sysdate,'hh24'))  not between  8   and 18)
   then dbms_output.put_line('現在是非工作時間,請退出!!!');
   end if;
  End;

[觸發器數據字典]
SQL> select table_owner, table_name,trigger_body from user_triggers where trigger_name='DELEMP';

//例2:After型觸發器:
Create or replace trigger InsertEmp
after insert on emp     // 如果是before,就會比after的結果少一名。
Declare
v_empcount number(7);
Begin
select count(*) into v_empcount from emp;
dbms_output.put_line('目前員工總數已達到:'|| v_empcount|| '名。');
End;


//例3:多個觸發條件
Create or replace trigger ChangeEmp
before delete or insert or update on emp
Begin
   if (To_Char(sysdate,'dy') in ('星期六','星期日') or
        To_number(To_Char(sysdate,'hh24'))  not between 8 and 18)
   then dbms_output.put_line('現在是非工作時間,請不要修改數據!!!');
   end if;
End;

// 更完善的寫法:
Create or replace trigger ChangeEmp
  before delete or insert or update  on emp
  Begin
   if (DELETING and (To_Char(sysdate,'dy') in ('星期六','星期日') or
        To_number(To_Char(sysdate,'hh24'))  not between  8   and 18))
   then dbms_output.put_line('現在是非工作時間,不要刪除數據!');

   elsif (UPDATING and (To_Char(sysdate,'dy') in ('星期六','星期日') or
        To_number(To_Char(sysdate,'hh24'))  not between  8 and 18))
   then dbms_output.put_line('現在是非工作時間,不要更新數據!');

   elsif (INSERTING and (To_Char(sysdate,'dy') in ('星期六','星期日') or
        To_number(To_Char(sysdate,'hh24'))  not between  8   and 18))
   then dbms_output.put_line('現在是非工作時間,不要插入數據!');

   end if;
  End;

六、創建行級觸發器:
等級觸發器:增加選項for each row, 使觸發器在每一行上觸發。

1、創建行級觸發器注意事項:
(1) 在行級觸發器中,在列名前增加old表示該列修改前值,增加new表示該列修改後值。
(2) 在PL/SQL中引用時,前邊增加冒號。
  
[例4: 行級觸發器] //必須是對所有的行進行操作才行。
Create or Replace trigger UpdateEmp
Before update on emp 
for each row 
Begin
dbms_output.put_line(:old.sal||'--------->'||:new.sal);
End;

[例5:保存歷史數據,這種使用方法很重要,用來保存關鍵表的歷史數據]
CReate or Replace trigger ChangeEmp
Before update or delete on emp
for each row
Begin
Insert into oldemp(empno, ename,job,hiredate,sal)
values(:old.empno,:old.ename,:old.job,sysdate,:old.sal);
End;

SQL> create table oldemp
as select empno, ename,job,hiredate,sal from emp where 1>2;

[例6:修改外鍵]
Create or Replace trigger UpdateDept
after update on dept
for each row
Begin
update emp
  set emp.deptno = :new.deptno
  where emp.deptno = :old.deptno;
End;

[例7:刪除外鍵、刪除相關數據]
Create or Replace trigger DeleteDept
before delete on dept
for each row
Begin
delete from emp where deptno = :old.empno;
End;

七、觸發器管理
1、使觸發器失效:
SQL> alter trigger 觸發器名稱 disable;  // 失效
SQL> Alter Trigger 觸發器名稱 enable;  // 生效

SQL> Alter table 表名 DISABLE all triggers; // 一個表上的所有觸發器失效
SQL> Alter table 表名 ENABLE all triggers; // 使一個表上的所有觸發器生效

SQL> Drop Trigger 觸發器名;  // 刪除觸發器;


CREATE OR REPLACE TRIGGER "MANAGER_WNC"."BND_PRTMST_TRIGS" BEFORE INSERT OR UPDATE OF PRT_NO, BND_CTRL , PRT_EDESC, PRT_UOM, TUBE_PROD, BEG_DATE ON BND_PRTMST REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
declare
Begin
  IF :NEW.YEAR_DISPLAY = 'N' THEN
       :NEW.CLV_FLAG := 'Y';
  ELSE
       :NEW.CLV_FLAG := 'N';
  END IF;
  If Updating Then
  --      A : ??????, B: ??? => ?? , C :  ?? => ???, D: ????????
   --  E :???? =>????
   if :new.prt_type <> :old.prt_type then
      insert into bnd_prtmst_log(maint_user,maint_date,prt_no,status,org_date,new_date,type,cur_bnd_ctrl)
              values(userenv('CLIENT_INFO'),sysdate,:new.prt_no,:old.prt_type||'=>'||:new.prt_type,:old.beg_date,:new.beg_date,'A',:old.bnd_ctrl);
   end if;
     if :new.bnd_ctrl ='Y' and :old.bnd_ctrl='N' then
       insert into bnd_prtmst_log(maint_user,maint_date,prt_no,status,org_date,new_date,type,cur_bnd_ctrl)
                values(userenv('CLIENT_INFO'),sysdate,:new.prt_no,:old.bnd_ctrl||'=>'||:new.bnd_ctrl,:old.beg_date,:new.beg_date,'B',:old.bnd_ctrl);
   elsif :new.bnd_ctrl ='N'  and :old.bnd_ctrl='Y' then
        insert into bnd_prtmst_log(maint_user,maint_date,prt_no,status,org_date,new_date,type,cur_bnd_ctrl)
                values(userenv('CLIENT_INFO'),sysdate,:new.prt_no,:old.bnd_ctrl||'=>'||:new.bnd_ctrl,:old.beg_date,:new.beg_date,'C',:old.bnd_ctrl);
   end if;
   if  :new.beg_date <> :old.beg_date then
       insert into bnd_prtmst_log(maint_user,maint_date,prt_no,status,org_date,new_date,type,cur_bnd_ctrl)
                values(userenv('CLIENT_INFO'),sysdate,:new.prt_no,'ORG_DATE=>NEW_DATE',:old.beg_date,:new.beg_date,'D',:old.bnd_ctrl);
   else
      insert into bnd_prtmst_log(maint_user,maint_date,prt_no,status,org_date,new_date,type,cur_bnd_ctrl)
                values(userenv('CLIENT_INFO'),sysdate,:new.prt_no,'   =>NEW_DATE',:old.beg_date,:new.beg_date,'E',:old.bnd_ctrl);
   end if;
   
   if :new.prt_type <> :old.prt_type or :new.bnd_ctrl <> :old.bnd_ctrl or :new.prt_edesc <> :old.prt_edesc or :new.prt_uom <> :old.prt_uom or
      :new.tube_prod <> :old.tube_prod or :new.beg_date <> :old.beg_date then
      :new.up_wnc_flag:='Y';
      :new.up_wnc_date:=SYSDATE;
   end if;
  End if;
End;

[投資理財]我的投資理財計畫

先講結論:
最近看了理財書
說要有投資哲學 投資計畫
            投資目標 資產配置
一步一步前進
我有加了一些有的沒有的當做年度現金流管控之用

另外我覺得我最大的財富是很願意去"思考"
把思考的過程寫出來當作部落格 無論寫得好不好都是留下思路的足跡


[里程研究]萬豪點數 Marriott Bonvoy

先講結論:
10萬點萬豪點數買好買滿了
一方面為了積活動 A 星展飛行世界卡需要5筆國外消費688以上
                                 B VISA卡抽獎去東京奧運的活動
                                 C 玉山Only卡累積Level
買好買滿for ANA環遊世界里程票中
但又押現金了 哭哭