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
相关产品推荐
相关产品推荐

