从零跑通这个GitHub 55k星项目,到底能学到什么?

一、为什么我非要试试这个项目

GitHub Trending 上突然冒出一个叫 ai-hedge-fund 的项目。点进去一看:54.9k stars,14 位传奇投资大师 + 5 位专业分析师,全部封装成 AI Agent,还开源。

这让我想起了自己亏掉的那只新能源股票——当时如果能听听巴菲特怎么说、木头姐怎么看,也许结果会不一样。这个项目似乎给了普通人一个「召唤大师」的机会。

于是,我决定花一个周末,把它跑起来,真实地感受一遍。

本文所有操作均在 macOS + Python 3.11 环境下完成,无任何真实资金交易。

二、使用过程:从克隆到第一次决策

2.1 安装与配置(≈15 分钟)

项目安装不算复杂,但有几个关键坑需要留意:

# 1. 克隆项目
git clone https://github.com/virattt/ai-hedge-fund.git
cd ai-hedge-fund

# 2. 后端安装(Python)
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 3. 前端安装(可选,建议装)
cd ../frontend
npm install

环境变量是第一个坑:项目需要 OpenAI / Anthropic / DeepSeek 等 API Key。我只申请了 DeepSeek(便宜且国内友好),在 backend/.env 中写入:

LLM_PROVIDER=deepseek
DEEPSEEK_API_KEY=sk-xxxxx

如果你完全不想花钱,可以用 --ollama 跑本地模型,但推理速度会慢很多。

2.2 跑通第一个回测(≈3 分钟)

第一次运行,我选了最简单的单股票回测模式,测试标的:NVDA(英伟达),时间跨度 2026-03-01 到 2026-03-31。

backend 目录下执行:

python main.py --ticker NVDA --start-date 2026-03-01 --end-date 2026-03-31

终端开始疯狂输出日志——14 位大师 Agent 逐一被唤醒

[Agent: Warren Buffett] 开始分析 NVDA...
  估值:PE 偏高,但护城河极宽(CUDA生态),建议持有。
[Agent: Cathie Wood] 开始分析 NVDA...
  认为 AI 芯片需求爆发,未来 5 年 CAGR 超 30%,强烈买入。
[Agent: Michael Burry] 开始分析 NVDA...
  发现机构持仓过度集中,存在拥挤交易风险,建议减仓。
[Agent: Nassim Taleb] 开始分析 NVDA...
  警告供应链地缘政治风险,建议买入价外看跌期权对冲。
...
[Portfolio Manager] 汇总所有信号:
  买入: 6 票 | 持有: 8 票 | 卖出: 0 票
  最终决策:HOLD(持有)
  建议仓位:当前持仓的 15%

整个过程大约 2 分半钟,不用写一行代码,就把一整套多 Agent 投资决策流程跑通了。

2.3 可视化界面:拖拽一个投资委员会

如果嫌终端不够直观,可以启动前端:

cd frontend
npm run dev

打开 http://localhost:5173,你会看到一个流程图编辑器(React Flow)。每个 Agent 都是一个可拖拽的节点,你可以:

  • 把「巴菲特」和「芒格」串联起来,让芒格复核巴菲特的结论;
  • 插入「风险经理」节点,强制每个决策必须经过风控;
  • 甚至禁用木头姐(如果你不看好成长股)。

我试着搭建了一个「保守派委员会」:格雷厄姆(估值)+ 巴菲特(护城河)+ 塔勒布(风险),然后回测可口可乐(KO)。结果 Portfolio Manager 给出的「买入」置信度只有 42%——确实很保守。

2.4 跑通多股票 + 实盘模拟(更接近真实)

项目还支持一次性分析多只股票(通过 --tickers 参数),以及接入实时数据(需配置 yfinance 或 Alpha Vantage)。

我试了一个小组合:AAPL, MSFT, TSLA, META,回测过去 6 个月。最终 Portfolio Manager 给出的结论是增持 MSFT、减持 TSLA。虽然这只是一个模拟,但看着 19 个 Agent 一步步推理出这个结论的过程,比直接看 K 线图有意思多了。


三、真实感受:三个惊喜 + 两个遗憾

✅ 惊喜 1:Agent 的「思考过程」比结论更值钱

