前言
又到了一年一度的春季躁动时期,最近看了一些研报,自己也学着动手实现一些研报里面的东西,感谢研报。
免责声明:本文为自己写着玩的,仅供参考,请勿照搬结论去实操。
摘要
本文关注点:Q3季度被基金加仓的股票,它在即将到来的春季躁动(统计范围:头年12年到次年4月)里涨跌幅有什么变化?
【1】持股基金家数的影响:
不是基金持有的家数越多,春季躁动就越能躁,正好相反,基金持有越少的股票,波动越大。
【2】持股占流通市值比例的影响
✦ 总体来看,持股占比大的个股,不一定就能够上涨
✦ 持股占比越小,股价波动越大
✦ 持股占比不超过15%的时候,上涨的概率平均为53%
✦ 持股占比在3% - 5.5%区间,上涨的概率平均为55.9%
【3】加减仓带来的影响:
用【加减仓幅度占当时流通市值的百分比】作为一个观察指标,观察它与【春季躁动涨跌幅】的关系
加仓情况:
总体情况:上涨次数4514次,下跌次数3743次,上涨概率54.7%, 下跌概率45.3%。基金加仓的股票赢面比较大,特别是当加仓幅度占比流通市在0~4%的时候,区间的上涨概率平均达到56%
减仓情况:
总体情况:上涨次数2775次,下跌次数2712次,上涨概率50.6%, 下跌概率49.4%,基金减仓不一定必然下跌。
甚至小幅减仓的股票,减仓幅度在(0~4%)的股票,春季躁动上涨概率达到51.4%。
【4】最优方案
持股占流通市值比例 在0~5.6%
加仓占流通市值比例 在0~4%
【5】希望在本次春季躁动中吃到肉的朋友,应该关注更多的因素
✦ 十四五规划
✦ 近期的多次经济会议
✦ 美国大选(关注政策,因为涉及到贸易、人才网来、技术交流,特别是芯片相关产业被制裁状况。。。。。大豆。。。。。。种子。。。。。。)
✦ 分析历史上各个板块甚至各只股票在春季躁动中的表现,挖掘一些关联因素
✦ 题材和新闻
正文开始
一、源数据——Q3基金持仓与春季躁动涨跌幅信息
二、Q3季度基金持仓与涨跌幅的散点图
y轴是春季躁动的涨跌幅(%),x轴是持有该股的基金的家数。
(一)散点图分析:
👉👉观点:从图像上看,持仓家数很多的股票,春季躁动时大幅波动的可能性比较小。
👉👉猜测:多家基金持仓的股票,市值比较大,不容易躁动。
从图上看,上涨幅度大于下跌的幅度
(二)相关性分析:【Q3持仓的基金家数】与【春季躁动涨跌幅】之间,线性相关的系数为:0.0022541672526532022。几乎无关。
附:基金重仓的个股一览
(三)分析【持股占流通市值比例%】与【涨跌幅%】的关系
【持股占流通市值比例%】与【涨跌幅%】
总体来看,持股所占比例越小,股价长得越好。这个图可以对比【持股家数】与【涨跌幅】关系。
在指标【持股占流通市值比例%】的各个阶段,【上涨次数】和【下跌次数】观察
从图上看,在10%以内,上涨次数显著大于下跌次数,也就是取胜的概率比较大。
取胜的次数观察
取胜的概率
上涨概率与持股比例 的 线性相关系数为:-0.6317735418647588
👉👉结论
✦ 总体来看,持股占比大的个股,不一定就能够上涨
✦ 持股占比越小,股价波动越大
✦ 持股占比不超过15%的时候,上涨的概率平均为53%
✦ 持股占比在3% - 5.5%区间,上涨的概率平均为55.9%
三、【Q3季度加仓】与【春季躁动涨跌幅】的关系
(一) 图形总结:
👉👉粗略来看:加仓不一定上涨,减仓不一定下跌,加减仓幅度为0%附近的波动最大。
(二)相关系数: 【季报持仓变动(万股)】与【春季躁动涨跌幅】之间,线性相关的系数为:0.005090697804711154,基本为0
(三)加仓时上涨与下跌次数统计*
(1)加仓的情况:
👉👉总体情况:上涨次数4514次,下跌次数3743次,上涨概率54.7%, 下跌概率45.3%。基金加仓的股票赢面比较大
#代码
df1 = q_df |> copy
df1[!,"加减仓flag"] = df1[!,"季报持仓变动(万股)"] .|> val-> val > 0.0 ? "+" : "-"
df1_up = @linq df1 |> where((:加减仓flag .== "+").&(:chg .>= 0.0))
println("加仓情况下,春季躁动上涨的家数:$(size(df1_up)[1])")
df1_down = @linq df1 |> where((:加减仓flag .== "+").&(:chg .<= 0.0))
println("加仓情况下,春季躁动下跌的家数:$(size(df1_down)[1])")
4514 / (4514 + 3743)
3743 / (4514 + 3743)
draw_gain_line2(@linq df1 |> where((:加减仓flag .== "+")))
**(2)减仓的情况:
👉👉总体情况:上涨次数2775次,下跌次数2712次,上涨概率50.6%, 下跌概率49.4%,基金减仓不一定必然下跌。
👉👉猜测:应该细分基金减仓的原因,如果是基本面变坏或者黑天鹅,另当别论,不然一般的减仓,春季躁动时,股价不一定必然下跌
#减仓时上涨与下跌的次数统计
df1 = q_df |> copy
df1[!,"加减仓flag"] = df1[!,"季报持仓变动(万股)"] .|> val-> val > 0.0 ? "+" : "-"
df1_up = @linq df1 |> where((:加减仓flag .== "-").&(:chg .>= 0.0))
println("减仓情况下,春季躁动上涨的家数:$(size(df1_up)[1])")
df1_down = @linq df1 |> where((:加减仓flag .== "-").&(:chg .<= 0.0))
println("减仓情况下,春季躁动下跌的家数:$(size(df1_down)[1])")
四、统一刻度,【加减仓万股】 统一成 【加减仓占流通市值比例】,统一量纲,方便分析
#👉👉统一x轴后的图形👉👉
df3 = q_df |> copy
df3[!,"上季报持股总量(万股)"] = df3[!,"持股总量(万股)"] .- df3[!,"季报持仓变动(万股)"]
df3[!,"上季报持股占流通股比(%)"] = df3[!,"上季报持股总量(万股)"] .* df3[!,"持股占流通股比(%)"] ./ df3[!,"持股总量(万股)"]
df3[!,"加减仓占流通股比(%)"] = df3[!,"持股占流通股比(%)"] .- df3[!,"上季报持股占流通股比(%)"]
CSV.write("data/df3.csv",df3)
#画图
x = df3[!,"加减仓占流通股比(%)"]
y = df3.chg
p1 = plot(x,y,w = 1,seriestype = :scatter,size=(800,400),legend = false, bg = RGB(0.2, 0.2, 0.2))
display(p1)
计算相关性:
cor(df3[!,"加减仓占流通股比(%)"],q_df.chg)|> println
0.014869453164465881
加减仓处在什么范围内时,胜率最高
上涨次数与下跌次数的观察
上涨次数是否多余下跌的次数【上涨次数-下跌次数】
上涨的概率
加仓幅度占流通市值百分比处在(0,4%)以内的时候,上涨概率大于50%且最稳定,平均值为56%,
五、个人冒昧总结:
本文关注点:Q3季度被基金加仓的股票,它在即将到来的春季躁动(统计范围:头年12年到次年4月)里涨跌幅有什么变化?
【1】持股基金家数的影响:
不是基金持有的家数越多,春季躁动就越能躁,正好相反,基金持有越少的股票,波动越大。(详见 二、(二))
【2】持股占流通市值比例的影响
✦ 总体来看,持股占比大的个股,不一定就能够上涨
✦ 持股占比越小,股价波动越大
✦ 持股占比不超过15%的时候,上涨的概率平均为53%
✦ 持股占比在3% - 5.5%区间,上涨的概率平均为55.9%
【3】加减仓带来的影响:
用【加减仓幅度占当时流通市值的百分比】作为一个观察指标,观察它与【春季躁动涨跌幅】的关系
加仓情况:
总体情况:上涨次数4514次,下跌次数3743次,上涨概率54.7%, 下跌概率45.3%。基金加仓的股票赢面比较大,特别是当加仓幅度占比流通市在0~4%的时候,区间的上涨概率平均达到56%
减仓情况:
总体情况:上涨次数2775次,下跌次数2712次,上涨概率50.6%, 下跌概率49.4%,基金减仓不一定必然下跌。
甚至小幅减仓的股票,减仓幅度在(0~4%)的股票,春季躁动上涨概率达到51.4%。
【4】希望在本次春季躁动中吃到肉的朋友,应该关注更多的因素
✦ 十四五规划
✦ 近期的多次经济会议
✦ 美国大选(关注政策,因为涉及到贸易、人才网来、技术交流,特别是芯片相关产业被制裁状况。。。。。大豆。。。。。。种子。。。。。。)
✦ 分析历史上各个板块甚至各只股票在春季躁动中的表现,挖掘一些关联因素
✦ 题材和新闻
本文结束,拍砖的朋友手下留情,附上草稿代码(未作整理,自己留底用)。
六、猜测的最优方案
七、附录:分析时用到的手稿代码
julia + juno + jqdata
using CSV
using DataFrames
using DataFramesMeta
using Dates
using XLSX
using Statistics
include("common.jl")
#👉👉读取各年的基金持股信息,放入一个表中👈👈
all_years = 2010:2020
all_df = DataFrame()
for years in all_years
println(years)
df = DataFrame(XLSX.readtable("data/各年Q3被基金重仓后的股票/重仓持股(汇总)$(years)年Q3.xlsx","Sheet1")...)
df[!,"躁动年份"] .= years + 1
append!(all_df,df)
end
all_df
all_df |> names |> println
#👉👉读取春季躁动各年的 统计时间段👈👈
kpc_df = DataFrame(XLSX.readtable("data/年份开平仓日期.xlsx","sheet1")...)
kpc_dict = Dict()
for r in kpc_df |> eachrow
years = r.年份
kc_date = r.开仓日期
pc_date = r.平仓日期
kpc_dict[years] = (开仓日期 = kc_date, 平仓日期 = pc_date)
end
kpc_dict
#👉👉增加开仓时点和平仓时点【春季躁动起始时段】👈👈
all_df[!,"开仓日期"] .= Date("1970-01-01")
all_df[!,"平仓日期"] .= Date("1970-01-01")
for r in eachrow(all_df)
躁动年份 = r.躁动年份
if 躁动年份 ∈ [y for y in 2011:2020]
r.开仓日期 = kpc_dict[躁动年份].开仓日期
r.平仓日期 = kpc_dict[躁动年份].平仓日期
end
end
first(all_df,10) |> println
#读取股票的k线数据,保存到dict里面
codes = all_df.代码 |> unique
#👉👉读取沪深300的数据👈👈
kind = "指数"
stock = "399300"
kline_directory = "D:/juliaWorkSpace/k线" #k线位置
df300 = read_kline(kind, stock, kline_directory)
df300 |> display
#👉👉读取股票信息表👈👈
stocks_dict = Dict()
for stock in codes
println(stock)
kind = "股票"
stock = split(stock,".")[1] |> string
if length(stock) < 6 #有港股代码,需要排除
continue #for
end
kline_directory = "D:/juliaWorkSpace/k线" #k线位置
df = read_kline(kind, stock, kline_directory)
#判断停牌,用沪深300来判断,左连接操作
df = leftjoin(select(df300, ["day"]), df, on = :day)
df[!, "停牌"] = df.close .|> ismissing
#填补空值 ismissing的值,用上一个单元格的值来填补
for idx = 1:size(df)[1]
if idx > 1
for col in names(df)
if ismissing(df[idx, col])
df[idx, col] = df[idx-1, col]
end
end
end
end
stocks_dict[stock] = df
end
stocks_dict
#👉👉生成涨跌幅数据👈👈
all_df[!, "chg"] .= 0.0
for r in eachrow(all_df)
code = split(r.代码, ".")[1] |> string
if code |> length == 6
chg = get_price_chg(code, r.开仓日期, r.平仓日期, stocks_dict).期末涨幅
r.chg = chg == "no_price" ? NaN : chg
if isnan(r.chg)
println(code,r.开仓日期)
end
end
end
all_df
CSV.write("data/ddddd.csv",all_df)
first(all_df,10) |> println
#👉👉分析数据👉👉
q_df = @linq all_df |> where(:躁动年份 .< 2021)
gd = groupby(q_df,[:躁动年份,:所属行业])
tj_df = combine(gd,nrow,:chg => mean)
tj_df = sort(tj_df,[:躁动年份,:chg_mean],rev = true)
CSV.write("data/各年各行业春季躁动最佳行业.csv",tj_df)
cor(q_df.持有基金数,q_df.chg)|> println
#👉👉画图分析👈👈
using Plots
gr()
Plots.GRBackend()
"""
功能:画收益曲线,包含【回测组合收益线】 + 【基准收益线】
输入:dataframe,,包含“基准”和“组合”的价格时间系列,【日期】,【基准】,【组合】
输出:data/收益曲线.svg
"""
function draw_gain_line(df)
x = df.持有基金数
y = df.chg
p1 = plot(x,y,w = 1,seriestype = :scatter,size=(800,400),legend = false, bg = RGB(0.2, 0.2, 0.2))
#savefig("data/收益曲线.svg")
#println("收益曲线保存在:data/收益曲线.svg")
display(p1)
end
draw_gain_line(q_df)
"""
【季报持仓变动】与【涨跌幅】关系
"""
function draw_gain_line2(df)
x = df[!,"季报持仓变动(万股)"]
y = df.chg
p1 = plot(x,y,w = 1,seriestype = :scatter,size=(800,400),legend = false, bg = RGB(0.2, 0.2, 0.2))
#savefig("data/收益曲线.svg")
#println("收益曲线保存在:data/收益曲线.svg")
display(p1)
end
cor(q_df[!,"季报持仓变动(万股)"],q_df.chg)|> println
draw_gain_line2(q_df)
q_df |> names
#【持仓占流通市值比例】与【chg】的关系
x = q_df[!,"持股占流通股比(%)"]
y = q_df.chg
p1 = plot(x,y,w = 1,seriestype = :scatter,size=(800,400),legend = false, bg = RGB(0.2, 0.2, 0.2))
display(p1)
#👉👉加仓时上涨与下跌次数统计👉👉
df1 = q_df |> copy
df1[!,"加减仓flag"] = df1[!,"季报持仓变动(万股)"] .|> val-> val > 0.0 ? "+" : "-"
df1_up = @linq df1 |> where((:加减仓flag .== "+").&(:chg .>= 0.0))
println("加仓情况下,春季躁动上涨的家数:$(size(df1_up)[1])")
df1_down = @linq df1 |> where((:加减仓flag .== "+").&(:chg .<= 0.0))
println("加仓情况下,春季躁动下跌的家数:$(size(df1_down)[1])")
4514 / (4514 + 3743)
3743 / (4514 + 3743)
draw_gain_line2(@linq df1 |> where((:加减仓flag .== "+")))
#👉👉减仓时上涨与下跌的次数统计👉👉
df1 = q_df |> copy
df1[!,"加减仓flag"] = df1[!,"季报持仓变动(万股)"] .|> val-> val > 0.0 ? "+" : "-"
df1_up = @linq df1 |> where((:加减仓flag .== "-").&(:chg .>= 0.0))
println("减仓情况下,春季躁动上涨的家数:$(size(df1_up)[1])")
df1_down = @linq df1 |> where((:加减仓flag .== "-").&(:chg .<= 0.0))
println("减仓情况下,春季躁动下跌的家数:$(size(df1_down)[1])")
draw_gain_line2(@linq df1 |> where((:加减仓flag .== "-")))
2775 / (2775 + 2712)
2712 / (2775 + 2712)
#👉👉统一x轴后的图形👉👉
df3 = q_df |> copy
df3[!,"上季报持股总量(万股)"] = df3[!,"持股总量(万股)"] .- df3[!,"季报持仓变动(万股)"]
df3[!,"上季报持股占流通股比(%)"] = df3[!,"上季报持股总量(万股)"] .* df3[!,"持股占流通股比(%)"] ./ df3[!,"持股总量(万股)"]
df3[!,"加减仓占流通股比(%)"] = df3[!,"持股占流通股比(%)"] .- df3[!,"上季报持股占流通股比(%)"]
CSV.write("data/df3.csv",df3)
#画图
x = df3[!,"加减仓占流通股比(%)"]
y = df3.chg
p1 = plot(x,y,w = 1,seriestype = :scatter,size=(800,400),legend = false, bg = RGB(0.2, 0.2, 0.2))
display(p1)
cor(df3[!,"加减仓占流通股比(%)"],q_df.chg)|> println
#持仓占比与chg的关系
#画图
x = df3[!,"持股占流通股比(%)"]
y = df3.chg
p1 = plot(x,y,w = 1,seriestype = :scatter,size=(800,400),legend = false, bg = RGB(0.2, 0.2, 0.2))
display(p1)
#👉👉加仓时上涨与下跌次数统计👉👉
df4 = df3 |> copy
df4[!,"加减仓flag"] = df4[!,"季报持仓变动(万股)"] .|> val-> val > 0.0 ? "+" : "-"
df4_up = @linq df4 |> where((:加减仓flag .== "+").&(:chg .>= 0.0))
println("加仓情况下,春季躁动上涨的家数:$(size(df1_up)[1])")
df4_down = @linq df4 |> where((:加减仓flag .== "+").&(:chg .<= 0.0))
println("加仓情况下,春季躁动下跌的家数:$(size(df1_down)[1])")
4514 / (4514 + 3743)
3743 / (4514 + 3743)
#画图
f(df4) = begin
x = df4[!, "加减仓占流通股比(%)"]
y = df4.chg
p1 = plot( x,y,w = 1,seriestype = :scatter,size = (800, 400),legend = false,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(@linq df4 |> where(:加减仓flag .== "+" ))
f(@linq df4 |> where(:加减仓flag .== "-" ))
cor(df4_up[!,"加减仓占流通股比(%)"],df4_up.chg)|> println
"""
细分刻度后,统计加减仓每个刻度区间的胜率
"""
function fenxi(pct_start,pct_end,df3)
q_df = df3[df3[!,"加减仓占流通股比(%)"] .|> (val) -> pct_start < val <= pct_end,:] #注意,不能全闭或者全开
CSV.write("data/q_df111.csv",q_df)
println(size(q_df))
if size(q_df,1) > 0
up_df = @linq q_df |> where(:chg .>= 0.0)
println("up:",size(up_df,1))
down_df = @linq q_df |> where(:chg .<= 0.0)
println("down:",size(down_df,1))
(up = size(up_df,1),down = size(down_df,1) )
else
(up = 0,down = 0 )
end
end
"""
给定一个区间,按照步进值,划分成小区间
"""
function gen_pct_step()
step_pct = 0.5
start_pct = -40
end_pct = 40
current_pct = 0.0
res = []
for i in 1:10000
pct1 = start_pct
pct2 = pct1 + step_pct
push!(res,[pct1,pct2])
if pct2 < end_pct
start_pct += step_pct
else
break
end
end
res
end
pcts = gen_pct_step()
pcts .|> println
res_df = DataFrame(pct1 = [],pct2 = [],ups = [],downs = [])
for (pct1,pct2) in pcts
println(pct1,pct2)
res = fenxi(pct1,pct2,df3)
push!(res_df,[pct1,pct2,res.up,res.down])
end
res_df
CSV.write("data/res_df.csv",res_df)
#👉👉画图 显示在各个区间里面,上涨次数和下跌的次数👉👉
f(df4) = begin
x = df4.pct2
y = [df4.ups,df4.downs]
p1 = plot( x,y,w = 1,seriestype = :line,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df)
#👉👉显示在各个区间里面,【上涨次数】减去【下跌次数】👉👉
res_df[!,"和"] = res_df.ups .+ res_df.downs
res_df[!,"上涨减下跌次数"] = res_df.ups .- res_df.downs
f(df4) = begin
x = df4.pct2
y = df4.上涨减下跌次数
p1 = plot( x,y,w = 1,seriestype = :line,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df)
#👉👉上涨的概率分析👉👉
res_df[!,"上涨概率"] .= 0.0
for r in eachrow(res_df)
if r.和 > 0.0
r.上涨概率 = r.ups / r.和 * 100
end
end
f(df4) = begin
x = df4.pct2
y = df4.上涨概率
p1 = plot( x,y,w = 1,seriestype = :line,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df)
cor(res_df.pct2,res_df.上涨概率) |> println
CSV.write("data/res_df.csv",res_df)
#👉👉分析【持股占流通市值比例】 与 【chg】之间的关系👉👉
"""
统计【持仓占流通市值比例】的细分刻度区间,上涨的概率
"""
function fenxi2(pct_start,pct_end,df3)
q_df = df3[df3[!,"持股占流通股比(%)"] .|> (val) -> pct_start < val <= pct_end,:] #注意,不能全闭或者全开
if size(q_df,1) > 0
up_df = @linq q_df |> where(:chg .>= 0.0)
println("up:",size(up_df,1))
down_df = @linq q_df |> where(:chg .<= 0.0)
println("down:",size(down_df,1))
(up = size(up_df,1),down = size(down_df,1) )
else
(up = 0,down = 0 )
end
end
"""
给定一个区间,按照步进值,划分成小区间
"""
function gen_pct_step2(step_pct,start_pct,end_pct)
step_pct = step_pct
start_pct = start_pct
end_pct = end_pct
current_pct = 0.0
res = []
for i in 1:10000
pct1 = start_pct
pct2 = pct1 + step_pct
push!(res,[pct1,pct2])
if pct2 < end_pct
start_pct += step_pct
else
break
end
end
res
end
pcts = gen_pct_step2(0.5,0.0,60.0)
pcts .|> println
res_df2 = DataFrame(pct1 = [],pct2 = [],ups = [],downs = [])
for (pct1,pct2) in pcts
println(pct1,pct2)
res = fenxi2(pct1,pct2,df3)
push!(res_df2,[pct1,pct2,res.up,res.down])
end
res_df2
CSV.write("data/res_df2.csv",res_df2)
#👉👉画图 显示在各个区间里面,上涨次数和下跌的次数👉👉
f(df4) = begin
x = df4.pct2
y = [df4.ups,df4.downs] #line
p1 = plot( x,y,w = 1,seriestype = :scatter,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df2)
#👉👉显示在各个区间里面,【上涨次数】减去【下跌次数】👉👉
res_df2[!,"和"] = res_df2.ups .+ res_df2.downs
res_df2[!,"上涨减下跌次数"] = res_df2.ups .- res_df2.downs
f(df4) = begin
x = df4.pct2
y = df4.上涨减下跌次数
p1 = plot( x,y,w = 1,seriestype = :line,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df2)
#👉👉上涨的概率分析👉👉
res_df2[!,"上涨概率"] .= 0.0
for r in eachrow(res_df2)
if r.和 > 0.0
r.上涨概率 = r.ups / r.和 * 100
end
end
f(df4) = begin
x = df4.pct2
y = df4.上涨概率
p1 = plot( x,y,w = 1,seriestype = :line,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df2)
f(df4) = begin
x = df4.pct2
y = df4.上涨概率
p1 = plot( x,y,w = 1,seriestype = :scatter,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df2)
CSV.write("data/res_df2.csv",res_df2)
cor(res_df2.pct2,res_df2.上涨概率) |> println
#👉👉猜测的最优方案验证👉👉
#加仓占比在 【0%-4%】 持股占比【0-10%】
df3 |> names |> println
df33 = df3 |> copy
df33 = df33[df33[!,"加减仓占流通股比(%)"] .|> item-> 0.0 < item <= 4.0,:]
df33 = df33[df33[!,"持股占流通股比(%)"] .|> item-> 0.0 < item <= 10.0,:]
f(df4) = begin
x = df4[!,"持股占流通股比(%)"]
y = df4.chg
p1 = plot( x,y,w = 1,seriestype = :scatter,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(df33)
cor(df33[!,"持股占流通股比(%)"] ,df33.chg) |> println
pcts = gen_pct_step2(0.2,0.0,10.0)
pcts .|> println
res_df3 = DataFrame(pct1 = [],pct2 = [],ups = [],downs = [])
for (pct1,pct2) in pcts
println(pct1,pct2)
res = fenxi2(pct1,pct2,df33)
push!(res_df3,[pct1,pct2,res.up,res.down])
end
res_df3
#👉👉画图 显示在各个区间里面,上涨次数和下跌的次数👉👉
f(df4) = begin
x = df4.pct2
y = [df4.ups,df4.downs] #line
p1 = plot( x,y,w = 1,seriestype = :scatter,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df3)
#👉👉显示在各个区间里面,【上涨次数】减去【下跌次数】👉👉
res_df3[!,"和"] = res_df3.ups .+ res_df3.downs
res_df3[!,"上涨减下跌次数"] = res_df3.ups .- res_df3.downs
f(df4) = begin
x = df4.pct2
y = df4.上涨减下跌次数
p1 = plot( x,y,w = 1,seriestype = :line,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df3)
#👉👉上涨的概率分析👉👉
res_df3[!,"上涨概率"] .= 0.0
for r in eachrow(res_df3)
if r.和 > 0.0
r.上涨概率 = r.ups / r.和 * 100
end
end
f(df4) = begin
x = df4.pct2
y = df4.上涨概率
p1 = plot( x,y,w = 1,seriestype = :line,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df3)
f(df4) = begin
x = df4.pct2
y = df4.上涨概率
p1 = plot( x,y,w = 1,seriestype = :scatter,size = (800, 400),legend = true,bg = RGB(0.2, 0.2, 0.2),)
display(p1)
end
f(res_df3)
CSV.write("data/res_df3.csv",res_df3)
cor(res_df3.上涨概率 ,res_df3.pct2) |> println
res_df31 = @linq res_df3 |> where(0.0 .< :pct2 .< 5.6)
cor(res_df31.上涨概率 ,res_df31.pct2) |> println