投资公司发展物语 V2.0 设计文档 v0.6

投资公司发展物语 V2.0 设计文档 v0.6

版本说明

  • 本文档为 v0.6 规划与规则速查,在 v0.5 全部功能 基础上新增两大系统:宏观经济行业市场竞争
  • 全篇与仓库 investment-sim/ 对齐;与代码冲突时以代码为准。
  • 并购系统(含收购 NPC 份额)不在 v0.6 交付,规划为 v0.7
  • 设计原则:表驱动、可复现(与附录 A / mix 随机源一致),参数可 JSON 热更。
  • SCHEMA_VERSION 在实现 v0.6 时升级,并需规定旧存档迁移规则。

目录

  1. v0.6 变更摘要与继承关系
  2. 目录与代码路径约定
  3. 第一部分:宏观经济系统设计方案
  4. 第二部分:行业市场竞争系统设计方案
  5. 统一时间线与实现规划(v0.6.1~v0.6.4)
  6. 数据结构与 JSON 配置汇总
  7. 新增 UI 与反馈
  8. 与 v0.5 系统整合总表
  9. 后续扩展(v0.7+)
  10. 版本历史

0. v0.6 变更摘要与继承关系

主题 v0.6 约定
继承范围 完整继承 v0.5:其他公司、房地产、初创投资、业务组、股票/期货、股份与上市等(见 v0.5 设计文档)。
宏观经济 引入统一宏观指标(r, π, g, m)、五条宏观景气线、经济周期阶段;上游决定附录 A 的景气编码 c
行业市场竞争 按行业(及房地产按区域)维护总市场规模、玩家/NPC/「其他」份额;NPC 月度可复现波动;玩家通过业务组扩张等夺取份额;为财报提供营收/成本/利润字段基础。
业务组操作 保持 v0.5 按钮式(研发产品、扩展业务等);「扩展业务」与市场夺取份额机制挂钩(见 3.5 节)。
并购 v0.6 不实现;市场竞争文档中的并购条目保留为 v0.7 设计预留
咨询服务 / 拉投资 v0.6 可保持不受宏观直接扰动(与前期讨论一致),以免规则爆炸;若后续要联动,单列小版本。

1. 目录与代码路径约定

路径以仓库根目录为基准(与 v0.5 一致)。

类型 路径 说明
前端代码 investment-sim/js/core/ 建议新增 macro.js(或 macroEconomy.js)、marketCompetition.js
静态数据 data/investment-sim/ 新增宏观表、市场配置等 JSON
入口 investment-sim/index.html 月度报告、宏观页、市场概览 UI
设计规则 .cursor/rules/investment-company-v2.mdc 若存在,实现时同步更新

2. 第一部分:宏观经济系统设计方案

2.1 设计目标

将现有玩法(股票、期货、房地产、投资初创公司、业务组)通过统一的宏观经济模型串联起来,实现:

  • 宏观景气度影响所有行业与业务;
  • 各玩法之间产生间接联动(例:房地产景气 → 地产股修正 → 地产相关业务组收益修正);
  • 经济周期带来可预期的潮汐式波动
  • 可复现、表驱动(与附录 A、rng.jsmixUint32 一致)。

2.2 宏观经济核心指标体系

2.2.1 基础指标(每月更新)

指标 符号 取值范围 说明 影响范围
基准利率 r 1.0% ~ 15.0% 央行政策利率,步长 0.25% 贷款成本、债券收益、房地产按揭、公司融资
CPI(通胀率) π -2% ~ 15% 月度同比(设计口径) 租金、定价、工资压力
GDP 增长率(同比) g -10% ~ 15% 月度同比(设计口径) 经济整体方向,行业基准
市场情绪 m 0 ~ 100 投资者信心指数 股票超额波动、融资成功率

2.2.2 合成指标

指标 公式/来源 用途
货币松紧指数 mon = 5 - r(归一化到 0~10,或文档约定线性映射) 投资活跃度叙事/部分修正
经济周期阶段 gπ 联合判定(可叠加马尔可夫转移) 触发不同事件池、阶段修正
行业景气度编码 由宏观线 base_bp 映射为 c ∈ {0,1,2,3,4} 驱动附录 A B_stock / B_fut

2.3 行业景气度生成机制(五条宏观线)