过去我用过的 AI 投资工具,绝大多数是黑盒——输入股票代码,输出「买入/卖出」。但这个项目会把每一位大师的判断依据全部打印出来。

比如巴菲特 Agent 对 NVDA 的完整推理(简化版):

  1. ROE 连续 5 年 > 20% ✅
  2. 毛利率 > 60%,定价权强 ✅
  3. PE 高于历史 80% 分位 ⚠️
  4. 管理层持股比例充足 ✅
    最终:持有,等待估值回归

你可以像审阅实习生作业一样去检查每个 Agent 的逻辑。这种透明度,让学习投资知识的过程变得异常高效。

✅ 惊喜 2:跑本地模型也能用,成本极低

我试了 --ollama 模式(用的 llama3.2 量化版),单次分析耗时从 2 分钟变成了 8 分钟,但结论基本一致。这意味着完全不花一分钱 API 费用,就能在家里跑一个「虚拟投资委员会」。

对于那些只想学习多 Agent 架构、不想绑定付费 API 的人来说,这是个巨大的加分项。

✅ 惊喜 3:回测模块出乎意料地严谨

项目内置了 backtest.py,不仅记录每次决策的信号,还会计算:

  • 累计收益率(与买入持有对比)
  • 夏普比率、最大回撤
  • 每笔交易的胜率

我回测了巴菲特 Agent 单独决策 vs. 全体 Agent 投票决策。结果显示:全体投票的夏普比率更高,但最大回撤也更大(因为塔勒布 Agent 会引入对冲策略,在下跌市场中反而增加波动)。这种反直觉的结果,只有跑过回测才能发现。

❌ 遗憾 1:无法处理「非财务信息」

所有 Agent 的输入都来自公开财务数据、技术指标和新闻情绪。如果你问它:「某公司 CEO 今天发了一条奇怪的推文,该怎么办?」——它做不到。项目目前没有接入实时社交媒体流或非结构化事件数据。

❌ 遗憾 2:容易让人「过度信任」

这是一个心理层面的遗憾。当 14 位大师同时给出结论时,你很难不产生「这一定是对的」的错觉。项目作者已经在 README 里写了三次「仅供教育研究」,但我还是看到有人问「可以用真钱吗?」——这很危险。


四、一点不成熟的建议

如果你也想玩这个项目,我的建议是:

  1. 先别想赚钱。把它当成一个「投资哲学模拟器」来用,重点看每个 Agent 的推理逻辑。
  2. 从单股票 + 短回测开始。比如 --ticker KO --start-date 2026-03-01 --end-date 2026-03-01,跑通了再玩复杂的。
  3. 一定要打开可视化界面。当你拖拽着把巴菲特和塔勒布连在一起时,那种「设计自己的投资策略」的感觉,是终端无法替代的。
  4. 接受不同 Agent 之间的冲突。巴菲特说买,木头姐说卖,这很正常——真实世界里基金经理们也是吵架的。PM Agent 会帮你做最终裁决。

写在最后

跑完这个项目的那天晚上,我没有去开任何模拟交易。反而花了两个小时,仔细读了格雷厄姆的《聪明的投资者》——因为巴菲特 Agent 在分析时引用了书里的一句话:「市场短期是投票机,长期是称重机。」

也许,这才是 AI Hedge Fund 最大的价值:它不是在帮你赚钱,而是在逼你去理解,那些真正赚到钱的人,到底是怎么想的。


项目地址:https://github.com/virattt/ai-hedge-fund

⚠️ 本文仅为技术体验分享,不构成任何投资建议。实盘交易有风险,请自行承担后果。

前言

上篇文章中提到的OpenWebUI它仅提供网页端使用方式(无独立 APP)。本文将介绍如何通过桌面客户端连接部署在本地的大模型。

关于OpenWebUI的基本使用和开发环境搭建,可参考文章《Ollama+OpenWebUI 最佳组合:本地大模型可视化交互方案》

若需通过OpenWebUI手机网页端连接本地大模型,可参考文章《不花一分钱!把本地大模型装进手机,全家共享+权限管控全攻略》

若需通过手机APP连接本地大模型,可参考文章《手机直连本地大模型!不用云服务、不花一分钱,全家都能用》

