大家好,欢迎来到IT知识分享网。
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化学习资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
token = ‘Your token’ # 输入你的接口密匙,获取方式及相关权限见Tushare官网。
pro = ts.pro_api(token)
df = pro.daily(ts_code=‘.SH’) # daily为tushare的股票数据接口。
将获取到的DataFrame数据进行标准化处理,转换为方便自己使用的一种规范格式。
df = df.loc[:, [‘trade_date’, ‘open’, ‘high’, ‘low’, ‘close’, ‘vol’]]
df.rename(
columns={
‘trade_date’: ‘Date’, ‘open’: ‘Open’,
‘high’: ‘High’, ‘low’: ‘Low’,
‘close’: ‘Close’, ‘vol’: ‘Volume’},
inplace=True) # 重定义列名,方便统一规范操作。
df[‘Date’] = pd.to_datetime(df[‘Date’]) # 转换日期列的格式,便于作图
df.set_index([‘Date’], inplace=True) # 将日期列作为行索引
df = df.sort_index() # 倒序,因为Tushare的数据是最近的交易日数据显示在DataFrame上方,倒序后方能保证作图时X轴从左到右时间序列递增。
==============================================================================
股市行情充满随机性,往往是“横看成岭侧成峰,远近高低各不同”。一次上涨或下跌是短期的波动,还是已经到来的大势,很难判断。通道模型适度地解决了这一难题,它利用过去的价格信息,绘制出了上下两条通道线(上轨,下轨),以此设定股价的相对高低界限。通道线可以包容市场波动行情的部分信息,过滤震荡行情中均线系统“假”突破信号。通道线除了涵盖市场价格高低信息以外,两条通道线的距离也体现了股票价格的震荡幅度。当价格波动幅度较小时,通道的宽度较小,当价格震荡较大时,通道线的宽度也相应变大。通道突破模型将价格高低与价格震荡幅度融合在一起,成为判断市场中长期趋势的常用技术分析指标。
===============================================================================================
唐奇安通道流行于上世纪七十年代,由著名海龟交易员Richard Donchian发明,最早用于日内交易,其主要思想是寻找一定时间内(如20日)出现的最高价和最低价,将最高价和最低价分布作为通道的上下轨道,当价格突破上轨道时,说明股价运动较强势,释放出买入信号;当价格线向下突破下轨道的时候,空方市场较为强势,市场下跌趋势较为明显,则释放出卖出信号。
唐奇安通道由三条轨道线构成:
- 通道上界 = 过去20日内的最高价
- 通道下界 = 过去20日内的最低价
- 中轨道 = 通 道 上 界 + 通 道 下 界 2 \displaystyle {\frac{通道上界 + 通道下界}{2} } 2通道上界+通道下界
绘图代码示例:
提取收盘价,最高价,最低价数据
Close = df.Close
High = df.High
Low = df.Low
设定上、下、中通道线初始值
upboundDC = pd.Series(0.0, index=Close.index)
downboundDC = pd.Series(0.0, index=Close.index)
midboundDC = pd.Series(0.0, index=Close.index)
求唐奇安上、中、下通道
for i in range(20,len(Close)):
upboundDC[i] = max(High[(i-20):i])
downboundDC[i] = min(Low[(i-20):i])
midboundDC[i] = 0.5 * (upboundDC[i] + downboundDC[i])
upboundDC = upboundDC[20:]
downboundDC = downboundDC[20:]
midboundDC = midboundDC[20:]
绘制2020年洛阳钼业价格唐奇安通道上中下轨道线图
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.plot(Close[‘2020’], label=“Close”, color=“k”)
plt.plot(upboundDC[‘2020’], label=“upboundDC”, color=“b”, linestyle=“dashed”)
plt.plot(midboundDC[‘2020’], label=“midboundDC”, color=“r”, linestyle=“-.”)
plt.plot(downboundDC[‘2020’],label=“downboundDC”, color=“b”, linestyle=“dashed”)
plt.title(“2020年洛阳钼业股价唐奇安通道”)
plt.xlabel(‘日期’)
plt.ylabel(‘values’)
plt.grid(True)
plt.legend()
plt.show()
生成图像效果如下:
- 以价格运动趋势来观察,我们不难看出,当整体价格趋势呈现出上升趋势的时候,三条均线也同时会呈现出一定的上升趋势;当股价大幅回落的时候,三条线也会有明显的向下运动趋势。
- 从曲线的平滑程度来观察,价格线的上下波动较频繁,且三条轨道线相对平滑。从上下通道的间距情况大致可以看出来股价的震荡情况。股价波动较小时,两条轨道线的间距大致稳定,股价波动较大时,带宽也时大时小,股价与中间轨道交叉的次数也越多。
未来看到更多的价格信息和股票价格运动情况,我们在K线图中绘制唐奇安的上下通道线,代码如下:
s = mpf.make_mpf_style(base_mpf_style=‘nightclouds’, rc={‘font.family’: ‘SimHei’}) # 解决mplfinance绘制输出中文乱码
add_plot=[
mpf.make_addplot(upboundDC[‘2020’]),
mpf.make_addplot(midboundDC[‘2020’]),
mpf.make_addplot(downboundDC[‘2020’])]
mpf.plot(df[‘2020’], type=‘candle’, style=s, title=‘洛阳钼业2020年K线图及唐奇安通道线’, addplot=add_plot, volume=True)
图像效果如下:
这里选择的时间跨度较大,实际研究可以选择更细节的时间跨度。
使用mplfinance库我们只需要传入参数mav,就可以添加上指定时间跨度的均线图一起研究(以5日,10日,20日,40日为例):
s = mpf.make_mpf_style(base_mpf_style=‘nightclouds’, rc={‘font.family’: ‘SimHei’})
add_plot=[
mpf.make_addplot(upboundDC[‘2020’]),
mpf.make_addplot(midboundDC[‘2020’]),
mpf.make_addplot(downboundDC[‘2020’])]
mpf.plot(df[‘2020’], type=‘candle’, style=s, title=‘洛阳钼业2020年K线图附唐奇安通道线及均线’, mav=(5,10,20,40),addplot=add_plot, volume=True)
效果展示如下:
选定一个时间段后,唐奇安通道突破的主要规则是:当价格线走强,而突破前n期的最高价时做多;当价格线向下运动,价格低于前n期最低价时做空。一般而言,n=20为投资者较为常用的时间段设定。
我们继续以20日为时间跨度,捕捉唐奇安通道突破日期,设定买卖点交易,并计算交易获胜率。
首先,先定义向上突破和向下突破函数upbreak()和downbreak()
def upbreak(tsLine, tsRefLine):
n = min(len(tsLine), len(tsRefLine))
tsLine = tsLine[-n:]
tsRefLine = tsRefLine[-n:]
signal = pd.Series(0, index=tsLine.index)
for i in range(1, len(tsLine)):
if all([tsLine[i]>tsRefLine[i], tsLine[i-1]<tsRefLine[i-1]]):
signal[i] = 1
return(signal)
downbreak()函数
def downbreak(tsLine, tsRefLine):
n = min(len(tsLine), len(tsRefLine))
tsLine = tsLine[-n:]
tsRefLine = tsRefLine[-n:]
signal = pd.Series(0, index=tsLine.index)
for i in range(1, len(tsLine)):
if all([tsLine[i] < tsRefLine[i], tsLine[i-1] > tsRefLine[i-1]]):
signal[i] = 1
return(signal)
唐奇安通道突破策略
UpBreak = upbreak(Close[upboundDC.index[0]:], upboundDC)
DownBreak = downbreak(Close[downboundDC.index[0]:], downboundDC)
制定交易策略
上穿,signal为1
下穿,signal为-1
合并上下穿突破总信号
BreakSig = UpBreak – DownBreak
计算预测获胜率
tradeSig = BreakSig.shift(1)[‘2020’]
ret = Close / Close.shift(1) – 1 # 这里的Close依然是全时间序列的
tradeRet = (ret * tradeSig).dropna() # 一次乘法加dropna()之后,Close()多的时间序列就被过滤掉了。
winRate = len(tradeRet[tradeRet > 0]) / len(tradeRet[tradeRet != 0])
print(winRate)
唐奇安通道突破的规则相对简单,但是要注意,时间跨度n的选择尤为重要。n的取值不同,结果也随之而变,寻找合适的时间跨度n是唐奇安通道突破策略的关键。
在20到60的时间跨度中寻找该股票唐奇安通道突破策略胜率最大 的时间跨度
list1 = []
list2 = []
for m in range(20,61):
upboundDC = pd.Series(0.0, index=Close.index)
downboundDC = pd.Series(0.0, index=Close.index)
midboundDC = pd.Series(0.0, index=Close.index)
求唐奇安上、下通道
for i in range(m,len(Close)):
upboundDC[i] = max(High[(i-m):i])
downboundDC[i] = min(Low[(i-m):i])
upboundDC = upboundDC[m:]
downboundDC = downboundDC[m:]
midboundDC = midboundDC[m:]
唐奇安通道突破策略
UpBreak = upbreak(Close[upboundDC.index[0]:], upboundDC)
DownBreak = downbreak(Close[downboundDC.index[0]:], downboundDC)
BreakSig = UpBreak – DownBreak
计算预测获胜率
tradeSig = BreakSig.shift(1)[‘2020’]
ret = Close / Close.shift(1) – 1 # 这里的Close依然是全时间序列的
tradeRet = (ret * tradeSig).dropna() # 一次乘法加dropna()之后,Close()多出的时间序列就被过滤掉了。
winRate = len(tradeRet[tradeRet > 0]) / len(tradeRet[tradeRet != 0])
list1.append(m)
list2.append(winRate)
print(‘该股票2020年唐奇安道路突破策略时间跨度为m为{}时胜率最大为{}’.format(list1[list2.index(max(list2))], max(list2)))
结果输出:
结果我们可以看出,在20-60的时间跨度内,2020年度选择50日日时间跨度是唐安奇通道突破策略胜率最大。
=============================================================================
- “布林通道”又称“布林带状(Bollinger Bands, BBands)”,或者保力加通道,是通道的形式之一。与唐奇安通道类似,布林带通道也有刻画股票价格变化和波动幅度大小的作用。布林带通道是由美国投资者约翰·布林格(John Bollinger)在20世纪后期结合统计学理论发明的一种技术分析指标。
- 在分析股价运动时,一般选取股价平均线作为参照线,而布林带在均线的基础上增添了上下两条“股价通道”线。布林带的中轨道线是股价的平均线,上通道为均线加上一定倍数的标准差,下通道则是均线减去一定倍数的标准差得到的。
- 布林带通道的趋势主要由中轨道平均线决定,当平均线呈现上升趋势的时候,布林带通道也会向上走,当平均线走低时,布林带通道也会有向下的趋势。布林带通道的宽由股价的标准差决定;而股价的标准差刻画了股价波动的范围的大小,当股价的波动较大时,标准差较大,布林带通道带宽也越大;反之股价波动幅度较小的时候,标准差较小,布林带带宽会相应变窄。
- 布林带中轨道线: μn = 1 n ∑ i = 1 n p i \displaystyle {\frac{1}{n} }{\sum_{i=1}^n p_i } n1i=1∑npi
其中un是第t期观测到的前n期股票价格均值
- 第t期观测到,股价在过去n期的标准差为
σn = 1 n ∑ i = 1 n ( p i − μ n ) 2 \displaystyle \sqrt{
{\frac{1}{n}}{\sum_{i=1}^n \left(p_i-μ_n \right)^2}} n1i=1∑n(pi−μn)2
- 布林带上轨道线值 B u p _ n \displaystyle \ B_{up\_n} Bup_n:
B u p _ n \displaystyle \ B_{up\_n} Bup_n = un + a × σn
- 布林带下轨道线值 B d o w n _ n \displaystyle \ B_{down\_n} Bdown_n:
B d o w n _ n \displaystyle \ B_{down\_n} Bdown_n = un – a × σn
- a表示标准差的倍数。
- 从上述公式可以看出,时间区间n和标准差倍数a的取值可以影响到布林带三条通道的计算结果。一般吧n取值为20天,a取值为2,依此设定暂有:
- σ20 = 1 20 ∑ i = 1 n ( p i − μ 20 ) 2 \displaystyle \sqrt{
{\frac{1}{20}}{\sum_{i=1}^n \left(p_i-μ_{20} \right)^2}} 201i=1∑n(pi−μ20)2 - B u p _ 20 \displaystyle \ B_{up\_20} Bup_20 = u20 + a × σ20
- B d o w n _ 20 \displaystyle \ B_{down\_20} Bdown_20 = u20 – a × σ20
定义布林带通道函数bbands()
def bbands(tsPrice, period=20, times=2):
upBBand = pd.Series(0.0, index=tsPrice.index)
midBBand = pd.Series(0.0, index=tsPrice.index)
downBBand = pd.Series(0.0, index=tsPrice.index)
sigma = pd.Series(0.0, index=tsPrice.index)
for i in range(period-1, len(tsPrice)):
midBBand[i] = np.nanmean(tsPrice[i-(period-1):(i+1)]) # nanmean忽略Nan计算均值
sigma[i] = np.nanstd(tsPrice[i-(period-1):(i+1)]) # nanstd忽略Nan计算标准差
upBBand[i] = midBBand[i] + times * sigma[i]
downBBand[i] = midBBand[i] – times * sigma[i]
BBands = pd.DataFrame({‘upBBand’:upBBand[(period-1):],\
‘midBBand’:midBBand[(period-1):],\
‘downBBand’:downBBand[(period-1):],\
‘sigma’:sigma[(period-1):]})
return(BBands)
计算20日布林带通道线
LymyBBands = bbands(Close, 20, 2)
提取数据
UpBBands = LymyBBands.upBBand[‘2020’]
DownBBands = LymyBBands.downBBand[‘2020’]
MidBBands = LymyBBands.midBBand[‘2020’]
s = mpf.make_mpf_style(base_mpf_style=‘nightclouds’, rc={‘font.family’: ‘SimHei’})
add_plot=[
mpf.make_addplot(UpBBands),
mpf.make_addplot(DownBBands),
mpf.make_addplot(MidBBands)]
mpf.plot(df[‘2020’], type=‘candle’, style=s, title=“洛阳钼业2020年K线图及布林带通道线”, addplot=add_plot, volume=True)
生成图像效果如下:
- 价格接近或突破上轨道或下轨道表明市场处于明显上涨或下跌趋势。
- 蜡烛图上下波动大的时候,布林带通道的带宽也相对较大。
- 蜡烛图波动幅度小的时候,布林带通道的带宽也相对较小。
- 整体而言,K线图大部分都在通道内部运行,K线图与布林带中轨道多次交叉,但价格基本上在布林带上下通道内部运动,布林带通道过滤掉了部分价格穿破均线的“虚假信号”。
3.5.1 布林带通道的正态分布思想
布林带通道的设定蕴含着统计学原理,假设股票价格走势呈现正态分布,正态分布是关于均值呈对称分布的均值加减两倍标准差范围内的数据大概占据了整个数据的95.44%,布林带通道以价格的平均值加减两个标准差来设定上下通道。
从正态分布的角度来看,布林带通道刻画了股票价格的主要变化范围,即大部分时间股价都在布林带通道内运动,股价只有大约5%的概率会突破布林带通道的上轨道或者下轨道。因此在正常情况下,当价格线超出布林带通道的上轨道或者下轨道的时候,可以认为价格线有偏离,未来价格很可能回落到布林带通道内部。
- 由于布林带通道的设定与标准差的倍数有关,布林带通道可以与股市风险联系起来一起分析市场行情。当以加减2倍标准差刻画时,股价有95.44%的概率在正负2倍标准差内部波动,异常波动的概率为4.56%。
- 将股价波动到布林带通道外部的情况定义为布林带风险(Bollinger Risk)。
- 由统计学原理,在置信水平为α的条件下,布林带风险BRα 的计算公式为: BRα = d m d t × 100 \displaystyle \frac{d_m}{d_t}×100% dtdm×100
其中 ,dt 表示观察的股价数据总期数,dm表示观察期内股价在布林带上下通道外部的总期数。一般而言,置信水平为α的取值可以为1%,5%或者10%。在不同置信水平下,布林带上下通道的界定不同。
α=10%时, B u p _ n \displaystyle \ B_{up\_n} Bup_n = un + 1.65 × σn, B d o w n _ n \displaystyle \ B_{down\_n} Bdown_n = un – 1.65 × σn
α=5%时, B u p _ n \displaystyle \ B_{up\_n} Bup_n = un + 1.96 × σn, B d o w n _ n \displaystyle \ B_{down\_n} Bdown_n = un – 1.96 × σn
如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化学习资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/152362.html