五条宏观线:股市综合、大宗商品、房地产、科技/互联网、海外市场
不再由 rollMacroC 独立均匀随机;改由宏观指标 + 表 + 可复现噪声计算 base_bp,再映射为 c

通用公式(万分比基准,与附录 A 对齐):

base_bp = 经济周期基准[g] + 利率影响 + 情绪影响 + 随机噪声(可复现)

2.3.1 经济周期基准表(依赖 g

GDP 增长率区间 股市基准(bp) 大宗商品基准(bp) 房地产基准(bp) 科技基准(bp) 海外基准(bp)
g ≥ 8%(过热) 1200 1500 800 1600 1000
4% ≤ g < 8%(繁荣) 800 800 500 1000 600
0% ≤ g < 4%(平稳) 200 0 200 300 100
-4% ≤ g < 0%(轻度衰退) -300 -400 -200 -500 -300
g < -4%(深度衰退) -800 -1000 -600 -1200 -800

表可独立调参;最终股票收益在现有 B_stock[c] 之上可再叠加上游(见 2.5 节与实现时的防重复加算约定)。

2.3.2 利率与情绪修正(示例系数,可配置)

因素 对股市 对房地产 对科技 对大宗 对海外
利率 ↑1% -100bp -200bp -50bp -50bp +50bp(吸引外资叙事)
情绪 ↑10 点 +80bp +30bp +100bp +20bp +50bp

2.3.3 月度景气编码 c 的确定

base_bp 映射为附录 A 的 c

base_bp 范围 c 名称
≥ 600 0 繁荣
200 ~ 599 1 向好
-199 ~ 199 2 平稳
-600 ~ -200 3 低迷
≤ -601 4 冰点

兼容策略:附录 A 的 B_stock[c]B_fut[c](及 stocks-futures.json 中按品种的行)仍直接使用该 c上游只改 c 的生成

实现注意:若仍保留 noise_bpA[a] 等,需明确是否将「经济周期基准」与「原 B_stock[c]」合并为一次加总,避免双重计算;推荐在实现说明中固定一种:

  • 方案 A(推荐)P_stock = B_stock[c] + A[a] + G + sector_beta + 事件修正 + noise_bp,其中 c 由宏观推导;B_stock 表不变。
  • 方案 B:用 base_bp 替代 B_stock[c] 的环境项(需重标定表)。

本文档默认 方案 A

2.4 各玩法联动规则(摘要)

2.4.1 股票投资

P = B_stock[c] + A[a] + G_stock[mode] + sector_beta + 个股事件修正 + noise_bp
  • sector_beta:配置在 stocks-futures.json 每只股票或行业,范围约 [-200, +200](万分比)。
  • 房地产景气 → 地产股:当地产宏观线 c=0 时,sectorId='re' 个股额外 +200bpc=4-300bp(数值可配)。

2.4.2 期货交易

扩展品种与宏观联动(节选):

品种 关联宏观线 额外规则(示例)
原油(energy) 大宗商品 地缘事件临时修正
黄金(新增) 海外+利率 实际利率 r - π;实际利率 < 0 时黄金溢价(如 +200bp)
白银(新增) 大宗+科技 工业需求受科技景气影响
铜(metal) 大宗+房地产 地产新开工叙事影响
农产品(agri) 大宗 天气事件大幅波动

公式:
P = B_fut_by_variant[c] + A[a] + 宏观联动修正 + 事件修正 + noise_bpP_final = P * L

2.4.3 房地产投资

月租金收益率(bp,设计式):

月租金收益率(bp) = 房地产景气基准(rr) + (6% - r)×100 + CPI 影响

rr 由房地产宏观线的 c 决定(基准表可配)。利率项:(6% - r)×100 表示相对中性利率 6% 的偏离。CPI:例如 π 每高出 3% 一个百分点,租金收益率 +50bp(阈值可配)。

2.4.4 投资初创公司

  • 成功率、回报倍率与行业景气 c、创新力、以及 r>8% 时融资惩罚等挂钩(具体表见实现)。
  • v0.6 简化:可先上线宏观对成功率的单维修正,回报倍率逐步加全。

2.4.5 业务组(实业经营)

monthlyRevenueWan = baseRevenue × marketShare × productMultiplier × macroFactor
macroFactor = 行业景气系数 + 利率修正

行业景气系数与 c 映射(0.8~1.5 等)可配;利率:r<4% 时 +0.1,r>8% 时 -0.15(示例)。
专利估值在 c≥3 时可 8 折(示例)。

2.5 经济周期系统

2.5.1 周期判定(示例)

周期阶段 判定条件(示例) 特征效果(示例)
复苏 0%≤g<4%,π<3% 股市基准 +200bp,m 每月 +2
繁荣 g≥4%,π 3%~6% 股市 +400bp,房地产 +200bp
过热 g≥8%,π≥6% 加息概率上升,波动放大
衰退 -4%≤g<0%,π<2% 股市 -300bp,期货波动放大
萧条 g<-4% 股市 -600bp,房地产 -400bp

2.5.2 周期转移

  • 使用可复现马尔可夫链:每月依当前阶段有 5%~20% 概率(表驱动)向相邻阶段转移,随机数来自 mix(gameSeed, monthIndex, …)
  • 平均持续约 12 个月,可被大事件打断。

2.6 宏观大事件与随机事件(摘要)

  • 大事件:央行加息/降息刺激、石油危机、科技泡沫、房地产调控等,按周期与种子条件触发,持续 3~12 个月。
  • 小事件:干旱、外需、黑天鹅等,在现有 events 体系中增加对 m、板块 c 的修正。

2.7 期货品种扩展(配置方向)

stocks-futures.jsonfutures.variants 中新增例如 gold / silver / copper,每品种含 B_fut_bp_by_cmacroSensitivity 字段;具体数组与旧品种风格保持一致。

2.8 可复现实现要点

  • 宏观序列:r, π, g, m 及噪声均由 gameSeed + 年月 t 通过 mixUint32 派生。
  • 可预置 1990~2020 基准利率轨迹表作为 r 的锚,事件再叠加上去。
  • 存档须记录当月宏观态与每条线的 c / base_bp(或可用于回放的最小集),与结算使用同一随机源。
  • 玩家行为不反向影响宏观(避免复杂度爆炸),除非将来单独开系统。

2.9 与现有代码的落点(参考)

现有模块 改动要点
rng.js rollMacroC 改为由宏观层写入 c,或保留为兼容层并废弃直接随机
monthEngine.js runMonthOpening 中生成宏观、五条线的 c、周期阶段
settlement.js 股票/期货公式接入新修正项;期货分品种
tables.js 宏观参数表、周期表、事件表可部分外移 JSON
stocks-futures.json sector_beta、新期货品种

3. 第二部分:行业市场竞争系统设计方案

3.1 设计目标

建立覆盖业务组投资初创公司房地产三领域的市场结构:

  • 每行业有独立总市场规模竞争格局(玩家 / NPC / 其他)。
  • 玩家通过市场相关行为(含业务组扩张;并购为 v0.7)提升份额。
  • NPC 每月按规则波动,可复现
  • 市场规模受宏观经济行业景气影响。
  • 财报(营收、成本、净利润)打基础。
  • 全量参数 JSON 可配、可热更

3.2 核心数据:market-config.json(规划)

  • 文件建议路径:data/investment-sim/market-config.json
  • schemaVersionindustries[]:每行业 idnametotalMarketSizeWan(初始总市场,万元)、initialPlayerShareinitialNpcShares[]otherSharegrowthRateBase(年)、fixedCostWan(月固定成本)、variableCostRatiomacroSensitivity 等。
  • realEstate:全国规模、regions(如 bj/sh/sz/other)与 shareOfNational
  • startup:默认总市场、增长率等。
  • globalParamsmaxNpcSharePerIndustryotherMinSharemonthlyNpcVolatility 等。

行业 idmarket-config.jsonindustries[].id 必须与 v0.5 业务组/初创的 industry 使用同一套 canonical key(与 INDUSTRIES 一致,见 5.3 节),禁止两套命名并存。

3.3 运行时状态 marketState(存档)

对每行业、每房地产区域等维护例如:

  • totalMarketSizeWan(动态)
  • players: { 业务组ID 或 项目ID -> share }
  • npcs: { NPC公司ID -> share }
  • otherShare(自动为 1 - sum(players) - sum(npcs),并做边界修正)
  • lastUpdateMonthlastUpdateMonthIndex(推荐 monthIndex 整数)

3.4 月度更新顺序

businessGroups.tickMonth 之后主月结 endTurn 的结算前/后(以最终实现为准,须固定并写入文档与代码注释)执行:

  1. 更新总市场规模(年或季度锚定 + 宏观修正 + 季度平滑,见 3.6)。
  2. 竞争动态(零和):
    • NPC 份额随机波动(可复现);
    • 依规则压缩 NPC 使 sum(npcs) ≤ maxNpcSharePerIndustry
    • 保证 otherShare ≥ otherMinShare(不足则从 NPC 回收)。
  3. 依份额与成本结构计算营收与净利润(见 3.7)。
  4. 将结果写回业务组/房地产项目/初创(若已接入)的当月财务字段。

玩家不通过本 tick 直接改 NPC 份额;玩家份额变化来自 扩张/项目完成/未来 v0.7 并购 等。

3.5 NPC 动态(可复现)

对每个 NPC、每月:

H = mix(gameSeed, monthIndex, industryId, npcCompanyId, tag)
delta = 映射为 [-maxDelta, +maxDelta] 的倍率;newShare = oldShare * (1 + delta)

再执行归一化、上限、补回 other(见 3.2 全局参数)。
可选扩展:为 NPC 配置 archetype(防御/进攻/高波动)与 volatility,v0.6.3+ 可逐步实现。

3.6 玩家获取份额的方式

3.6.1 业务组:与「扩展业务」按钮联动(v0.6 约定)

  • v0.5 已实现扩展业务按钮(如每次消耗固定资金、marketShare +0.5% 档位的简化逻辑)。
  • v0.6:每次点击「扩展业务」仍消耗配置的现金(如 50 万),同时累积 扩张点 expandPoints,例如:
    • expandPoints += expandCostWan / 10(每 10 万投入 1 点,比例可配)。
  • 达到阈值时,从 otherShare 争夺 少量份额给该业务组(每月最多转化一次)。阈值可与当前份额挂钩,例如:
    • threshold = 20 * (1 + playerShare * 10)(示例,可改为对数曲线以缓后期,见下款)。
  • 在 v0.6 要求恢复 v0.4 的月度 expandWan 输入框;若未来并存,需在文档中单列版本。

实现时需在 businessGroups.js 中显式增加 expandPoints、行业维度的 marketState 写入与日志。

3.6.2 并购(v0.7)

收购 NPC 或其它业务组份额、估值公式、从市场移除 NPC 等,本文档只保留需求条目,不列入 v0.6 验收

3.6.3 初创公司退出

长期目标:退出估值与行业总市场 × 目标份额挂钩。v0.6.4 可选「仍按景气+投资线性」的简化,待市场系统稳定后再接入全量(与第二部分讨论一致)。

3.7 营收与成本(行业维度的简化财报)

对单个业务组实体(或汇总到集团),在某行业 i

  • revenueWan = totalMarketSizeWan * playerShare * productFactorproductFactor 来自产品与专利等,与 v0.5 的乘子兼容)
  • variableCostWan = revenueWan * variableCostRatio
  • fixedCostWan 来自行业配置或业务组规模挡位
  • netProfitWan = revenueWan - variableCostWan - fixedCostWan(税费留后续版本)

