一、通达信中KDJ的计算方法
通达信软件中的KDJ计算方式二、LLV()、HHV()函数
通达信LLV,HHV函数与talib中的MIN,MAX的区别
根据原来官方文档,LLV和HHV函数在计算的时候,如果当前的移动窗口数据量不足N的时候,有几个取几个
而,ta.MIN和ta.MAX在计算的时候,当窗口数量不足N的时候,返回空值
#通达信版本LLV
function LLV(price,n)
ary = ta.MIN(price,n)
#[1~n-1]前面的空值处理
for i in 1:n-1
ary[i] = minimum(@view price[1:i])
end
return ary
end
#通达信版本HHV
function HHV(price,n)
ary = ta.MAX(price,n)
#[1~n-1]前面的空值处理
for i in 1:n-1
ary[i] = maximum(@view price[1:i])
end
return ary
end
function test()
df = DataFrame()
df.close = rand(30)
df.min5 = ta.MIN(df.close,5) #talib版本的LLV
df.LLV5 = LLV(df.close,5)
df.max5 = ta.MAX(df.close,5) #talib版本的HHV
df.HHV5 = HHV(df.close,5)
df |> display
end
test()
计算结果
talib和通达信HHV,LLV的区别
三、KDJ的计算(完整代码)
3.1 ====函数定义====
#通达信版本的LLV
function LLV(price,n)
ary = ta.MIN(price,n)
#[1~n-1]前面的空值处理
for i in 1:n-1
ary[i] = minimum(@view price[1:i])
end
return ary
end
#通达信版本的HHV
function HHV(price,n)
ary = ta.MAX(price,n)
#[1~n-1]前面的空值处理
for i in 1:n-1
ary[i] = maximum(@view price[1:i])
end
return ary
end
# 通达信版本的SMA函数
function SMA(X::Array{Float64,1},N::Int64,M::Int64)
Y::Float64 = 0.0
res = Array{Float64,1}(undef,length(X))
for (i,x) in zip(1:length(X),X)
Y = (M * x + (N-M) * Y) / N
res[i] = Y
end
return res
end
#计算KDJ指标
function KDJ(CLOSE,LOW,HIGH;N=9,M1=3,M2=3) #注意分号
RSV = (CLOSE .- LLV(LOW,N)) ./ (HHV(HIGH,N) .- LLV(LOW,N)) .* 100
K = SMA(RSV,M1,1)
D = SMA(K,M2,1)
J = @.begin 3 * K - 2 * D end
return(K=K,D=D,J=J)
end
3.2 ====读取k线计算指标====
function test()
df = DataFrame(XLSX.readtable("D:/300589.xlsx", "300589")...)
df |> names |> println
col = [:day,:open,:high,:low,:close,:vol,:K1,:D1,:J1]
rename!(df,col)
df.day = df.day .|> day-> begin
replace(day,"/"=>"-") |>
day -> replace(day," "=>"") |>
Date
end
df.open = df.open .|> float
df.high = df.high .|> float
df.low = df.low .|> float
df.close = df.close .|> float
df.K1 = df.K1 .|> float
df.D1 = df.D1 .|> float
df.J1 = df.J1 .|> float
df |> display
CLOSE = df.close
LOW = df.low
HIGH = df.high
"======" |> display
kdj = KDJ(CLOSE,LOW,HIGH) #,N=9,M1=3,M2=3
df.K = kdj.K
df.D = kdj.D
df.J = kdj.J
df |> names |> println
df |> display
CSV.write("D:/D.csv",df)
df
end
计算的结果【(1)是通达信计算的数据,(2)是Julia计算的数据】
kdj计算结果3.3 原有kdj和新计算的kdj进行画图对比
using Plots
gr()
function draw(df)
df = @linq df |> where(Date("2017-01-15") .< :day .< Date("2017-06-01"))
x = df.day
plot(x,[df.K1,df.J1,df.D1]) #原有的KDJ数据
plot!(x,[df.K,df.J,df.D]) #新计算的KDJ数据
end
draw(df)
网友评论