[心得] 蒙地卡羅+AI評估投資組合再平衡

看板Stock (股票)作者 (zmcx16)時間4小時前 (2025/09/23 18:46), 編輯推噓10(10013)
留言23則, 13人參與, 1小時前最新討論串1/1
部落格文章: https://blog.zmcx16.moe/2025/09/investment-think-tank-portfolio.html 最近AI Agent非常的熱門, 尤其是Copilot Agent, 讓AI幫忙寫UT或Script真的超方便, 這邊就想說能不能用AI Agent也幫忙做一些投資工具。目前第一個想到能做的, 就是資產 配置的再平衡, 以及除了再平衡後怎麼再更進一步找出更好的資產配置, 想到的步驟如 下: 1. 從劵商下載自己的portfolio data 2. 跑一些formula / rule base的資產配置優化演算法 3. 透過AI model根據原始的portfolio data以及(2) 計算後的基本分析報告, 以及AI model本身的knowledge, 產生完整的資產配置建議報告 4. 可以基於目前的資產配置建議報告, 再度調整portfolio data, 繼續跑(2)~(3), 迭代 比較找出更佳的資產配置建議報告 (手動或AI Agent自動運行) 目前先寫出一版的程式如下: https://github.com/zmcx16/investment-think-tank/blob/master/portfolio_analysis/README.md 要用這個Tool首先得先準備自己的portfolio data, 我自己美股劵商是用IB盈透, portfolio data可以透過Performance & Report的Flex Queries手動下載取得, 或是生成 一個token打API直接下載: https://github.com/zmcx16/investment-think-tank/blob/master/portfolio_analysis/data/interactivebrokers/download_flex_query_reports.py https://i.postimg.cc/zDkVKqB8/image-14.png
之後把下載的xml檔案轉成JSON檔, AI model處理XML檔案很容易壞檔, 轉成JSON或CSV對 AI model之後要處理出錯的機率會比較低。 https://github.com/zmcx16/investment-think-tank/blob/master/portfolio_analysis/data/interactivebrokers/convert_flex_query_reports.py 之後就可以執行main.py開始跑資產配置分析, 程式會下載portfolio內的個股歷史資料, 並根據過去歷史資料跑蒙地卡羅模擬, 計算最佳的資產配置比例。 程式跑完會產生最佳 的個股權重: https://i.postimg.cc/PxWN6jQb/image-15.png
https://i.postimg.cc/fLnJjLmT/image-16.png
跑完後程式會呼叫Gemini CLI, 讓Gemini根據原始的portfolio data以及上面的蒙地卡羅 模擬後的資料, 產生全面性的資產配置報告: https://gist.github.com/zmcx16/b1b789b2374d49c701f5e7e7b6087e3d 上面做法是Non-Interactive mode, 之後如果想繼續優化投資組合, 就需要自己手動改 portfolio data, 例如將剩餘所有現金都買QQQ, 再做一次分析模擬, 看預期回報跟夏普 比率是否更高, AI分析後的結果是否比調整前佳, 這段就會是不少手工活...。 另一個做法則是透過AI Agent的Interactive mode, 讓AI幫我們做上述的事情, 執行 main.py --interactive, 程式跑完蒙地卡羅模擬計算完最佳的資產配置比例之後, 會呼 叫Gemini CLI with Interactive mode, 之後就可以透過輸入command的形式讓AI Agent 幫你做事, 例如輸入: "麻煩根據剛剛portfolio_analysis main.py執行後產生的portfolio_data.json以及 base_report data, 提供資產配置分析報告並輸出至summary_report.md" Gemini CLI會讀取portfolio_data.json以及base_report data, 並產生對應的分析報告 。 https://i.postimg.cc/kGwGmvZB/image-17.png
https://gist.github.com/zmcx16/085f99f338640dff3b6183b0a059fc9f 之後再輸入下一個Command: "將現金部位全數投入QQQ並update portfolio_data.json, 運行portfolio_analysis main.py並重新評估投資組合是否優於之前的資產配置並輸出至summary_report.md" 執行結果: https://i.postimg.cc/Fzhz8BTM/image-18.png
https://gist.github.com/zmcx16/f8e9d8a7a6bf53c0352c03deb5985520 可以看到加入QQQ之後, 預期年化報酬增加從13.50%增加至16.80%, 且夏普比率從 0.456 提升至 0.582, 不過基於QQQ在投資組合的占比過高, 所以AI的分析報告還是建議減少QQQ 的資產占比, 降低過度集中的風險。 算是同時基於公式的計算以及普遍知識上的建議提 供全面性分析報告。 之後也可以繼續透過下Command給AI Agent的方式繼續優化資產配置 。 雖然互動模式看起來蠻好用的, 不過自己目前用起來跑Gemini CLI感覺很不穩定, 可能是 我沒有做data clean的關係所以portfolio data有一堆沒用的data造成, 另外如何讓 Non-Interactive mode有能力自動做更多task自動迭代優化分析報告也得研究一下, 這些 就放到backlog有空再慢慢做吧...。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.200.34 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Stock/M.1758624386.A.C14.html

09/23 18:51, 4小時前 , 1F
我都用if( oklo ) all_in();
09/23 18:51, 1F

09/23 18:52, 4小時前 , 2F
謝謝
09/23 18:52, 2F

09/23 18:53, 4小時前 , 3F
if(2330) all_in();
09/23 18:53, 3F

09/23 18:53, 4小時前 , 4F
我學1樓
09/23 18:53, 4F

09/23 18:53, 4小時前 , 5F
拷貝仔
09/23 18:53, 5F

09/23 18:53, 4小時前 , 6F
只能當作玩具
09/23 18:53, 6F

09/23 18:53, 4小時前 , 7F
除非妳只玩波動不大的權值
09/23 18:53, 7F

09/23 18:54, 4小時前 , 8F
09/23 18:54, 8F

09/23 18:54, 4小時前 , 9F
While(2330) all_in();
09/23 18:54, 9F

09/23 18:55, 4小時前 , 10F
起漲點用蒙地卡羅下去
09/23 18:55, 10F

09/23 18:55, 4小時前 , 11F
只會給很低的權重吧
09/23 18:55, 11F

09/23 18:55, 4小時前 , 12F
沒有預測短期未來的能力
09/23 18:55, 12F

09/23 18:55, 4小時前 , 13F
至多只能做風險控制
09/23 18:55, 13F

09/23 18:55, 4小時前 , 14F
不適用股版這種大多數人追求五年發財的人
09/23 18:55, 14F

09/23 18:59, 4小時前 , 15F
If tsla: allin()
09/23 18:59, 15F

09/23 19:02, 4小時前 , 16F
感謝好心人
09/23 19:02, 16F

09/23 19:02, 4小時前 , 17F
User guide 太冗雜 我跳過
09/23 19:02, 17F

09/23 19:29, 3小時前 , 18F
你怎麼知道沒有 稍微改一改就有了
09/23 19:29, 18F

09/23 19:33, 3小時前 , 19F
會不會繞一大圈最後還是買大盤…
09/23 19:33, 19F

09/23 20:27, 3小時前 , 20F
推推
09/23 20:27, 20F

09/23 20:47, 2小時前 , 21F
為什麼要從券商再拉資產,像portfolio visual izer
09/23 20:47, 21F

09/23 20:47, 2小時前 , 22F
那樣自己輸入如何?
09/23 20:47, 22F

09/23 22:07, 1小時前 , 23F
09/23 22:07, 23F
文章代碼(AID): #1eqdg2mK (Stock)
文章代碼(AID): #1eqdg2mK (Stock)