净利润反馈:

  • 业务组:进入 fundingWan 与估值相关字段,并追加 financialHistory[](建议保留最近 36 月摘要)。
  • 房地产/初创:在对应模块中增加月度字段与历史。

3.8 市场规模与宏观联动

  • 年增长率(或季度增长率):growth_effective = growthRateBase * (1 + macroBonus)
  • 示例:
    macroBonus = (g - 2%) * 0.5 + (行业景气系数 - 1) * 0.3
    行业景气系数由该行业对应宏观线 c 映射为 1.2 / 1.1 / 1.0 / 0.9 / 0.8。
  • 增长节奏:建议季度重算目标 + 月内线性平滑,避免单月跳变过大(实现细节见代码注释)。

3.9 房地产区域份额

  • 每项目绑定 regionId;完工后按投资额与区域总市场计算份额增量(有上限、玩家总份额有上限,如 20% 全国或分区域,可配)。
  • 租金与资产增值可随区域份额与宏观调节(公式与 v0.5 中房地产实现对接时,以不破坏存档位优先)。

3.10 与现有文件的整合

模块 文件 作用
业务组 businessGroups.js 扩张点、份额、营收成本
房地产 realEstate.js 区域、份额、租金
初创 startupInvest.js 退出与市场规模(分阶段)
宏观 新增 macro.js g、行业 c、市场规模乘子
持久化 persistence.js / 独立 key marketState 存档
配置加载 main.js 或专用 loader market-config.json fetch

