You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia高级绘图实现及R转Julia对数收益率模拟代码报错修复

修复正态分布模拟对数收益的Julia代码错误

我有一段用R实现的、从正态分布模拟对数收益的代码,已经理解了逻辑,但不知道怎么完整转换成Julia代码。以下是我的R代码:

rt.sim<-rnorm(sim.size,mean=(mu_hat-s^2/2),sd=s)

Asset.sim<-rep(NA,sim.size)
Asset.sim[1]<-Asset[n]*exp(rt.sim[1])
for(i in 2:sim.size)Asset.sim[i]<-Asset.sim[i-1]*exp(rt.sim[i])

yl<-min(Asset)*0.85
yu<-max(Asset)*1.9
plot(ts(Asset),xlim=c(0,(n+sim.size)),ylim=c(yl,yu))
lines((n+1):(n+sim.size),Asset.sim,col="red",lwd=2)
grid(col="black",lwd=2)

我尝试写了Julia版本,但运行报错,请求帮忙修复:

FTSE = df[!,"FTSE"]
Asset = FTSE
sim.size = 500 #got error here

n = length(Asset)

## log-return
rt = diff(log.(Asset))

rbar = mean(rt)
s = sd(rt)
delta_t = 1
mu_hat = rbar+s^2/2
Random.seed!(123)
## Simulate log-return from Normal distribution
rt.sim = rand(Normal(s^2/2, s),sim.size)

Asset.sim = Vector{Int}(undef,sim.size)
Asset.sim[1] = Asset[n]*exp(rt.sim[1])
for i in 2:sim.size
    Asset.sim[i] = Asset.sim[i-1]*exp(rt.sim[i])
end
yl = min(Asset)*0.85
yu = max(Asset)*1.9
plot(ts(Asset),xlim=c(0,(n+sim.size)),ylim=c(yl,yu))
lines((n+1):(n+sim.size),Asset.sim,col="red",lwd=2)
# grid(col="black",lwd=2)

错误修复说明

  • 变量名修正:Julia中.是成员访问运算符,不能用于变量名,将sim.size、rt.sim、Asset.sim改为下划线命名的sim_size、rt_sim、asset_sim
  • 正态分布参数修正:对齐原R代码逻辑,模拟对数收益的均值应为mu_hat - s^2/2,而非s^2/2
  • 数组类型修正:资产价格是浮点数,将Vector{Int}(undef, sim_size)改为Vector{Float64}(undef, sim_size),或直接用zeros(Float64, sim_size)初始化更安全
  • 绘图逻辑修正:Julia需要加载Plots包,且没有原生ts()函数,直接用数值索引绘图,调整plot和plot!(对应R的lines)的语法,添加网格线

修复后的完整Julia代码

# 先加载必要的包
using DataFrames, Distributions, Plots, Statistics, Random

FTSE = df[!, "FTSE"]
asset = FTSE
sim_size = 500

n = length(asset)

# 计算对数收益
rt = diff(log.(asset))

rbar = mean(rt)
s = sd(rt)
mu_hat = rbar + s^2 / 2
Random.seed!(123)

# 模拟对数收益:对齐R代码的正态分布参数
rt_sim = rand(Normal(mu_hat - s^2/2, s), sim_size)

# 初始化模拟资产价格数组(浮点数类型)
asset_sim = zeros(Float64, sim_size)
asset_sim[1] = asset[n] * exp(rt_sim[1])
for i in 2:sim_size
    asset_sim[i] = asset_sim[i-1] * exp(rt_sim[i])
end

# 设置绘图范围
yl = minimum(asset) * 0.85
yu = maximum(asset) * 1.9

# 绘图:先画原始资产序列,再叠加模拟序列
plot(1:n, asset, xlim=(0, n+sim_size), ylim=(yl, yu), label="原始资产")
plot!(n+1:n+sim_size, asset_sim, color=:red, linewidth=2, label="模拟资产")
grid!(color=:black, linewidth=2)

内容的提问来源于stack exchange,提问作者XYZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:54:09