利率公式小整理

自從川普 2.0 之後, 讓我想要惡補一下財經這個領域. 回想起當時亂花的錢, 流失的歲月和破碎的記憶. 先來複習十六年前讀過的東西好了.

[常用縮寫]

  • T = numbers of annuity payments
  • r = the interest rate
  • g = growing rate
  • Po = Present value of annuity
  • PMT = Payment
  • A = annuity payment
  • PT = Expected future value of investment
  • n = number of compounding periods
  • FV = Future value of an annuity
  • PV = Present value of cash flows

[基本公式]

PT = Po(1 + r)T

Po = PT(1 + r)-T

  • if Perpetuities, T ->∞,

Po = (A/r) (1-(1 + r)-T) = A/r

[縮寫公式]

Annual Compound Factor = ACF(r, n) = [(1+r)n −1]/r

Annual Discount Factor = ADF(r, n) = (1−(1+r)-n)/r

[分期付款]

貸款金額的複利本利和 = 每月還款金額的 ACF,

假設貸款 100 萬, 每個月還 1 萬, 一共還 10 年, 共 120 期.

理解為現在的 100 萬, 放著會生利息, 最後得到 Fv. 由貸款人每個月 PMT 的 ACF 償還.

100 * (1+r)120 = ACF(r, 120) = [(1+r)120 −1]/r

100 = [1-(1+r)-120 ]/r

PV = PMT * [1-(1+r)-n ]/r

[不斷配息的股票]

有個股票, 每年無止盡地配息 100 元, 堪比永動機, 股價為何不是無限大?

Perpetuity is a series of equal payments of a fixed amount for an
infinite number of periods.

  • if Perpetuities, T ->∞,

Po = (A/r) (1-(1 + r)-T) = A/r

假設機會成本為 5%, 該股票只值 2,000 元.

[利息成長的股票] (Growing Anuity)

假設這個股票不只是每年配息 A, 利率 r, 還會以 g 的比例成長, 那價值應該更高了吧!

第一年, 配息 A

第二年, 配息成長為 A(1+g)

第 n 年, 配息成長為 A(1+g)n-1, 折現為 A(1+g)n-1 / (1+r)n

將無限多年的折現現金流加起來:

PV = ∑t=1A(1+g)t−1​ / (1+r)

把 1+r 和 1+g 的指數弄成一樣 PV = A / (1+r) * ∑t=1 ​((1+g) / (1+r))t-1

因為 ∑t=0x=1 / (1−x) 當 ​∣x∣<1. 也就是末項趨近於 0, 首項為 1 的等比級數公式特例.

其中, 乘號左邊為 A / (1+r), 右邊為 1 / (1-x), 其中 x = (1+g)/ (1+r)

右邊 = 1 /( (1+r-1-g)/ (1+r)) = 1 /( (r-g)/ (1+r)) = (1+r) / ( r-g)

PV = (A / (1+r)) * (1+r)/ (r-g) = A / (r-g)

當然 r > g 的時候本公式都符合直覺. 忘掉一切, 只記得 A / (r-g) 就好.

[利息成長的縮寫公式]

Annual Discount Factor = ADF(r, n, g) = 上面沒投機化簡的 PV = A / (1+r) * ∑t=1n ​((1+g)/ (1+r))t-1 ,

老老實實地按等比級數求和展開, 乘號右邊 ∑t=1n ​((1+g)/ (1+r))t-1 = 1-(1+g)/ (1+r))n / ( 1- ​((1+g)/ (1+r)))

PV = A / (r-g) *(1- ((1+r)/(1+g)) n-1)

同樣的思路可以推導出, ACF (r.n.g) = A/(r-g) * ((1+r)n – (1+g)n)

以前除了手算, 考試可以用財務計算機. 我手上的 TI BA II Plus 已經沒電了, 但沒有換電池的必要, 現在有 Excel 處理這些東西, 更可以無腦問 AI. 不過呢, 直覺是慢慢培養起來的, 一直問 AI, 自己沒辦法產生敏銳度~~~

2024 年重點回顧

雖然這件事應該是昨天以前要做的, 即使我遲交了, 還是值得做個結語.

  1. 年初學了如何用 Python 處理 Excel 表格, 這個工作上用來統計 task weighting 很方便.
  2. 考慮未來是 AI 的時代, 整年到處上課和看展, 最辛苦的是拿到一張 TensorFlow Developer 證書. 畢竟老人只能說一嘴好 AI 的話, 那就沒有啥說服力。
  3. 考慮到數據中心很重要, 我想知道它跟 AI 是什麼關係?於是做了點研究, 還拿了一張 Google Cloud 的Machine Leaning Engineer 證書.

