下载地址:http://lanzou.com.cn/i39efd690

📁 output/jiansheshendujisuanxitong/
├── 📄 README.md209 B
├── 📄 pom.xml1.5 KB
├── 📄 package.json704 B
├── 📄 src/main/java/Resolver.java4.1 KB
├── 📄 config/Manager.xml1.4 KB
├── 📄 hooks/Util.php2.7 KB
├── 📄 sessions/Client.js4.3 KB
├── 📄 hooks/Handler.ts2.3 KB
├── 📄 settings/Proxy.go4.1 KB
├── 📄 sessions/Wrapper.cpp1.5 KB
├── 📄 generator/Dispatcher.php4.3 KB
├── 📄 sessions/Adapter.py4.6 KB
├── 📄 src/main/java/Registry.java7.6 KB
├── 📄 settings/Cache.js3.4 KB
├── 📄 src/main/java/Buffer.java6 KB
├── 📄 config/Queue.json704 B
├── 📄 hooks/Validator.js4.8 KB
├── 📄 sessions/Provider.py5.8 KB
├── 📄 cmd/Factory.go3.5 KB
├── 📄 sessions/Worker.ts2.6 KB
├── 📄 sessions/Helper.cpp1.5 KB
├── 📄 cmd/Repository.py4.6 KB
├── 📄 src/main/java/Transformer.java6.4 KB
├── 📄 settings/Parser.java4.9 KB
├── 📄 config/Engine.xml1.7 KB
项目编译入口:
Project Structure
Project : 建设余额深度计算训练系统
Folder : jiansheshendujisuanxitong
Files : 26
Size : 85.1 KB
Generated: 2026-03-23 20:17:00
jiansheshendujisuanxitong/
├── README.md [209 B]
├── ci/
├── cmd/
│ ├── Factory.go [3.5 KB]
│ └── Repository.py [4.6 KB]
├── config/
│ ├── Engine.xml [1.7 KB]
│ ├── Manager.xml [1.4 KB]
│ └── Queue.json [704 B]
├── devops/
├── generator/
│ └── Dispatcher.php [4.3 KB]
├── hooks/
│ ├── Handler.ts [2.3 KB]
│ ├── Util.php [2.7 KB]
│ └── Validator.js [4.8 KB]
├── package.json [704 B]
├── pom.xml [1.5 KB]
├── sessions/
│ ├── Adapter.py [4.6 KB]
│ ├── Client.js [4.3 KB]
│ ├── Helper.cpp [1.5 KB]
│ ├── Provider.py [5.8 KB]
│ ├── Worker.ts [2.6 KB]
│ └── Wrapper.cpp [1.5 KB]
├── settings/
│ ├── Cache.js [3.4 KB]
│ ├── Parser.java [4.9 KB]
│ └── Proxy.go [4.1 KB]
└── src/
├── main/
│ ├── java/
│ │ ├── Buffer.java [6 KB]
│ │ ├── Registry.java [7.6 KB]
│ │ ├── Resolver.java [4.1 KB]
│ │ └── Transformer.java [6.4 KB]
│ └── resources/
└── test/
└── java/
Object subclass: #Account
instanceVariableNames: 'principal annualRate monthlyExpense monthlyIncome startDate riskProfile'
classVariableNames: ''
package: 'BalanceSimulator-Core'
"---------------------------------------------------------------------------
| 账户模型类
| 表示一个金融账户的基本属性
---------------------------------------------------------------------------"
Account >> initialize
"初始化账户默认值"
principal := 0.0.
annualRate := 0.0.
monthlyExpense := 0.0.
monthlyIncome := 0.0.
startDate := Date today.
riskProfile := #conservative. "保守型 #conservative, 平衡型 #balanced, 进取型 #aggressive"
^super initialize.
Account >> principal: aNumber
principal := aNumber asFloat.
Account >> principal
^principal.
Account >> annualRate: aNumber
annualRate := aNumber asFloat / 100.0.
Account >> annualRate
^annualRate * 100.
Account >> monthlyExpense: aNumber
monthlyExpense := aNumber asFloat.
Account >> monthlyExpense
^monthlyExpense.
Account >> monthlyIncome: aNumber
monthlyIncome := aNumber asFloat.
Account >> monthlyIncome
^monthlyIncome.
Account >> startDate: aDate
startDate := aDate.
Account >> startDate
^startDate.
Account >> riskProfile: aSymbol
riskProfile := aSymbol.
Account >> riskProfile
^riskProfile.
Account >> netMonthlyCashFlow
"计算净月现金流 (收入 - 支出)"
^monthlyIncome - monthlyExpense.
Account >> effectiveMonthlyRate
"根据风险系数调整后的月利率 (年化复利转换为月利率)"
| baseRate riskMultiplier |
baseRate := annualRate / 12.0.
riskMultiplier := riskProfile = #conservative ifTrue: [0.8].
riskMultiplier := riskProfile = #balanced ifTrue: [1.0].
riskMultiplier := riskProfile = #aggressive ifTrue: [1.3].
^baseRate * riskMultiplier.
"============================================================================"
Object subclass: #SimulationEngine
instanceVariableNames: 'account months simulationResults events'
classVariableNames: ''
package: 'BalanceSimulator-Core'
"---------------------------------------------------------------------------
| 模拟引擎类
| 执行蒙特卡洛风格的深度模拟计算
---------------------------------------------------------------------------"
SimulationEngine >> initialize
simulationResults := OrderedCollection new.
events := OrderedCollection new.
^super initialize.
SimulationEngine >> account: anAccount
account := anAccount.
SimulationEngine >> months: anInteger
months := anInteger.
SimulationEngine >> runSimulation
"执行基础确定性模拟"
| balance currentDate monthlyRate cashFlow |
balance := account principal.
currentDate := account startDate.
monthlyRate := account effectiveMonthlyRate.
cashFlow := account netMonthlyCashFlow.
simulationResults add: (SimulationPoint new date: currentDate; balance: balance; yourself).
1 to: months do: [:i |
currentDate := currentDate addMonths: 1.
"复利增长"
balance := balance * (1 + monthlyRate).
"加入净现金流 (通常发生在月初)"
balance := balance + cashFlow.
"应用随机市场波动 (根据风险配置文件)"
balance := self applyMarketVolatility: balance forMonth: i.
"检查并应用随机风险事件"
balance := self applyRiskEvents: balance atDate: currentDate.
simulationResults add: (SimulationPoint new date: currentDate; balance: balance; yourself).
].
^simulationResults.
SimulationEngine >> applyMarketVolatility: currentBalance forMonth: monthIndex
"应用基于风险配置文件的随机波动,模拟市场真实情况"
| volatility randomFactor |
volatility := account riskProfile = #conservative ifTrue: [0.02].
volatility := account riskProfile = #balanced ifTrue: [0.05].
volatility := account riskProfile = #aggressive ifTrue: [0.09].
"使用正态分布随机因子,均值为1,标准差为波动率"
randomFactor := (Random new next * 2 - 1) * volatility + 1.0.
"保证不会出现负数余额 (最小余额限制为0)"
^ (currentBalance * randomFactor) max: 0.
SimulationEngine >> applyRiskEvents: currentBalance atDate: aDate
"模拟低概率高风险事件,如市场崩盘或意外支出"
| eventOccurrence riskThreshold eventImpact |
"不同风险配置下事件触发概率不同"
riskThreshold := account riskProfile = #conservative ifTrue: [0.02].
riskThreshold := account riskProfile = #balanced ifTrue: [0.05].
riskThreshold := account riskProfile = #aggressive ifTrue: [0.10].
eventOccurrence := Random new next <= riskThreshold.
eventOccurrence ifTrue: [
"随机选择事件类型"
| eventType impactDescription |
eventType := #(marketCrash suddenExpense taxHike) atRandom.
eventType = #marketCrash ifTrue: [
eventImpact := -0.20. "资产缩水20%"
impactDescription := '市场崩盘: 资产价值下降20%'.
].
eventType = #suddenExpense ifTrue: [
eventImpact := -0.10. "额外支出10%当前余额"
impactDescription := '突发支出: 额外支出10%当前余额'.
].
eventType = #taxHike ifTrue: [
eventImpact := -0.05. "税务增加5%"
impactDescription := '税率提高: 资产减少5%'.
].
events add: (RiskEvent new date: aDate; type: eventType; description: impactDescription; yourself).
^ currentBalance * (1 + eventImpact) max: 0.
].
^currentBalance.
SimulationEngine >> monteCarloSimulation: iterations
"执行蒙特卡洛模拟,返回多条可能路径"
| allPaths |
allPaths := OrderedCollection new.
1 to: iterations do: [:iter |
| pathBalances tempBalance currentDate monthlyRate cashFlow |
pathBalances := OrderedCollection new.
tempBalance := account principal.
currentDate := account startDate.
monthlyRate := account effectiveMonthlyRate.
cashFlow := account netMonthlyCashFlow.
pathBalances add: tempBalance.
1 to: months do: [:m |
currentDate := currentDate addMonths: 1.
tempBalance := tempBalance * (1 + monthlyRate).
tempBalance := tempBalance + cashFlow.
tempBalance := self applyMarketVolatility: tempBalance forMonth: m.
tempBalance := self applyRiskEvents: tempBalance atDate: currentDate.
pathBalances add: tempBalance.
].
allPaths add: pathBalances.
].
^allPaths.
"============================================================================"
Object subclass: #SimulationPoint
instanceVariableNames: 'date balance'
classVariableNames: ''
package: 'BalanceSimulator-Core'
SimulationPoint >> date: aDate
date := aDate.
SimulationPoint >> date
^date.
SimulationPoint >> balance: aNumber
balance := aNumber.
SimulationPoint >> balance
^balance.
"============================================================================"
Object subclass: #RiskEvent
instanceVariableNames: 'date type description'
classVariableNames: ''
package: 'BalanceSimulator-Core'
RiskEvent >> date: aDate
date := aDate.
RiskEvent >> type: aSymbol
type := aSymbol.
RiskEvent >> description: aString
description := aString.
"============================================================================"
Object subclass: #SimulationAnalyzer
instanceVariableNames: 'simulationResults monteCarloPaths'
classVariableNames: ''
package: 'BalanceSimulator-Analysis'
SimulationAnalyzer >> initialize
simulationResults := OrderedCollection new.
monteCarloPaths := OrderedCollection new.
^super initialize.
SimulationAnalyzer >> simulationResults: aCollection
simulationResults := aCollection.
SimulationAnalyzer >> monteCarloPaths: aCollection
monteCarloPaths := aCollection.
SimulationAnalyzer >> finalBalance
^simulationResults last balance.
SimulationAnalyzer >> minimumBalance
^(simulationResults collect: [:each | each balance]) min.
SimulationAnalyzer >> maximumBalance
^(simulationResults collect: [:each | each balance]) max.
SimulationAnalyzer >> averageBalance
| sum |
sum := (simulationResults collect: [:each | each balance]) sum.
^sum / simulationResults size.
SimulationAnalyzer >> growthRateCAGR
"计算复合年增长率 (CAGR)"
| startBalance endBalance years |
startBalance := simulationResults first balance.
endBalance := simulationResults last balance.
years := simulationResults size / 12.0.
years = 0 ifTrue: [^0].
^ ((endBalance / startBalance) raisedTo: (1 / years)) - 1.
SimulationAnalyzer >> monteCarloPercentile: percentile
"从蒙特卡洛路径中计算给定百分位的最终余额"
| finalBalances sorted |
finalBalances := monteCarloPaths collect: [:path | path last].
sorted := finalBalances sorted.
^ sorted at: ((percentile / 100.0) * sorted size) ceiling.
SimulationAnalyzer >> generateReport
"生成文本分析报告"
| report |
report := String streamContents: [:stream |
stream nextPutAll: '========== 余额模拟深度分析报告 =========='; cr.
stream nextPutAll: '模拟周期: '; print: simulationResults size; nextPutAll: ' 个月'; cr.
stream nextPutAll: '初始本金: $'; print: simulationResults first balance; cr.
stream nextPutAll: '最终余额: $'; print: self finalBalance; cr.
stream nextPutAll: '期间最低余额: $'; print: self minimumBalance; cr.
stream nextPutAll: '期间最高余额: $'; print: self maximumBalance; cr.
stream nextPutAll: '平均余额: $'; print: self averageBalance; cr.
stream nextPutAll: '复合年增长率 (CAGR): '; print: (self growthRateCAGR * 100); nextPutAll: '%'; cr.
stream nextPutAll: '----------------------------------------'; cr.
stream nextPutAll: '蒙特卡洛分析 (1000次模拟):'; cr.
stream nextPutAll: ' 10% 乐观情景: $'; print: (self monteCarloPercentile: 90); cr.
stream nextPutAll: ' 50% 中位情景: $'; print: (self monteCarloPercentile: 50); cr.
stream nextPutAll: ' 90% 保守情景: $'; print: (self monteCarloPercentile: 10); cr.
stream nextPutAll: '========================================'; cr.
].
^report.
SimulationAnalyzer >> plotBalanceOverTime
"生成一个简单的ASCII走势图 (控制台友好)"
| balances maxBalance minBalance scale lines |
balances := simulationResults collect: [:each | each balance].
maxBalance := balances max.
minBalance := balances min.
scale := maxBalance - minBalance.
scale = 0 ifTrue: [scale := 1].
lines := OrderedCollection new.
1 to: 20 do: [:i | lines add: (String new: simulationResults size withAll: $ )].
balances withIndexDo: [:balance :idx |
| normalizedHeight lineIndex |
normalizedHeight := ((balance - minBalance) / scale) * 19.
lineIndex := 20 - normalizedHeight floor.
lineIndex := lineIndex max: 1.
lines at: lineIndex put: ((lines at: lineIndex) copyReplaceFrom: idx to: idx with: '*') .
].
lines do: [:line | Transcript show: line; cr].
Transcript show: '时间轴 (0 -> '; print: simulationResults size; nextPutAll: ' 个月)'; cr.
"============================================================================"
" 使用示例和演示代码"
"============================================================================"
demoBalanceSimulator
"演示完整的余额模拟流程"
| account engine analyzer monteCarloPaths |
"1. 配置账户"
account := Account new.
account principal: 50000.0. "初始本金 $50,000"
account annualRate: 5.0. "年利率 5%"
account monthlyIncome: 3000.0. "月收入 $3,000"
account monthlyExpense: 2500.0. "月支出 $2,500"
account startDate: (Date year: 2024 month: 1 day: 1).
account riskProfile: #balanced. "平衡型风险配置"
"2. 创建模拟引擎并执行基础模拟"
engine := SimulationEngine new.
engine account: account.
engine months: 120. "模拟10年 (120个月)"
"3. 运行确定性模拟"
Transcript clear.
Transcript show: '正在执行基础模拟...'; cr.
engine runSimulation.
"4. 分析结果"
analyzer := SimulationAnalyzer new.
analyzer simulationResults: engine simulationResults.
"5. 运行蒙特卡洛模拟 (1000条路径)"
Transcript show: '正在执行蒙特卡洛模拟 (1000次迭代)...'; cr.
monteCarloPaths := engine monteCarloSimulation: 1000.
analyzer monteCarloPaths: monteCarloPaths.
"6. 输出分析报告"
Transcript show: (analyzer generateReport); cr.
"7. 绘制走势图"
Transcript show: '余额走势 ASCII 图:'; cr.
analyzer plotBalanceOverTime.
"8. 输出风险事件日志"
Transcript show: '模拟期间发生的风险事件:'; cr.
engine events do: [:event |
Transcript show: event date printString; space; show: event description; cr.
].
^analyzer.
"============================================================================"
" 扩展功能: 敏感度分析"
"============================================================================"
Object subclass: #SensitivityAnalyzer
instanceVariableNames: 'baseAccount monthsToSimulate'
classVariableNames: ''
package: 'BalanceSimulator-Sensitivity'
SensitivityAnalyzer >> baseAccount: anAccount
baseAccount := anAccount.
SensitivityAnalyzer >> months: anInteger
monthsToSimulate := anInteger.
SensitivityAnalyzer >> analyzeRateVariation: rateRange
"分析不同利率下的最终余额"
| results |
results := OrderedCollection new.
rateRange do: [:rate |
| testAccount engine |
testAccount := baseAccount copy.
testAccount annualRate: rate.
engine := SimulationEngine new.
engine account: testAccount.
engine months: monthsToSimulate.
engine runSimulation.
results add: { rate. engine simulationResults last balance }.
].
^results.
SensitivityAnalyzer >> analyzeCashFlowVariation: flowMultipliers
"分析不同现金流倍数的影响"
| results originalCashFlow |
originalCashFlow := baseAccount netMonthlyCashFlow.
results := OrderedCollection new.
flowMultipliers do: [:multiplier |
| testAccount engine adjustedFlow |
testAccount := baseAccount copy.
adjustedFlow := originalCashFlow * multiplier.
"调整收入或支出来模拟现金流变化"
testAccount monthlyIncome: (baseAccount monthlyIncome + (adjustedFlow - originalCashFlow) max: 0).
testAccount monthlyExpense: (baseAccount monthlyExpense - (adjustedFlow - originalCashFlow) min: 0).
engine := SimulationEngine new.
engine account: testAccount.
engine months: monthsToSimulate.
engine runSimulation.
results add: { multiplier. engine simulationResults last balance }.
].
^results.
"============================================================================"
" 扩展功能: 多账户组合模拟"
"============================================================================"
Object subclass: #Portfolio
instanceVariableNames: 'accounts'
classVariableNames: ''
package: 'BalanceSimulator-Portfolio'
Portfolio >> initialize
accounts := OrderedCollection new.
^super initialize.
Portfolio >> addAccount: anAccount withWeight: weight
accounts add: { anAccount. weight }.
Portfolio >> simulatePortfolio: monthsCount
"模拟整个投资组合的总余额走势"
| totalBalances currentDates combinedResults |
totalBalances := OrderedCollection new.
currentDates := OrderedCollection new.
combinedResults := OrderedCollection new.
accounts do: [:pair |
| account weight engine |
account := pair first.
weight := pair second.
engine := SimulationEngine new.
engine account: account.
engine months: monthsCount.
engine runSimulation.
combinedResults add: { engine simulationResults. weight }.
].
"按时间点合并余额"
0 to: monthsCount do: [:monthIdx |
| total |
total := 0.
combinedResults do: [:result |
| path weight |
path := result first.
weight := result second.
total := total + ((path at: monthIdx + 1) balance * weight).
].
totalBalances add: total.
].
^totalBalances.
"============================================================================"
" 主执行入口 - 运行完整演示"
"============================================================================"
DemoRunner >> run
"执行完整演示并返回分析器"
^demoBalanceSimulator.
"执行演示"
DemoRunner new run.