ChatWise

ChatWiseOpenWebUI类似,均为AI聊天交互工具,不同的是ChatWise是一款桌面客户端,提供图形化操作界面。ChatWise基于Tauri框架开发,属于桌面图形化应用,无法在无图形化界面的系统中运行。

ChatWise的高级功能需付费使用,基础功能则完全免费,满足日常连接本地大模型的需求已足够。

ChatWise官网

安装ChatWise

下载Windows版本的安装包

访问ChatWise官网,点击“Download 26.4.3”按钮下载安装包(注:ChatWise为桌面图形化应用,无图形化界面的系统无法运行)。本文以Windows系统为例,下载对应版本的安装包并完成安装。

下载Windows版本的安装包

安装ChatWise

安装包下载完成后,右键点击安装包文件,选择“以管理员身份运行”。

右键以管理员身份运行

点击更多信息进行安装

点击仍要运行

点击下一步进行安装

点击安装

完成安装

使用ChatWise

选择本地大模型

使用ChatWise跟本地大模型聊天

设置大模型的参数

设置大模型的参数

常用功能

常用功能

配置MCP

点击界面右下角的设置按钮,还可配置MCP功能。

配置MCP

配置常用提示词

配置常用的提示词

点击命令中心

选择常用提示词

输入特殊要求

输入特殊要求发送问题

特殊要求示例

其他类似ChatWise的软件

ChatWise外,同类工具还有Cherry StudioAnythingLLM

浏览器插件类可选择Page Assistollama-client

若以上工具均无法满足需求,也可借助gradio自行开发专属的WebUI界面。

gradio工具

面向对象包括封装、继承、组合、多态,其中最不好理解,也最强悍的就是多态。可以说掌握了多态就掌握了面向对象以及设计模式的精髓。

但是 java 里面的多态实现太过于严苛,以致于其他语言都无法完全模拟。请看下面的代码,用其他语言实现的时候总难以达到类似效果。

/*
多态:即同一个行为具有多个不同表现形式或形态的能力。
表现形式为,子类重写父类方法,实现类实现接口方法,子类重写抽象类方法等。
多态三个必要条件:继承、重写、父类引用指向子类对象。多态有效消除类型之间的耦合,并提供灵活的可扩展方案。
本例子简单清晰明了的 Java 多态,能看懂这个例子就懂了什么是多态。
*/

// 父类 A
class A {
    public String show(D object) {
        return ("A and D");
    }

    public String show(A object) {
        return ("A and A");
    }

    // 默认注释掉。可开关注释测试下
    // public String show(B object) {
    // return ("A and B");
    // }
}

// 子类 B
class B extends A {
    public String show(B object) {
        return ("B and B");
    }

    public String show(A object) {
        return ("B and A");
    }
}

// 孙子类 C
class C extends B {
}

// 孙子类 D
class D extends B {
}