4. 至於最花錢的課莫過於這個. 在 Amazon Skill builder 一個月花了 905.21 美金. 其實只跑了兩個 model. 因為菜鳥不懂得用完要下線, 下一個月又白白被多 charge 一次. 真是花錢如流水~~~

5. 年中老闆說部門缺專利, 我一口氣申請了 7 個. 本來想湊十個, 不過部門目標已經達成了。考慮到邊際效益遞減,我還是把腦力保留到 2025, 不需要做無效的攻擊. 整年共獲得 10 個專利, 台灣新增 6 個, 美國 2 個, 大陸 2 個. 當然這些是前幾年申請的.

6. 出差去印度, 解鎖了一個我旅行清單中偏難的項目。可惜出差行程不可能看到什麼大景, 就是到此一遊。主要亮點還是和家人去了日本和土耳其. 家庭旅遊的部份 pilot run了 “帶家人坐商務艙到處去旅行" 的願望. 重點是這年可以完全丟下小孩, 因為她自己跑去澳洲打工度假了.

2024 年都在學技術, 沒讀到幾本書. 本來說要學英日文都沒進展, 說要減重還胖了!? 這、這是冬天的關係吧! I hope so. 總之, 2024 學了一些新知識. 2025 年希望學更多知識, 也希望跟工作做更多結合.

去年年底網路上很多人 po 文說 2025 =452, 所以這是很特別的一年. 同學還找了更多組合, 像是 (1+2+3+4+5+6+7+8+9)2 = 2025 之類. 其實根本就同一件事. 既然如此, 那今年就是海綿寶寶年了! 讓我們用海綿寶寶考駕照的精神迎接一整年的挑戰吧! 诶? 不對! 他好像一直沒考上耶!? 忘掉駕照, 我們學習他的樂觀就好了. 加油!

少年 Py 的奇幻漂流

週日晚上做了一個夢。有位老先生用毛筆字寫了封信給我,署名林如松,要我照顧他的兒子。說這個兒子學習不好是因為某種心理疾病吧!總之懇請多多照顧等有上百來字。望文生義,那麼我在夢中的身份就是個導師了。

身為導師, 而不是醫師。我開始找醫學相關的線索。在一張可能是精神科醫師的桌子上,我發現了名片。上面寫了幾個小字說明醫師的專業。細節忘了,但其中 “止冰" 兩個字清楚地印入我的眼簾。這是什麼? 要阻止冰塊? 還是冰毒? 我納悶了一會兒,才恍然大悟是"治病" 的諧音.

病人因為精神疾病來求診,有點害羞會不想讓人知道,所以醫師就用某某人止冰來隱晦這件事! 想不到我只是做個夢,也會自編自導諧音梗啊! 在我破解了自己的梗之後,空中又傳來一個自問自答。"為什麼脖子太長不好? " 隔了一下,"因為好"頸" (景) 不長 (常)"。看來我的夢境是進入了諧音梗的 decorator [1].

等等! 一開始我有正經任務的啊! 怎麼跑題了? 想到這裡,世界又變得緊張嚴肅了。好像是初三23:59’57″ – 快初四 (出事)了! 我帶著兩三個人開始闖關,其中也不知道有沒有包括林小弟? 總之系統瞬間提示倒數 3 秒鐘,如果不在限時內讓機關套住一個掛勾,在我後面的人都會從平台上滑下去。正當我回頭叫其他人跟上來,倒數 3 秒已經 “加速" 結束了。我能跟大家說的話只有 一句 “來不及了"。

然而,即使倒數時間到了,我沒有完成任務,其他人也沒跟上,但好像並沒有發生什麼了不起的事? What not happened? 難道因為我們的 3 秒不是真的 3 秒,Dead line 也就不是 line 了嗎 ? 換言之,line 變成 non-linear,所以 dead 也就不 dead 了 !? 這麼一想好像也有道理。好比 nonlocal [2] 如字面所說,雖然不是 global,但肯定不是 local。事前有舖梗,後面就拗得過去。

看來這個夢中世界的 “人設" 很不靠譜啊!? 果然畫面再一轉,出現了那位忘記是自稱還是人稱喇賽之王的前同事 “肯", 帶著我們一行人小跑步穿越著商店街。沒有要 shopping,就是路過著日常騎樓下攤販。本來好像要堂堂展開的華麗冒險,就這樣被 apply(荒謬且搞笑) [3] 了.