4. 统一时间线与实现规划(v0.6.1~v0.6.4)

以下子版本号替代原「v0.5+1」时间线说法,按顺序交付;每子版本可独立回归。

子版本 目标 核心交付 验收要点
v0.6.1 宏观基础 + 五条宏观线 r/π/g/m 的月度生成与存档;由宏观推导五条线的 base_bpcmonthEngine 接入;月度报告可显示宏观摘要 同 seed 同日期回放宏观值一致;股票/期货仍用原 B_*[c]c 来自新上游
v0.6.2 经济周期 + 全玩法宏观联动 周期阶段、马尔可夫转移、大/小事件与宏观的接口;股票 sector_beta、期货新品种配置、地产/初创/业务组 macroFactor 等按文档可开关落地 各玩法在繁荣/衰退档差异可测;事件可复现
v0.6.3 市场竞争基础 + NPC market-config.jsonmarketState 初始化与月更;NPC 可复现波动与约束;不含玩家并购 8 行业(或约定制)规模与份额守恒可验;NPC 不超上限、other 不低于下限
v0.6.4 玩家份额扩张 + 财务闭环 业务组「扩展业务」与 expandPoints、从 other 夺份额;行业营收/成本/利润进入业务组与月度历史;房地产区域份额可部分接入 扩张阈值与产品等级文档一致或可调;财报字段可导出给 UI

