2024年10月20日 星期日

[網站開發] 新增GPT投資助手美股選擇權估值分析頁面 (Norn-StockScreener投資網站開發)

接前篇:
[網站開發] 新增GPT投資助手美股公司分析頁面 (Norn-StockScreener投資網站開發)


上次用GPT幫忙分析整理美股公司資料, 這次想到也可以用GPT幫忙分析美股選擇權估值, 畢竟之前做了不少美股選擇權估值的模型, 如果能把這些資料交給GPT來幫忙分析, 或許可以在做選擇權交易之前看下分析報告, 讓GPT幫忙簡單整理買賣方建議這樣。

關於之前寫的選擇權估值模型的文章, 有興趣的可以也可以參考下:
[網站開發] 美股選擇權定價模型 - 新增隱含波動率計算凱利公式

做好的功能如下:


Norn-StockScreener投資網站: 

https://norn-stockscreener.zmcx16.moe/gpt-investing-assistant/

Github: 

https://github.com/zmcx16/Norn-StockScreener

https://github.com/zmcx16/Norn-Finance-API-Server

這個頁面的功能參數如下:

  1. Symbol: 美股選擇權合約的股票代號

  2. GPT Model Name: 選要使用的GPT的model name, 預設是目前CP值最高的gpt-4o, 如果選gpt-3.5-turbo的話產出的報告就會簡單不少, 另外也支援使用者自己輸入OpenAI其他支援的model, 不過不一定能用, 只有ChatGPT相關的model才能跑。

  3. OpenAI API Key: 考慮到自己的錢包, 有想使用的人得輸入自己的OpenAI API Key, 我想會有人擔心輸入了API Key會不會被我偷偷拿去用, 我說不會也拿不出證明, 所以真的有想用這功能的話, 建議申請5美元免洗帳號的API Key, 或是用自己帳號新產生的key, 用完就趕緊銷毀吧~  申請API Key可以參考這個文章: 如何免費申請ChatGPT (OpenAI) 的API Key

  4. Expriation Date: 選擇權合約到期日

  5. Strike Price: 選擇權合約履約價

  6. Call / Put Option: 選擇Call or Put合約

  7. Valuation Data: 選擇權估值模型參數選擇, 在使用GPT模型之前, 會先用自己做的估值模型跑估值結果, 使用者可以決定要不要讓GPT模型也參考這些估值結果, 目前總共有以下參數:
  8. 'Black Scholes Merton EWMA Historical Volatility', 'Monte Carlo EWMA Historical Volatility', 'Binomial Tree EWMA Historical Volatility', 'Kelly Criterion', 'Probability of Exercise of Option', 'Delta', 'Gamma', 'Vega', 'Theta', 'Rho'

使用以上參數輸入給GPT模型的Prompt範例如下, 其中大部分的資料都是從Norn-Finance-API-Server取得:

{{"model":"o1-preview","messages":[{"role":"user","content":"Please analyze the option contract for the company with the symbol DIS. Provide a detailed and comprehensive analysis, focusing on the risks—particularly the impact of the earnings date and ex-dividend date—and valuation for both the buyer and the seller. Your task is to thoroughly evaluate the data and generate a report in Markdown format (No need to wrap in code blocks). Here’s the data:\n```\n{\r\n  \"symbol\": \"DIS\",\r\n  \"currentDate\": \"2024-10-20\",\r\n  \"stockPrice\": 97.27999877929688,\r\n  \"stockExtraInfo\": {\r\n    \"earningsDate\": \"2024-11-14\",\r\n    \"exDividendDate\": \"2024-07-08\"\r\n  },\r\n  \"EWMA_historicalVolatility\": 0.18602714460634165,\r\n  \"contract\": {\r\n    \"lastTradeDate\": \"2024-10-18\",\r\n    \"strike\": 95.0,\r\n    \"lastPrice\": 2.95,\r\n    \"bid\": 2.91,\r\n    \"ask\": 2.99,\r\n    \"change\": -0.45000005,\r\n    \"percentChange\": -13.235294,\r\n    \"volume\": 2330,\r\n    \"openInterest\": 7064,\r\n    \"impliedVolatility\": 0.3794007373046875,\r\n    \"valuationData\": {\r\n      \"KellyCriterion_buy\": -10.09725610723297,\r\n      \"KellyCriterion_sell\": 0.8934698360970385,\r\n      \"KellyCriterion_MU_0_sell\": 0.8250604590273701,\r\n      \"KellyCriterion_MU_0_buy\": -5.0543039713639955,\r\n      \"KellyCriterion_IV_buy\": null,\r\n      \"KellyCriterion_IV_sell\": null,\r\n      \"exerciseProbability\": 0.33397,\r\n      \"delta\": -0.3079163039792361,\r\n      \"gamma\": 0.06899611538229457,\r\n      \"vega\": 0.09640010958844103,\r\n      \"theta\": -0.10826790796879611,\r\n      \"rho\": -0.024593911487068514,\r\n      \"Black Scholes Merton EWMA Historical Volatility\": -1.0,\r\n      \"Monte Carlo EWMA Historical Volatility\": -1.0,\r\n      \"Binomial Tree EWMA Historical Volatility\": 1.0371441540237885\r\n    },\r\n    \"expiryDate\": \"2024-11-15\",\r\n    \"optionType\": \"put\"\r\n  }\r\n}\n```"}]}}


