美國國庫券小數學 – 2

上次寫那篇主要是因為 AI 出錯, 引發了我想記錄下來的興趣. 但後來看到一些類題需要腦筋再多轉幾個彎. 我還是做個筆記才好複習.

Q1, 有個 T-Bills 用 99,900 買了, 還有 180 天到期. yield to maturity 是多少?

上回講到計算隱含價值, 這回我買都買了, 狀況就不一樣. 所以不是用那個公式, 倒是可以用直覺.

由於 180 天後我可以拿到 100,000 元, 表示我可以賺 100,000 – 99,900 = 100 (元).

獲利率 = 100/99,900, 後續可以當作 Annual Payment Rate = APR 來計算.

年化 yield to maturity = 100/99,900 x (360/180) = 0.2002%

Q2. EAR 是多少?

Effective Annual Rate = EAR = (1 + APR/m)m , 本例子中, 我剛好買在生命周期的一半, 故兩個半年相當於兩期, m = 2.

EAR = (1 + 0.1001%)360/180 – 1 = 0.2003%

這明顯是一個買貴的例子. 但注意 EAR 只會比 yield to maturity 大一點點. 如果數量級差太多就是算錯了.

Q3. 隔夜逆回購 (ON RRP = Over Night Reverse Repurchase)

A 銀行在美聯儲的存款帳戶(reserve account)有閒置的 10 億美金, 向美聯儲申請參與 ON RRP, 假設隔夜逆回購利率 5.8%, 1 天能賺到多少錢?

美聯儲接受 ON RRP 申請後, 銀行將指示美聯儲從自己在聯儲的帳戶扣款 (減少 reserve balance), 當作國債的抵押品. 銀行則得到國債一紙.

第二天, 美聯儲把錢還給銀行, 並且支付國債利息  10億美元 * 5.80% * (1/360) ≒ 16.11 萬美元. A 銀行把國債還給美聯儲.

假設匯率 1 USD = 29.49, TWD, 16.11 萬美元 = 475.1 萬元台幣.

參考 [1], 銀行不勞而獲的結果, 剛好可以養一個螃蟹工程師 (對, 數字我湊的). 我的重點是, 錢每天都在貶值, 你怎麼可以不投資?

[REF]

  1. https://news.tvbs.com.tw/life/2889863

Gerrit 帳號小註解

有些人應該也遇到過這個問題: 編 Android 的主機與 Gerrit 主機的帳號不一樣, 導致認證失敗. 前年我在 Gerrit 叫做 cashc, 但是我在編 code 的 Linux server 有時叫 cash, 有時叫 cashchou, 於是上述的冏事就發生了. 當時查了一些資料才搞定, 但這個痛過一年後就忘了, 連要用哪幾招都變生疏了. 最近公司也有人遇到, 我想我還是詳細地記錄下來比較好, 如此才能舉一反三 – 別人問一步, 我可以直接回答三步.

第一步就是在編 code 的 server 製作符合 Gerrit server 的 RSA 公鑰. 因為 gerrit 通常都是公司架設的, 就算是自己部門架設的, 也會引用公司 domain 的帳號密碼. 因此我們的 RSA key 要設成公司 email address. 假設您在公司的帳號是 username@companyname.com, Gerrit server 是 gerrit.companyname.com, port 是 29418.

ssh-keygen -C"username@companyname.com" -t rsa

此時把 ~/ssh/id_rsa.pub 貼到 Gerrit 接收的 key 的公鑰的欄位, Gerrit 就可以接受這把 key 的私鑰. 若設定都沒有錯誤, ~/ssh/id_rsa.pub 的最後一行就是 username@companyname.com.

第二步是對 Gerrit server 做 repo init. 舉例來說:

export MANIFEST_REPO=ssh://username@gerrir.companyname.com:29418/github/manifests

export MANIFEST_BRANCH=jb-dev

export MANIFEST_FILENAME=jb-20130405.xml

repo init -u ${MANIFEST_REPO} -b ${MANIFEST_BRANCH} -m ${MANIFEST_FILENAME}

第三步是 repo sync. 第一次做 repo sync 相當於 git clone. 由於 sync 的時候是用 .repo/manifest.xml. 所以要去手動修改這個檔案的內容, 把所有

<remote fetch="ssh://gerrit.companyname.com:29418" …

都改成  

<remote fetch="ssh://username@gerrit.companyname.com:29418" …

改完這三步就可以正確做完 repo sync.

不過, 故事還沒完. 因為您已經改過 manifest.xml 了, 下次再 repo sync, 系統就會提醒您有一個修改沒有 check in. 比較笨的方法就是每次都把原始的 manifest.xml 存起來 (rename 即可), 等到手動改的 manifest.xnl 做完 repo sync, 再回存舊版. 

一般來說, 如果 sync repo 失敗, 可以到有衝突的目錄做 git stash 保存現場. 等 repo sync 通過之後, 再 git stash pop 把自己的版本叫出來, 以便手動 merge code.

比較先進的 hack 方法是忽略掉我們對 manifest.xml 這個檔案的修改. 把永遠忽略的檔案加入 .gitignore, 以後 commit 就不會包含這個檔案, 但這不是這個狀況下所需要的. 我們現在只求忽略當前本地的 repository 就好, 因此可以把這個檔案加入 .get/info/exclude. 如此一來, 就不會失手把只適用自己的 manifest.xml 上傳到 git sever.

像我本身只編 code 來測試, 不改 code, 甚至可以忽略掉全部在本地端的修改. 此時可以用 git reset –hard HEAD 恢復到前一版.

[ref]

1. Repo 和 git 版本管理常用命令

2. 如何正确的repo sync?