// 测试验证
public class PolymorphismSimple {
    public static void main(String[] args) {
        // 父类声明自己
        A a = new A();
        // 父类声明子类
        A ab = new B();
        // 子类声明自己
        B b = new B();
        C c = new C();
        D d = new D();

        // 1) A and A 。b 的类型是 B ,也是 B 的实例,A 里没有 show(B)方法,但有 show(A)方法。B 的父类是 A ,因此定位到 A.show(A)。
        System.out.println("1) " + a.show(b));

        // 2) A and A 。c 的类型是 C ,也是 C 的实例,C 继承 B ,B 继承 A 。A 里没有 show(C)方法,也没有 show(B)方法,最后指向 A.show(A)。
        System.out.println("2) " + a.show(c));

        // 3) A and D, d 的类型是 D ,也是 D 的实例,D 继承 B ,B 继承 A 。A 里有 show(D)方法,直接定位到 A.show(D)。
        System.out.println("3) " + a.show(d));

        // 4) B and A, ab 是 B 的实例,但用 A 声明,即向上转型得到的类型是 A ,运行时才能确定具体该调用哪个方法。
        // ab 是 B 的实例对象,但引用类型是 A 。类型是在编译时确定,因此从类型开始定位方法。
        // A 类中没有 show(B)方法,但有 show(A)方法,因为 A 是 B 的父类,ab 也是 A 的实例,于是定位到 A.show(A)方法。
        // 由于 B 是 A 的子类,且 B 重写了 A 的 show(A),A 的方法被覆盖了,于是定位到 B.show(A),这就是动态绑定。
        // 虽然 B 中有 show(B)方法,但是因为 ab 的类型是 A ,编译时根据类型定位到 A 的方法,而不是 B 。

        // 以下几种可开关打开/注释代码测试下。
        // -
        // 若 A 里有 show(A)和 show(B),B 里有 show(B)有 show(A),则编译时关联到 A.show(B),因 B 覆盖了 A.show(B),动态绑定到 B.show(B)。
        // -
        // 若 A 里有 show(A)和 show(B),B 里无 show(B)有 show(A),则编译时关联到 A.show(B),因 B 无覆盖,则直接调用 A.show(B)。
        // -
        // 若 A 里有 show(A)无 show(B),B 里无 show(B)有 show(A),则编译时关联到 A.show(A),因 B 覆盖了 A.show(A),动态绑定到 B.show(A)。
        // -
        // 若 A 里有 show(A)无 show(B),B 里无 show(A)有 show(B),则编译时关联到 A.show(A),因 B 无覆盖,则直接调用 A.show(A)。
        // 查找顺序为:编译时根据引用类型确定所属类 -> 根据重载参数类型定位(类型按子->父->祖逐级往上查找)到类的具体方法(包括继承的方法) ->
        // 运行时实例对象覆盖(覆盖只有子->父一层)了引用类型的同名方法 -> 定位到实例对象的方法。
        System.out.println("4) " + ab.show(b));

        // 5) B and A 。ab 是 B 的实例,类型是 A 。从 A 类没找到 show(C)方法,也没找到 A.show(B)方法,找到 A.show(A)方法。A.show(A)被 B.show(A)覆盖,因此调用 B.show(A)。
        System.out.println("5) " + ab.show(c));

        // 6) A and D 。A 里面有 show(D)的方法,直接定位到。
        System.out.println("6) " + ab.show(d));

        // 7) B and B 。B 里面有 show(B)的方法,直接定位到。
        System.out.println("7) " + b.show(b));

        // 8) B and B 。B 没有 show(c)方法,但有 show(B)方法。C 继承自 B ,父类型是 B ,因此调用 B.show(B)。
        System.out.println("8) " + b.show(c));

        // 9) A and D 。B 中没有 show(D)方法,B 继承 A ,A 里有 show(D), 故调用 A.show(D)方法。
        System.out.println("9) " + b.show(d));

        // 10) B and A 。父类声明子类,存在向上转型。A 里有 show(A),被 B.show(A)覆盖了,因此定位到 B.show(A)。
        System.out.println("10) " + ab.show(a));

    }
}

/**
 * 测试结果
 * 1) A and A
 * 2) A and A
 * 3) A and D
 * 4) B and A
 * 5) B and A
 * 6) A and D
 * 7) B and B
 * 8) B and B
 * 9) A and D
 * 10) B and A
 */

其他语言模拟实现: https://github.com/microwind/design-patterns/tree/main/programming-paradigm/object-oriented-programming/polymorphism

.net >> java/ webpack >> vite(顺带着)

大方向是 springboot/人大金仓(postgresql)

主要是业务层面:

ORM/权限控制/轻量 OA/多租户(可能还涉及业务定制) 都有什么选项?

之前了解过 renren ,看过代码感觉质量一般,而且是 MySQL native 的,有点负担

2026 年当下,还需不需要找此类框架,还是直接 Vibe coding ?

如果是 vibe coding ,也要有个参考的架构,我水平有限问问大家

————————————————————————

关于前端,目前心仪 TDesign ,有没有生产深度用过的 V 友,有没有坑?

最近真是被甲方的漏洞扫描整坏了,要求 0 风险
Header Manipulation 、Path Manipulation 、Often Misused: File Upload 这些问题整改了五六轮了,依旧不通过,有啥比较好的方案吗

由于 ai agent 的缘故,项目不得不迁移到 wsl 内部,但是迁移到 wsl 后问题实在太多了,解决一个又来一个,导致不太有信心使用,有没有好点的解决方案?

