# 一、前言
这份数据分析报告,并不适用于所有的股,它仅适用于**有一定规律、长期上涨、有主力的庄股**。
这不是策略,这是一份数据分析报告。那么,我为什么要写这个数据分析呢:
- 1、在写这个数据分析报告之前,我正着手准备写一个日内做T的量化策略
- 2、因为做那个策略时,我对买卖点设置在哪犹豫不决,于是我认为我非常有必要做个数据分析,来确定买卖点设在什么位置,成功率最高。
- 3、关于日内做T的好处,很多人不理解,认为不如拿着不动,做T容易T飞,或者认为做T赚到的差价还不够手续费(你是不是傻,手续费才几块钱,难道你买股票只买一手?)但实际上,做T有很多好处,它可以提高你抵御风险的能力(当然,如果你是超级短线,追涨停板的,就当我没说,你适合全仓梭哈,第二或者第三天就夹尾巴跑),而且我给你们算一笔账,如果你坚持每天降低1.5%的成本,按一年有200个交易日计算,你一年可以多赚1964%的额外收益,是不是很惊人?
- 4、如果你买入一只股票,拿着不动,那你这份收益就是被动收益,不可控的。但每天在保证率高的范围内做T,则这部分收益就是你的主动收益,是可控的。
- 5、我认为,不管你是做手动交易,还是量化交易,找到日内成功率最高的买卖点,都是非常有益的一件事。所以你值得把我这份数据分析报告读完。
# 二、分析成果
- 1、本次数据分析选择我最看好的股票:士兰微600460,选择的区间段为2020年12月2日至今
- 2、本次数据分析,我以85%为保证率
- 3、每日最大振幅有85%的概率在4.221%以上
- 4、每日最大跌幅有85%的概率在0.635%以上
- 5、每日最大涨幅有85%的概率在1.033%以上
- 6、如果每天往下0.635%设置买点,往上1.033%设置卖点,则每天可以有1.679%的额外收益,扣除手续费,至少也有1.5%
- 7、如果你坚持每天降低1.5%的成本,按一年有200个交易日计算,你一年可以多赚1964%的额外收益,是不是很惊人?
- 8、至于4.221%的振幅,你也完全可以拿到,只不过需要你有非常好的心态去盯盘,但我建议你不要盯盘,盯盘是非常愚蠢的行为,因为容易被突然的暴跌乱了心智
# 三、数据分析
## 1、导入包
```
import pandas as pd
import tushare as ts
# from matplotlib import pyplot as plt #我为什么不用matplotlib呢,因为它的作图速度实在太慢了,不能忍啊
from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.globals import SymbolType
from pyecharts.charts import Pie
```
## 2、获取数据
###设置接口
```
ts.set_token("我的token")
pro = ts.pro_api()
```
###获取数据
```
daily=pro.daily(ts_code="600460.SH",fields='trade_date,open,close,high,low')
```
###简单处理数据
让它们按日期升序排列
```
daily.index = pd.to_datetime(daily["trade_date"])
daily.drop(columns=["trade_date"], inplace=True)
daily.sort_index(inplace=True)
```
###保存数据
```
daily.to_csv("士兰微每日行情数据.csv")
```
## 3、数据分析过程
###重新加载数据
```
file=open("士兰微每日行情数据.csv",encoding='utf_8_sig')
daily=pd.read_csv(file)
```
###计算过程
计算每日振幅*
```
daily["振幅(%)"]=(daily["high"]/daily["low"]-1)*100
```
计算每日最大跌幅(相较于开盘价)和最大涨幅(相较于开盘价)
```
daily["最大跌幅(%)"]=(1-daily["low"]/daily["open"])*100
daily["最大涨幅(%)"]=(daily["high"]/daily["open"]-1)*100
```
保存
```
daily.to_csv("士兰微每日行情数据_处理后.csv")
```
重新加载数据
```
file=open("士兰微每日行情数据_处理后.csv",encoding='utf_8_sig')
daily=pd.read_csv(file)
```
**可视化**
将数据分割,只要20201202以后的数据
(因为数据太多会导致作图时间很久, 而且完全没必要,长达18年的数据,主力不知道都还了多少批了,风格早就换了,没有研究价值)
```
daily.index=daily['trade_date']
daily_now=daily["2020-12-02":]
```
绘出振幅分布的散点图
```
X1=daily_now["振幅(%)"].tolist()
X2=daily_now["最大跌幅(%)"].tolist()
X3=daily_now["最大涨幅(%)"].tolist()
Y=daily_now.index.tolist()
# 为啥要加上这一步呢,因为pyecharts不支持DataFrame形式的某列作为X,只支持list形式的
c = (
Scatter()
.add_xaxis(Y)
.add_yaxis('振幅(%)', X1)
.add_yaxis("最大跌幅(%)",X2)
.add_yaxis("最大涨幅(%)",X3)
.set_global_opts(title_opts=opts.TitleOpts(title="振幅、最大跌幅、最大涨幅分布图"))
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)
c.render_notebook()
```