至於結果就像上面demo圖看到的, 照慣例我直接Google翻譯頁面了, 比較好解釋XD:


上面的資料是程式使用yfinance從Yahoo財經取得的選擇權合約資料, 包含報價資料以及隱含波動率等等, 其中只有歷史波動率不是Yahoo財經給的, 是Norn-Finance-API-Server用歷史股價計算出來的。



上圖的凱利公式也是Norn-Finance-API-Server透過蒙地卡羅模擬計算出來, 可以看出該put交易用凱利公式分析對賣方有利(不過該公式只單純用歷史波動率做蒙地卡羅模擬未來的股價變化, 並沒有考慮到消息面, 財報公布日, 除權息等等, 只能當作參考不能只看這個參數是決定交易與否), 至於風險分析這邊感覺有些廢話, 除了行權機率也是透過程式估算以外, 其他的文字敘述基本上看合約報價就懂的意思差不多...。



分析結果該合約簡單總結對賣方有利, 其他的文字敘述一樣有些雞肋就是..., 另外來看看, 如果選擇權履約日在財報日之後, GPT會怎麼回覆吧, DIS下次財報日是11/14, 我們挑11/15到期, 行權價90元的迪士尼賣權合約看看: 



可以看出因為是價外合約+離目前股票落差不小, 所以行權機率低(7.34%), 凱利公式算出來也是對賣方略為有利(不過也只有0.98%, 跟不建議交易基本上也差不多了), 可是這些公式都是透過歷史波動率計算, 如果加上考慮財報日的影響, 基本上是完全不建議做賣方交易的, 而因為我們在GPT prompt有註明要考慮行權日以及除息日的風險, 所以有特別敘述賣方的風險, 算是有達到我想要的警告這樣。

這次的結果感覺沒有上次的公司分析整理報告好, 給的建議大多數都是看我原本程式的數據就能得到, 這塊我可能要再思考一下, 繼續改進prompt是否可以得到更有價值的建議...。


2024年10月8日 星期二

[網站開發] 新增GPT投資助手美股公司分析頁面 (Norn-StockScreener投資網站開發)


好久沒新頁面的靈感了, 以前是有想過用GPT幫忙給投資建議的idea, 不過測試了一下發現意義不大, 基本上給的分數或建議都沒有參考價值, 畢竟GPT的model資料大概都是一兩年前的, 所以真的問GPT給一間公司是否適合投資, 他能回答你的也只有根據那一兩年前的資料生成的建議, 有種garbage in garbage out的感覺, 後來就放棄這個想法了...。

最近則是想到, 我最常用GPT做的事是修英文文法, 效果也很不錯 (不過還是得人工校稿, 有時會修出不得了的東西出來...), 就想到GPT如果單純問問題, 他會用他的知識庫回答你, 但如果我把所有需要的參考資料都給GPT, 讓GPT幫我生成投資分析報告的話那是不是就有參考價值了呢? 

這樣GPT提供的功能就像修英文文法一樣, 靠的不是GPT資料庫內過時的公司財報資料, 而是只要GPT提供過去到現在都適用的分析公司&投資方法就好, 由我這邊負責提供最新的資料, 讓GPT幫我整理結果, 感覺這個功能就有點價值~。

做好的功能如下:


上面跑的是gpt-4o model, 另外也有試著跑最新版的ol-preview model, 看起來功能真的更強:





Norn-StockScreener投資網站: https://norn-stockscreener.zmcx16.moe/gpt-investing-assistant/