并购与完整财报审计v0.7+
初创完全接入市场份额退出模型:可放在 v0.6.4 后v0.7 初,以里程碑标记。


5. 数据结构与 JSON 配置汇总

5.1 新增/重大扩展文件

文件 内容
data/investment-sim/macro-config.json(名称可协商) 基准利率轨迹、g/π 生成参数、周期转移表、事件 id
data/investment-sim/market-config.json 行业与区域、NPC 初值、增长与成本、全局约束
data/investment-sim/stocks-futures.json 扩:sector_beta、新期货、敏感字段
存档 / state macro: { r, π, g, m, cyclePhase, lines: {…} }market: { industryId: marketState, … }

5.2 state.macro(示例字段)

字段 说明
baseRate 当前 r(%)
cpi π(%)
gdpGrowth g(%)
sentiment m(0–100)
cyclePhase 复苏/繁荣/过热/衰退/萧条等枚举
lines 五条线各含 cbaseBp(可选存)
eventsActive 大事件持续月数与叠乘(实现定)

5.3 行业 id 与宏观线映射(已订稿)

5.3.1 约定

  • market-config.jsonindustries[].id业务组 / 初创 的字段 industry 必须相同,且只能使用下列 8 个 canonical id(与 tables.jsINDUSTRIES 的 key 一致,小写英文):
    • finance(金融)
    • realestate(地产)
    • tech(科技/互联网)
    • semiconductor(半导体)
    • consumer(消费电子)
    • medical(医疗)
    • energy(能源)
    • aerospace(航天/汽车)
  • 每条行业在配置里另有 name(中文显示名),用于市场 UI;与上列 id 一一对应,不改变 id 本身。

