1、周的选择:节假日除外的日历周,本周所有的交易日【最多5个交易日】
2、四个价格的计算方法:
open = 第一天的open
close = 最后一天的close
high = MAX(所有的high)
low = LOW(所有的low)
3、如何计算同一个周包含哪些日子?
Dates包里的week()函数
df = DataFrame(XLSX.readtable("data/周线计算核对/6005851.xlsx","600585")...)
df[!,"week"] = df.day .|> Date .|> week
注意,周是会跨越年度的,如下所示:
image.png4、日线转成周线的代码【只处理lhlc】
计算结果:
image.png打开软件看盘软件,核对计算结果:
image.png附录:代码
module weekline
using Dates
using DataFrames
using DataFramesMeta
using CSV
using XLSX
include("common.jl")
df = DataFrame(XLSX.readtable("data/周线计算核对/6005851.xlsx","600585")...)
df[!,"week"] = df.day .|> Date .|> week
"""
日线的k线转成周线的k线
df:日线 dataframe
"""
function gen_weekly_kline(df):DataFrame
last_week = -1
start_idx = 1
end_idx = 1
kline_day = Date("1970-01-01") #周线的日期
kline_df = DataFrame(day = [], open = [], close = [], high = [], low = [])
for (idx, r) in zip(1:size(df, 1), eachrow(df))
println("======")
println(idx," ",r.day)
println("r.week = $(r.week)")
current_week = r.week
if last_week != current_week #新的一周
end_idx = idx - 1
if idx == 1
#不执行统计
#println("第一条记录!")
elseif idx > 1
println("start_idx = $(start_idx) ,end_idx = $(end_idx)")
#执行统计
#day = r.day
open = df[start_idx, :open]
close = df[end_idx, :close]
high = df[start_idx:end_idx, :high] |> maximum
low = df[start_idx:end_idx, :low] |> minimum
push!(kline_df, [kline_day, open, close, high, low])
println("kline_day = $(kline_day)")
end
start_idx = idx
last_week = r.week
end
kline_day = r.day
if idx == size(df,1) #最后一根日线的地方,需要生成一次周线
println("start_idx = $(start_idx) ,end_idx = $(idx)")
#执行统计
day = r.day
open = df[start_idx, :open]
close = df[idx, :close]
high = df[start_idx:idx, :high] |> maximum
low = df[start_idx:idx, :low] |> minimum
push!(kline_df, [day, open, close, high, low])
end
end
return kline_df
end
weekly_kline = gen_weekly_kline(df)
save_as_xlsx("data/周线计算核对/6005853.xlsx",weekly_kline)
end
网友评论