Github: https://github.com/zmcx16/Norn-StockScreener


這個頁面的功能參數如下:

  1. Symbol: 美股股票代號

  2. GPT Model Name: 選要使用的GPT的model name, 預設是目前功能最強的gpt-4o, 如果選gpt-3.5-turbo的話產出的報告就會簡單不少, 另外也支援使用者自己輸入OpenAI其他支援的model, 不過不一定能用, 只有ChatGPT相關的model才能跑。

  3. OpenAI API Key: 考慮到自己的錢包, 有想使用的人得輸入自己的OpenAI API Key, 我想會有人擔心輸入了API Key會不會被我偷偷拿去用, 我說不會也拿不出證明, 所以真的有想用這功能的話, 建議申請5美元免洗帳號的API Key, 或是用自己帳號新產生的key, 用完就趕緊銷毀吧~  申請API Key可以參考這個文章: 如何免費申請ChatGPT (OpenAI) 的API Key

  4. Key Statistics: 你想讓GPT分析的公司基本資料, 有選到的參數會從我的DB直接撈出數據餵給GPT, 目前提供的Key Statistics如下:
  5. 'P/E', 'EPS (ttm)', 'Insider Ownership', 'Shs Outstand', 'Perf Week', 'Market Cap', 'Forward P/E', 'Insider Transactions', 'Shs Float', 'Perf Month', 'PEG', 'EPS next Q', 'Institutional Ownership', 'Short Float', 'Perf Quarter', 'P/S', 'EPS this Y', 'Institutional Transactions', 'Short Ratio', 'Perf Half Y', 'Book/sh', 'P/B', 'EPS next Y_%', 'ROA', 'Perf Year', 'Cash/sh', 'P/C', 'EPS next 5Y', 'ROE', 'Perf YTD', 'P/FCF', 'EPS past 5Y', 'ROI', '52W High', 'Beta', 'Quick Ratio', 'Sales past 5Y', 'Gross Margin', '52W Low', 'ATR (14)', 'Current Ratio', 'EPS Y/Y TTM', 'Oper. Margin', 'RSI (14)', 'Debt/Eq', 'Sales Y/Y TTM', 'Profit Margin', 'LT Debt/Eq', 'EPS Q/Q', 'Rel Volume', 'Sales Q/Q', 'Price', 'SMA20', 'SMA50', 'SMA200', 'Dividend %', 'Quarterly EPS Data'

  6. Investment Gurus: 可以輸入你想讓GPT參考的投資大師的建議, 不過GPT畢竟是生成式模型, 參考大師資料生成的建議有幾分胡謅幾分可信, 就自己判斷了XD  目前提供的投資大師清單如下:
  7. 'Warren Buffett', 'Peter Lynch', 'Ray Dalio', 'Jim Simons', 'Philip Fisher', 'George Soros', 'Carl Icahn', 'Bill Ackman', 'David Tepper', 'Michael Burry', 'Mohnish Pabrai'

    另外也可以讓使用者追加輸入自己的投資大師名單, 像是肯恩費雪或查理蒙格等等...。

使用以上參數輸入給GPT模型的Prompt範例如下:

{ "model":"gpt-4o", "messages":[ { "role":"user", "content":"Analyze the following stock data for company with the HPE. Focus on key areas such as P/E, EPS (ttm), Insider Own, Shs Outstand, Perf Week, Market Cap, Forward P/E, Insider Trans, Shs Float, Perf Month, PEG, EPS next Q, Inst Own, Short Float, Perf Quarter, P/S, EPS this Y, Inst Trans, Short Ratio, Perf Half Y, Book/sh, P/B, EPS next Y_%, ROA, Perf Year, Cash/sh, P/C, EPS next 5Y, ROE, Perf YTD, P/FCF, EPS past 5Y, ROI, 52W High, Beta, Quick Ratio, Sales past 5Y, Gross Margin, 52W Low, ATR (14), Current Ratio, EPS Y/Y TTM, Oper. Margin, RSI (14), Debt/Eq, Sales Y/Y TTM, Profit Margin, LT Debt/Eq, EPS Q/Q, Rel Volume, Sales Q/Q, Price, SMA20, SMA50, SMA200, Dividend %, eps_q_data and provide an overall analysis of the stock. Here is the data:\n```\n{\r\n \"P/E\": 14.62,\r\n \"EPS (ttm)\": 1.4,\r\n \"Insider Own\": 0,\r\n \"Shs Outstand\": 1300000000.0,\r\n \"Perf Week\": 0.0134,\r\n \"Market Cap\": 26510000000.0,\r\n \"Forward P/E\": 9.65,\r\n \"Insider Trans\": -0.1258,\r\n \"Shs Float\": 1290000000.0,\r\n \"Perf Month\": 0.157,\r\n \"PEG\": 4.54,\r\n \"EPS next Q\": 0.56,\r\n \"Inst Own\": 0.8270000000000001,\r\n \"Short Float\": 0.031000000000000003,\r\n \"Perf Quarter\": -0.023,\r\n \"P/S\": 0.92,\r\n \"EPS this Y\": -0.0889,\r\n \"Inst Trans\": -0.0075,\r\n \"Short Ratio\": 2.62,\r\n \"Perf Half Y\": 0.13390000000000002,\r\n \"Book/sh\": 17.0,\r\n \"P/B\": 1.2,\r\n \"EPS next Y_%\": 0.07980000000000001,\r\n \"ROA\": 0.0316,\r\n \"Perf Year\": 0.1999,\r\n \"Cash/sh\": 3.01,\r\n \"P/C\": 6.79,\r\n \"EPS next 5Y\": 0.032,\r\n \"ROE\": 0.08689999999999999,\r\n \"Perf YTD\": 0.20199999999999999,\r\n \"P/FCF\": 9.74,\r\n \"EPS past 5Y\": 0.0461,\r\n \"ROI\": 0.0618,\r\n \"52W High\": -0.10560000000000001,\r\n \"Beta\": 1.2,\r\n \"Quick Ratio\": 0.61,\r\n \"Sales past 5Y\": -0.0106,\r\n \"Gross Margin\": 0.3271,\r\n \"52W Low\": 0.41100000000000003,\r\n \"ATR (14)\": 0.6,\r\n \"Current Ratio\": 0.94,\r\n \"EPS Y/Y TTM\": 0.7161,\r\n \"Oper. Margin\": 0.0751,\r\n \"RSI (14)\": 63.4,\r\n \"Debt/Eq\": 0.53,\r\n \"Sales Y/Y TTM\": -0.0194,\r\n \"Profit Margin\": 0.0641,\r\n \"LT Debt/Eq\": 0.36,\r\n \"EPS Q/Q\": 0.0902,\r\n \"Rel Volume\": 0.46,\r\n \"Sales Q/Q\": 0.09330000000000001,\r\n \"Price\": 20.41,\r\n \"SMA20\": 0.09630000000000001,\r\n \"SMA50\": 0.09910000000000001,\r\n \"SMA200\": 0.1375,\r\n \"Dividend %\": 0.0255,\r\n \"Quarterly EPS Data\": {\r\n \"2024-07-31\": 0.39,\r\n \"2024-04-30\": 0.24,\r\n \"2024-01-31\": 0.3,\r\n \"2023-10-31\": 0.5,\r\n \"2023-07-31\": 0.36\r\n }\r\n}\n```" }, { "role":"system", "content":"Act as an Investors Group consisting of expert gurus such as Warren Buffet, Peter Lynch, Benjamin Graham. Your task is to analyze the stock data thoroughly and present a comprehensive analysis report in a visually appealing Markdown format (no need code block wrapped)." } ] }

至於結果就像上面demo圖看到的, DIS的分析資料整理得還蠻有條有理的, 前半段會根據我提供的數據資料做文字化摘要說明, 解讀數字代表的意義 (我直接Google翻譯頁面了, 比較好解釋XD):



後面則是輸入的投資大師意見跟總結, 感覺真有點像這幾位大師會說的話, 最後結論也總結得蠻有道理的, 不過老話一句畢竟這是生成式AI, 亂寫小說的成分有多少真的不好說XD


最後來看看最近宣告破產的Big Lots的分析報告吧:


這次沒有投資大師的個別建議了, 不過看最後的總結也很符合提供的數據, 投資風險很高, 透過GPT提供的投資建議值不值得參考不好說, 不過解讀數據方面我覺得做得還是不錯的, 個人是覺得有使用的價值。

在來的規劃打算繼續朝這方向開發, 提供更多Key Statistics資料給GPT幫忙做公司個股分析, 並且也想做其他的功能, 像是產業分析, 以及同產業的個股比較排序等等, 就慢慢一步一步做吧~。