问题 1:
使用 intellij idea 启动 java 程序端口占用问题( jmx ),在 wsl 中没有找到到 jmx 占用的端口,但是又说占用了,不知道什么原因,直接暴力关闭 jmx ,解决办法:关闭 jmx

问题 2:
在 wsl 中启动本地端口启动 8888 ,localhost 能访问,局域网不能访问,原因是 wsl 防火墙问题,解决办法:使用 powershell 管理员执行命令

Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

问题 3:
程序终于启动起来了,结果无法使用 java debug 动态更改代码,也无法进入断点,jrebel 也无法使用。
原因可能是:

java.lang.IllegalAccessException: Class com.intellij.spring.debugger.rt.com.intellij.spring.debugger.rt.SpringBeanDefinitionLoader can not access a member of class org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition with modifiers "public"
	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
	at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
	at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
	at java.lang.reflect.Method.invoke(Method.java:491)
	at com.intellij.spring.debugger.rt.com.intellij.spring.debugger.rt.SpringBeanDefinitionLoader.getAnnotationMetadataClassName(SpringBeanDefinitionLoader.java:182)
	at com.intellij.spring.debugger.rt.com.intellij.spring.debugger.rt.SpringBeanDefinitionLoader.getBeanClassName(SpringBeanDefinitionLoader.java:121)
	at com.intellij.spring.debugger.rt.com.intellij.spring.debugger.rt.SpringBeanDefinitionLoader.getAllBeanDefinitions(SpringBeanDefinitionLoader.java:40)
	at org.springframework.context.event.ContextRefreshedEvent.<init>(ContextRefreshedEvent.java:37)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)

这个到目前为止还没有解决。

综上所述,wsl 开发 java 程序实在是太难了,解决一个又来一个,上面的问题大家有什么解决方法吗?

很奇怪啊,我问 AI 的话,它总是说给变量加类型注解更好,说什么现代 Python 大型项目都这样做,Python 官方也推荐,但是我让它推荐几个项目,我去看源码,没有任何一个开源项目对变量写了类型注解,而且 AI 的代码也不会有对变量的类型注解。但实际上根本没有任何项目这样做,至少我找不到。

已知如下 python 代码文件(已经是全部内容):

def foo():
    print("start")
    xxxxxx
    print("end")
if __name__ == "__main__":   
    print("1111")  
    foo()
    print("2222")
问题:请将 xxxxx 替换为一行 python 代码,使这个 python 文件执行后最终输出只有 1111 和 2222
替换代码要求:只能有一个语句,只有一行;多个语句组合的不行( import 也算一个语句,因此类似 import sys; sys.xxx 的不行)

引申问题:上述替换代码要求放宽为“允许引入自带库并允许多条语句”,是否还有别的方案?

爱折腾的大伙都知道,ALLinONE 软路由一旦发生崩溃,便会造成全家断网(ALLinBOOM)。

解决这一问题的思路在于,把路由功能与扩展功能进行解耦处理,也就是采用“主路由 + 旁路由”这一架构。在常见的旁路由方案当中,要么需要客户端手动把网关指向旁路由(一旦旁路由故障,每个设备都要手动改回主路由),要么在旁路由上开启强制 DHCP 功能(旁路由宕机之后,DHCP 服务随之失效,新设备将无法获取 IP 地址)。这两种方式在自动化方面均有所欠缺,一旦遇到断网,全家人就要给你上压力了。

更为省心的做法是,引入 VRRP (虚拟路由冗余协议),让主路由与旁路由共同使用一个虚拟网关 IP 地址。在正常状态下,旁路由会作为 MASTER 角色来接管流量;一旦旁路由发生故障,主路由会在数秒内自动接替其工作,整个切换过程对客户端而言完全无感。

下面给出基于 VRRP 协议的具体配置方法。整个方案需要借助两台设备来完成:其中一台作为主路由,负责拨号、NAT 以及 DHCP 服务,其 VRRP 角色为 BACKUP ;另一台作为旁路由,负责处理特殊流量(例如去广告、科学上网等),其 VRRP 角色为 MASTER 。同时,还需要设置一个虚拟网关 IP ( VIP ),以此作为客户端统一的网关地址,并由 VRRP 协议动态地对其进行接管。