⇑由上图可知,最大振幅集中在4%-9%之间,最大跌幅和最大涨幅,都集中在0%-3%之间
计算最大概率出现的最大振幅(表述得有点拗口,如果不理解我的意思,请继续往下看)
```
# 将最大振幅出现的区间分成10组
cut1=pd.cut(X1,bins=10)
# 统计每个区间出现的次数
cut1_count=cut1.value_counts()
# 统计这些区间出现次数占总次数的百分比(%)
cut1_count_percent=cut1_count/len(X1)*100
cut1_count_percent
```
作图
```
pie_names=["(-0.0127, 0.635]","(0.635, 12.692] "]
pie_detail1=int(cut2_count[0])
pie_detail2=int(cut2_count[1:].sum())
pie_details=[pie_detail1,pie_detail2]
pie=(
Pie(init_opts=opts.InitOpts(width='720px', height='320px')) #自定义画布大小
.add(series_name='', data_pair=[(i, j)for i, j in zip(pie_names, pie_details)]) #遍历数据
.set_global_opts(title_opts=opts.TitleOpts(title="最大跌幅范围(%)",subtitle="统计区间为2020-12-02至今")) #添加主、副标题
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")) #添加数据标签
)
pie.render_notebook()
```

⇑ 由以上结果可知:
最大跌幅在(-0.0127, 0.635] 区间的概率为15.075%。
在(0.635, 12.692]区间的概率为100%-15.075%=84.925%
换句话说,每天最大跌幅在0.635%以上的概率高达84.925%≈85%,这是个非常高的概率,也就是说,我们每天设一个比开盘价低0.635%的价格,有85%的概率能买进(在股价上升阶段,能买进是非常开心的一件事,很多人做T吧股票T飞,就是因为该买的时候不敢下手,然后股价已涨就卖了。
计算最大概率出现的最大涨幅
```
# 将最大涨幅出现的区间分成13组(为什么是13组,试出来的,正好是13组的时候,取到的1.033正好是15.075%)
cut3=pd.cut(X3,bins=13)
# 将最大振幅出现的区间分成10组
cut3_count=cut3.value_counts()
# 统计这些区间出现次数占总次数的百分比(%)
cut3_count_percent=cut3_count/len(X3)*100
cut3_count_percent
```
```
(-0.0134, 1.033] 15.075377
(1.033, 2.065] 18.090452
(2.065, 3.098] 13.567839
(3.098, 4.131] 12.060302
(4.131, 5.163] 10.552764
(5.163, 6.196] 11.055276
(6.196, 7.228] 8.040201
(7.228, 8.261] 1.005025
(8.261, 9.294] 3.015075
(9.294, 10.326] 3.517588
(10.326, 11.359] 2.010050
(11.359, 12.392] 0.502513
(12.392, 13.424] 1.507538
dtype: float64
```
作图
```
pie_names=["(-0.0134, 1.033]","(1.033, 13.424]"]
pie_detail1=int(cut3_count[0])
pie_detail2=int(cut3_count[1:].sum())
pie_details=[pie_detail1,pie_detail2]
pie=(
Pie(init_opts=opts.InitOpts(width='720px', height='320px')) #自定义画布大小
.add(series_name='', data_pair=[(i, j)for i, j in zip(pie_names, pie_details)]) #遍历数据
.set_global_opts(title_opts=opts.TitleOpts(title="最大涨幅范围(%)",subtitle="统计区间为2020-12-02至今")) #添加主、副标题
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")) #添加数据标签
)
pie.render_notebook()
```

⇑ 由以上结果可知:
最大涨幅在(-0.0134, 1.033]区间的概率为15.075%。
在(1.033, 13.424] 区间的概率为100%-15.075%=84.925%
换句话说,每天最大涨幅在1.033%以上的概率高达84.925%≈85%,这是个非常高的概率,也就是说,我们每天设一个比开盘价高1.033%的价格,就有85%的概率能卖出。
###4、结论
每日最大振幅超过4.221%的概率为85%
每日最大跌幅超过0.635%的概率为85%
每日最大涨幅超过1.033%的概率为85%
备注:可能很多人不理解,你为什么选择4.221%、为什么选择0.635%、1.033%?
> 这里我要说明的是,我选择的不是4.221%、0.635%、1.033%,而是85%的保证率,根据85%的结果反推条件
你看我得出的结论,这个就是做T的方法@等待2020
2021-09-27
学习了,奇怪的是最后一部分做图运行的时候总是提示服务正重启,服务似乎挂掉了。前面一张图做出来没问题
2021-09-27
图不出来也没关系的,你看输出的数据@sino_samsara
2021-09-27
这个想法挺好,可以做一个专题了,对股票进行分类,然后分析不同分类股票做T的空间差异
2021-09-27
这个想法很好。点赞。
做T,应该是总是持有一半现金。如果早盘买入一半,尾盘时昨天持有的另外一半没有卖出,是不是要强行卖掉一半?
2021-09-28
from pyecharts.charts import Scatter
from pyecharts.globals import SymbolType
from pyecharts.charts import Pie
你这几个库我怎么找不到,能不能指导下
2021-09-28
@cd6003 不用强行卖出,留着到第二天涨幅达到目标价了再卖
2021-09-28
@吃大野 我这个是在自己本机里jupyter写的,你要在本机里安装pyecharts
2021-09-28
@吃大野 这个是完整代码了,数据分析就是这样一步步写下来的
2021-09-28