我有一个Julia数据框,其中一列被称为'close',我想在数据框中添加另一个名为'sma'的列,这是一个简单的'close'移动平均线。感谢任何可以提供帮助的人!
我注意到代码amrod中存在问题。它没有考虑到SMA的第一长度,该SMA没有足够的先前数据点用于良好的SMA,并且还提供了要求的SMA的两倍。我把它更改为输入零到那一点,当我弄清楚它是如何工作时我也改变了变量名。
function makeSMA(data, SMA)
len = length(data)
y = Vector{Float64}(len)
for i in 1:SMA-1
y[i] = NaN
end
for i in SMA:len
y[i] = mean(data[i-(SMA-1):i])
end
return y
end
答案 0 :(得分:2)
检查一下:
function ma{T <: Real}(x::Vector{T}, wind::Int)
len = length(x)
y = Vector{Float64}(len)
for i in 1:len
lo = max(1, i - wind)
hi = min(len, i + wind)
y[i] = mean(x[lo:hi])
end
return y
end
x = collect(1:100)
y = ma(x, 4)
然后你可以hcat(x, y)
。
编辑: 如果你想要一个向后看的MA,你可以使用像
这样的东西function ma{T <: Real}(x::Vector{T}, wind::Int)
len = length(x)
y = Vector{Float64}(len)
for i in 1:len
if i < wind
y[i] = NaN
else
y[i] = mean(x[i - wind + 1:i])
end
end
return y
end