以下配置以具体的硬件设备为例(可以将其任意更换为手头其他支持 OpenWrt 系统的设备):
主路由:H3C NX30 Pro ( LAN 口 IP 地址为 10.0.0.1 ,默认网关指向运营商侧)
旁路由:斐讯 N1 ( IP 地址为 10.0.0.3 ,默认网关为 10.0.0.1 ,并关闭 DHCP 服务)
VIP 虚拟网关地址:10.0.0.254/24

配置步骤基础准备:两台设备均已刷入 OpenWrt 系统,并且主路由的 WAN 口能够正常上网。
对旁路由进行静态 IP 地址的设置:IP 地址为 10.0.0.3 ,网关为 10.0.0.1 ,同时关闭其 DHCP 服务。

安装 keepalived 软件包
opkg update && opkg install keepalived
编写配置文件
旁路由( MASTER )的配置文件路径为 /etc/keepalived/keepalived.conf ,其内容如下:
global_defs {
router_id N1_MASTER
}
vrrp_instance VI_1 {   state MASTER   interface br-lan   virtual_router_id 51   priority 150   advert_int 1   virtual_ipaddress { 10.0.0.254/24 }}
主路由( BACKUP )的配置文件路径同样为 /etc/keepalived/keepalived.conf ,其内容如下:
global_defs { router_id NX30Pro_BACKUP }vrrp_instance VI_1 {   state BACKUP   interface br-lan   virtual_router_id 51   priority 100   advert_int 1   virtual_ipaddress { 10.0.0.254/24 }}

解决 OpenWrt 系统中 UCI 配置覆盖的问题
在两台设备上分别创建 /etc/config/keepalived 文件,并写入以下内容:
config globals 'globals'
option alt_config_file '/etc/keepalived/keepalived.conf'
启动 keepalived 服务并设置开机自启动
/etc/init.d/keepalived
enable/etc/init.d/keepalived start

通过 DHCP 向客户端下发虚拟网关地址
在主路由的 LuCI 管理界面中,依次进入:网络 → 接口 → LAN → DHCP 服务器 → 高级设置 → DHCP-选项,然后填入 3,10.0.0.254 。

验证方案效果
正常状态下的验证:在旁路由上执行 ip addr show br-lan 命令,可以看到 10.0.0.254/24 地址存在,而主路由上则没有该 IP 地址。
客户端自动获取网关地址的验证:客户端能够自动获得网关地址 10.0.0.254 。
模拟旁路由故障的验证:执行 keepalived stop 命令停止旁路由的 keepalived 服务,3 秒之内主路由便会接管 VIP 地址。
恢复旁路由的验证:执行 keepalived start 命令重新启动旁路由的 keepalived 服务,VIP 地址会自动切换回旁路由。
重启测试的验证:将两台设备分别重启,重启之后 VIP 地址仍然位于旁路由上,客户端的网关地址也保持正确。

完成上述配置之后,一旦旁路由发生故障,系统会自动切换至主路由,用户几乎感觉不到断网的发生。这样一来,既能够放心地折腾各种插件功能,又不会影响到全家人的正常上网。虽然该配置过程相比手动修改网关的方式要稍微复杂一些,但是配置完成之后便可以实现一劳永逸的效果。

继 A 股数据 SKILL 之后,我又做了一个新能力:a-share-paper-trading

这个 SKILL 的目标很直接——让 Agent 不只是“会分析”,还能在模拟仓里完成从选股、下单、持仓跟踪到复盘评估的一整套流程,先把策略在低风险环境里跑通,再决定是否进入实盘流程。

你可以把它理解为一个“策略试炼场”:

  • 先验证交易逻辑是否稳定,而不是靠感觉拍脑袋
  • 用一致的规则管理仓位、交易节奏和风险暴露
  • 持续观察策略表现,及时发现问题并迭代
  • 让研究、执行、复盘形成闭环,减少无效试错

