作者zmcx16 (zmcx16)
看板Stock
标题[心得] 蒙地卡罗+AI评估投资组合再平衡
时间Tue Sep 23 18:46:17 2025
部落格文章:
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://webptt.com/cn.aspx?n=bbs/Stock/M.1758624386.A.C14.html
1F:推 gino0717 : 我都用if( oklo ) all_in(); 09/23 18:51
2F:推 sdbb : 谢谢 09/23 18:52
3F:推 Solyo : if(2330) all_in(); 09/23 18:53
4F:→ Solyo : 我学1楼 09/23 18:53
5F:→ Solyo : 拷贝仔 09/23 18:53
6F:推 a2007535 : 只能当作玩具 09/23 18:53
7F:→ a2007535 : 除非你只玩波动不大的权值 09/23 18:53
8F:推 vux : 赞 09/23 18:54
9F:→ sdbb : While(2330) all_in(); 09/23 18:54
10F:→ a2007535 : 起涨点用蒙地卡罗下去 09/23 18:55
11F:→ a2007535 : 只会给很低的权重吧 09/23 18:55
12F:→ a2007535 : 没有预测短期未来的能力 09/23 18:55
13F:→ a2007535 : 至多只能做风险控制 09/23 18:55
14F:→ a2007535 : 不适用股版这种大多数人追求五年发财的人 09/23 18:55
15F:推 cowbadma5566: If tsla: allin() 09/23 18:59
16F:推 mune : 感谢好心人 09/23 19:02
17F:→ ken52011219 : User guide 太冗杂 我跳过 09/23 19:02
18F:→ yunf : 你怎麽知道没有 稍微改一改就有了 09/23 19:29
19F:→ gameboy163 : 会不会绕一大圈最後还是买大盘… 09/23 19:33
20F:推 keepgoingKH : 推推 09/23 20:27
21F:推 hensel : 为什麽要从券商再拉资产,像portfolio visual izer 09/23 20:47
22F:→ hensel : 那样自己输入如何? 09/23 20:47
主要是自己常交易选择权, 直接拉portfolio可以让AI连选择权部位一起分析, 另外可以
结合API自动下载portfolio & 定期产报告
23F:推 meulen : 推 09/23 22:07
24F:推 staytuned74 : 小YP与市场异象投资人已经做类似 09/23 22:58
25F:推 somesomeone : 毕业後就没看过蒙地卡罗这4个字啦 09/23 22:58
※ 编辑: zmcx16 (123.192.200.34 台湾), 09/23/2025 23:01:19
26F:推 staytuned74 : 热心还是推 09/23 23:00
27F:推 likeyousmile: 推 09/24 12:37