5.3.2 8 行业 → 5 条宏观线(macroLineId

宏观景气、市场规模 macroBonus、业务组 macroFactor 等,凡按「行业」取景气时,用下表将 industry 解析为 macroLineId,再取 state.macro.lines[macroLineId].c(及对应的 baseBp 等)。
8 对 5 为多对一,属正常设计。

industries[].id(= industry macroLineId 说明
finance equity_composite 广谱国内权益/金融叙事
realestate real_estate 房地产专项线
tech tech 科技/互联网
semiconductor tech 与科技线同谱系(周期高度相关)
consumer equity_composite 与股市综合线联动(定稿:默认不拆独立线)
medical equity_composite 与股市综合线联动(定稿:默认不拆独立线)
energy commodity_composite 能源/材料,与大宗线联动
aerospace equity_composite 与股市综合线联动(定稿:默认不拆独立线;叙事上可解释为制造/国防等综合景气)

5.3.3 五条宏观线的 逻辑 idUI 中文名

存储、存档、state.macro.lines 的 key、JSON 配置一律使用英文 macroLineId(与 stocks-futures.json 中已存在的 equity_composite / commodity_composite 命名风格一致)。
UI 中向玩家展示时,使用下表中文名,不得把英文 id 直接作为主标题(调试/G.M. 模式可显式 id)。

macroLineId UI 显示名(中文)
equity_composite 股市综合
commodity_composite 大宗商品
real_estate 房地产
tech 科技/互联网
overseas 海外市场

实现上可将上表收拢为 MACRO_LINE_LABELS[macroLineId]macro-config.json 中的 lineDefinitions[](含 id + displayName),单一数据源供月度报告、宏观页、提示文案复用。

5.4 存档版本

  • SCHEMA_VERSION 递增。
  • 旧存档读入:macro / market 缺省时用当前年月与 market-config 重算或安全默认(须写明规则防作弊差)。

6. 新增 UI 与反馈

6.1 月度报告

  • 新增 「宏观经济」 小节或独立页:展示 r, π, g, m 及环比;五条宏观线cbase_bp下月预测(展示用,可与结算独立种子,同现有 rollPredictedC 思路)。
  • 五条线名称:界面使用中文(与 5.3.3 表一致,如「股市综合」「大宗商品」「房地产」「科技/互联网」「海外市场」),底层仍用 macroLineId 存取。
  • 经济周期:当前阶段名称、已持续月数、(可选)下阶段概率说明。

6.2 市场与竞争

  • 行业总市场规模、玩家份额、主要 NPC 份额条(不含 v0.7 并购操作)。
  • 业务组详情:扩张点进度、距下次从「其他」夺份额的提示。

6.3 提示文案

  • 如「高利率压制地产」「科技景气支撑研发回报」等,来源只读,避免与随机结算混淆。

6.4 与 index.html / main.js 的修改点

  • 增加宏观页、市场页签或子面板;monthReport 数据源扩展。
  • 所有展示数据以 state 与当月快照为准,不重新用未固定种子算一遍。

7. 与 v0.5 系统整合总表

系统 v0.6 改动 兼容
附录 A B_stock / B_fut 保留;c 改由宏观+映射
stocks-futures.json 新字段、新品种 向后兼容可缺省
业务组 macroFactor、扩张点、市场份额、财务历史;按钮式保留 新字段默认不破坏读档
房地产 租金/增值与区域份额、宏观 项目旧字段需迁移说明
初创 分阶段接市场 可先简化
其他公司/咨询/拉投资 默认不改
并购 v0.7

8. 后续扩展(v0.7+)

  • 并购:收购 NPC 份额、估值、反垄断叙事。
  • 汇率、发债、更完整税费与年度财报审计。
  • 玩家成为龙头后触发的行业大事件(与宏观分线)。
  • 初创公司完全接入「目标份额 × 市场 × 估值」退出模型。

9. 版本历史

版本 说明
v0.6 本文档:宏观经济 + 行业市场竞争 + 子版本 v0.6.1~v0.6.4;并购归 v0.7。
v0.5 见同目录下 投资公司发展物语 V2.0 设计文档 v0.5.md

文档完成日期:2026-04-27(v0.6 首版,与实现无冲突时以代码为准)

Latest Posts

Introducing some new layouts to Bulma Clean Theme
Introducing some new layouts to Bulma Clean Theme

I’ve been meaning to write about some of the new features I have been rolling out to my Jekyll theme, Bulma Clean Theme, for a while but I have only just managed to push the update for the landing page layout last weekend. This article provides some of the thinking behind the updates, as well as a brief introduction to how to get started.

Getting started with Bulma Clean Theme for Jekyll
Getting started with Bulma Clean Theme for Jekyll

I have made a theme for Jekyll which is based on the Bulma frontend framework. It might look familiar, because I am also using it for this site. If you like the look of this theme then I thought I would write a little blog post about how to use it for your own site and how you can use it with GitHub Pages.

Why use a static site generator
Why use a static site generator

There are many ways to make a website and many different CMS platforms you can use, such as WordPress and Joomla, as well as site builder tools that offer you drag and drop interfaces, but what about static site generators?