安装也很直接( https://clawhub.ai/shouldnotappearcalm/a-share-paper-trading ):

clawhub install a-share-paper-trading

如果这个方向对你有帮助,欢迎支持一下:

这次也把几个常用选股/决策 SKILL 一起串起来:

  • a-share-strategy-mainboard-multi-swing-defensive
    主板流动性池 + 趋势回踩,给出买入参考和卖出信号,适合做日常候选池筛选。
  • macd-trend-resonance-stock-picker
    均线定方向、MACD 定节奏,输出 A/B/C/D 分级候选,适合盘前选强弱。
  • macd-second-golden-cross
    聚焦“底背离 + 零轴下二次金叉”修复结构,给出观察/试错/放弃三档决策,适合低位修复场景。

wechat_2026-04-16_001917_307.png

wechat_2026-04-16_002018_677.png

纳斯达克指数已连续 10 个交易日上涨,为 2021 年 11 月以来最长连涨;期间累计涨幅+13.7%,是 2022 年以来最大反弹,也是 2009 年以来第三大涨幅。
若连涨延续至第 11 天,将创下自 2019 年以来最长纪录。与此同时,标普 500 在过去 10 个交易日中有 9 天收涨。
👉 市场正处于本世纪最强劲的修复行情之一。
但也正因为如此,短期情绪已明显过热,性价比在下降。
SPX 7000 ,我已经开始试探性布局第一批空单。做空属于高风险,量力而为,不要重仓。

我平时会在 TG 频道分享财报解读、重要新闻和各类财经资讯,主要做信息整理和观点交流。
https://t.me/+rbB5sChG4_Q0YzYx
点击链接直接跳转

我 使用 boda12306.com 费用是半年 150. 已经三年多了, 早期还算稳定.
最近节点不怎么稳定,有些节点 Gemini 等 AI 用不了,而且有时 goolge 访问都很慢.
问客服客户就说没遇到卡顿问题.

想换个机场, 各位推荐一下自己长期在用的稳定机场,附带说明费用问题.

最近发现某品牌上了蓝牙 Tesla 仪表盘,好奇怎么实现的,第一时间问了 AI ,给出的回答都是必须通过 Fleet API 来做。看了官方开源的代码外加对 AI 一顿 PUA 之后终于实现了一个纯 BLE 的版本,可以不联网显示车辆状态信息和控制车辆。

把传输和命令层用重新用 Swift 实现了一个 package 方便做原生开发,欢迎使用和提 issue & pr (命令没有全部测过,有问题轻喷😆

https://github.com/shoujiaxin/swift-tesla-ble

NginxMaster [可视化 Nginx 管理面板]

Github 地址: https://github.com/pch18/nginxMaster

欢迎 Issue & PR !(同求 git 仓库点亮小星星⭐️)

简介

  • 支持配置: 反向代理, 静态页面, 重定向 等
  • 保存自动校验,失败自动回滚,确保 Nginx 服务不中断
  • 可以管理 SSL 证书,自动识别证书内容,校验合法性(自动续签待开发)
  • 实时请求动态展示(基于 SSE 实现),以及 CPU 、内存、网络监控
  • 更多功能开发中

登录方式

  • 默认连接地址: http://IP:9999
  • 默认用户名: admin
  • 默认密码: admin9999

docker 安装命令:

(二选一)

docker run -d --name nginx-master --net=host --restart always pch18/nginx-master
docker run -d --name nginx-master -p 9999:9999 -p 443:443 -p 80:80 --restart always pch18/nginx-master

支持多架构,amd64, arm64 等,如果缺了某个架构的构建,请提 issue

裸机安装命令(前提安装完 nginx )

(二选一)

curl -fsSL https://raw.githubusercontent.com/pch18/nginxMaster/refs/heads/main/install.debian | sudo bash
wget -qO- https://raw.githubusercontent.com/pch18/nginxMaster/refs/heads/main/install.debian | sudo bash

最近给我女儿 vibe 了一个 AI 讲故事的一个应用,她很喜欢,我老婆也觉得喜欢。主要就是在 APP 里,用户使用 AI 生成一些指定主题的故事,可以讲给孩子听。

其实也算是 vibe 快结束了,然后突然想到,这类属于 AIGC 应用了吧,好像个人是很难上架国内 Android 的,是这样么?

苹果不知道有没有类似的限制。

我问了一下 AI,个人超难,几乎不太可能。注册公司的话,得去申请一大堆东西好像,成本感觉有点高。不是很想注册公司