Anyway,不管發生什麼事,我們都可以正向解讀。其實我們這位前同事去了谷歌。也許我祖先周公暗示著不管局勢多麼奇幻,還是要好好探索 (Google) 一下未知的領域。那些小攤位就不逛了,我們繼續前行,找出更重要的線索。既解決林小弟的困擾,幫助那位老林先生,同時也完成自己的任務。

[REF]

1. 在 Python 中,裝飾器(decorator) 的作用是用來修改或增強函數的行為。當你使用裝飾器時,原函數會被包裝到一個新的函數(通常是內部的 wrapper_func)中,因此裝飾器會影響函數的執行方式。例如:

      from datetime import datetime
      
      def 計時器(func):
          def wrapper():
              現在時間 = datetime.now()
              小時 = 現在時間.hour
              print (小時, "點了")
              func()
          return wrapper
      
      @計時器
      def 打招呼():
          print("你好!")
      
      打招呼()

      2. 在 Python 中,nonlocal 關鍵字用於在嵌套函數中聲明變數,讓內層函數可以修改外層(但非全局)作用域中的變數。

      def 按讚():
          
          次數 = 0
       
          def comment_filter(好評):
              nonlocal 次數
      
              總類 = ["讚", "愛心", "加油"]
              if 好評 in 總類:
                  次數 +=1
      
              print(f"好評 {次數}")
          return comment_filter
      
      按 = 按讚()
      按("哭")
      按("愛心")

      3. .apply() 主要在 Pandas 中使用,是一個非常強大的函數,用於對 DataFrame 或 Series 進行數據處理。例如: df[‘成績’].apply(加分)

      import pandas as pd
      import math
      
      data = {
          '姓名': ['林明明', '李大同', '王小美'],
          '成績': [85, 92, 5]
      }
      
      def 加分(row):
          # 取得成績值
          score = row['成績']
          # 計算新成績
          new_score = math.sqrt(score) * 10
          return new_score
      
      # 建立 DataFrame
      df = pd.DataFrame(data)
      
      # 使用 apply 並傳遞整個 DataFrame
      df['新成績'] = df.apply(加分, axis=1) 
      
      print("DataFrame 內容:")
      print(df)

      賀!

      今天是 2024/9/17, 也是龍年的中秋節. 平安是福, 此為首賀!

      桃園地景節 – 憲光二村

      再賀的是: 經過 2 年漫長的等待, 我比較滿意的其中一個專利, 終於在美國通過了. 其實這個專利有四胞胎. 台灣四個都過了. 美國也過了第一個, 這是好的開始.

      猶憶我 2022 年有點囂張地記錄下 2 個月得到 3 個美國專利的戰績, 這兩年老天就讓我校正回歸. 足足乾旱了兩年. 才等到現在我的第 9 號! 希望它的兄弟姊妹都能夠登上影神圖.

      最後一賀是: 自從黑悟空在黑風大王那裡卡住之後, 我就用上了 “悟空 多功能修改器" 鎖血看劇情. 剛剛也告一段落. 雖然沒有全收集. 不過 " 81 難" 好歹觀賞完 64 難. 可以收工了.

      黑悟空真的比較難打. 我承認如果不作弊我絕對打不贏楊戩和大聖殘軀. 我自信能跟二郎神一博的技能是翹二郎腿。

      每次天命人被打死都要拔頭上的一根毛去土地廟上香. 我在想,如果遊戲夠寫實的話. 天命人將會變成禿子. 跟一拳超人一樣 (變強了頭也禿了) !

      這張比天真頂好看一點

      BTW, 跟艾爾登法環 DLC 相比. 那邊我只有最後一隻拉塔恩打不過是靠毒死的. 其他多打兩下還 OK. 頂多就是把搖桿玩壞, 必須要買新的而已.

      為黃金律法犧牲的 gamepad

      雖然官方日前更新削弱拉塔恩的戰力, 但毒死也是一種實力. 我不想重打了. 何況光是下毒失敗都死了好多次.

      隱身丟出腐敗壺之後, 用擬態樹枝假裝是石獅子.

      用 Multi-LLM 解釋投資風險

      Coursera 有一門新的課 [1], 由該公司老闆 Andrew 介紹 CrewAI 來講課. 主要是講多個 LLM 怎麼應用. 課程不長, 有 Lab, 沒證書. 看在老闆推薦的份上, 我也來蹭一下.

      用最簡單的話來講, 它的技術就是叫每個 Agent 執行一個 task. 雖然大家平平都是 LLM, 但是指定了不同的角色, 每個 agent 就會各自專注在它的 task 上, 達到互相幫忙的結果. 當然每個 agent 的排列方式 (hierachy) 會影響他們共事的結果.

      可不可 search 網路? 需不需要 human input, 可不可以非同步? 這些在 CrewAI 這家公司的 library 中都可以設定. 每個 agent 透過 memory 互相溝通, 因此即使不指定誰 (agent) 要傳訊息給誰 (other agents), 資料也可以共用.

      有個 Lab 很好玩, 就是建立一個 crew 去分析買股票的風險. 它的架構是 Crew 叫 agent 做 task. Task 就只是明訂工作內容 (description) 和預期成果 (expect output), 然後註明給哪個 agent. Agent 要指定 role, goal, backstroy (工作指導), 標記可以用那些 tools? 標記可不可以餵資料給別人 (delegation), log 要多詳細 (verbose).

      from crewai import Crew, Process
      from langchain_openai import ChatOpenAI
      
      # Define the crew with agents and tasks
      financial_trading_crew = Crew(
          agents=[data_analyst_agent, 
                  trading_strategy_agent, 
                  execution_agent, 
                  risk_management_agent],
          
          tasks=[data_analysis_task, 
                 strategy_development_task, 
                 execution_planning_task, 
                 risk_assessment_task],
          
          manager_llm=ChatOpenAI(model="gpt-3.5-turbo", 
                                 temperature=0.7),
          process=Process.hierarchical,
          verbose=True
      )

      Crew kickoff 之後, agent 就會去做事. 至於要做什麼? 寫在 input string 裡, 相當於一個 prompt. 舉例指定用 1000 元去買 Nvidia, 風險承受度中等, 應該如何操作? 在課程的例子中, 因為指定 process 是 hierachy. 所以叫第一個 agent 去做 data analysis, 它有 search 網路的 tool, 因此就會各個網站 search Nvidia 的新聞. 總結出 10 條. 交給下一棒 Trade agent.

      Trade agent 的工作是要分析標的物的統計值, 它也有網路工具. 所以它也去找了一堆網站. 總結出 Nvidia 的評價.

      Based on the information gathered from various analyst forecasts and recommendations, the average 12-month price target for NVDA is $130.68, with the highest target being $200.00 and the lowest at $90.00. The consensus rating for NVDA is “Strong Buy," supported by 38 buy ratings and 3 hold ratings. The stock has a current price of $135.58. The analysis suggests that there is a potential -3.61% downside from the current price based on the average price target. The historical performance of NVDA shows consistent outperformance relative to the industry.

      接一下到了 execution agent. 它有甚麼大膽的創見嗎? 沒有. 即使它收到這麼明顯地看多訊息: Considering the historical performance and analyst forecasts, developing a trading strategy that aligns with the bullish sentiment towards NVDA could be a profitable approach, especially for day trading preferences.

      它還是說我要上網查看看, 然後歸納出 5 點結論:

      Execution Plan for NVDA:
      1. Utilize historical performance data to identify key trends and patterns in NVDA’s stock price movements.
      2. Implement a strategy that leverages the ‘Strong Buy’ recommendation and average 12-month price target of $130.68.
      3. Monitor market trends and movements closely to capitalize on potential trading opportunities presented by NVDA’s growth potential.
      4. Develop a risk management strategy that aligns with the user-defined risk tolerance (Medium) and trading preferences (Day Trading).
      5. Regularly review and adjust the execution plan based on new market data and insights to optimize trading outcomes for NVDA.

      接著回到 Crew. 它根據風險承受度為 Medium 這個條件, 再上網去跑一輪. 對每個網站的內容做一個小結論. 最後叫 risk management agent 彙總, 結果就是給安全牌 (因為風險承受度不高).

      Overall, the risk analysis for NVDA’s trading strategies should focus on understanding the potential risks associated with each strategy, assessing the firm’s risk tolerance, and implementing appropriate safeguards to manage and mitigate risks effectively.

      我認為畢竟 Crew 收到的指令就是風險承受度中等而已. 已經預設立場, 不用問 AI 也知道結果. 當我把風險承受度改為 Ultra High 重跑一次. 這次它的結論就變狠了! 建議了一些選擇權策略: Straddle Strategy、Iron Condor Strategy 、Long Call Butterfly Spread Strategy、LEAPS Contracts Strategy 等等.

      這告訴我們兩件事.:

      1. CrewAI 使用 multi LLM 的功效很強大. 大家做完自己的事就交給同事 (co-worker), 各司其職. 可以用同一個 LLM 做出一群同事開會的效果!
      2. 你跟 AI 講我風險承受度低, AI 就叫你保守. 你說你不怕死, AI 就叫你玩選擇權. 這些不用問 AI, 應該是問施主你自己就好了.

      [REF]

      1. https://www.coursera.org/learn/multi-ai-agent-systems-with-crewai/home/welcome