Python 金融量化 道路突破策略(唐奇安道路突破策略&布林带通道及其市场风险)

本文介绍了唐奇安通道和布林带这两种技术分析工具,包括它们的原理、在股票价格走势中的应用、如何在K线图中绘制以及策略制定,如通过价格突破判断买卖点和计算交易胜率。文章强调了选择适当时间跨度的重要性。
摘要由CSDN通过智能技术生成

2.唐奇安通道(Donchian Channel)

===============================================================================================

唐奇安通道流行于上世纪七十年代,由著名海龟交易员Richard Donchian发明,最早用于日内交易,其主要思想是寻找一定时间内(如20日)出现的最高价和最低价,将最高价和最低价分布作为通道的上下轨道,当价格突破上轨道时,说明股价运动较强势,释放出买入信号;当价格线向下突破下轨道的时候,空方市场较为强势,市场下跌趋势较为明显,则释放出卖出信号。


2.1 唐奇安通道刻画


唐奇安通道由三条轨道线构成:

  • 通道上界 = 过去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()

生成图像效果如下:

在这里插入图片描述

  • 以价格运动趋势来观察,我们不难看出,当整体价格趋势呈现出上升趋势的时候,三条均线也同时会呈现出一定的上升趋势;当股价大幅回落的时候,三条线也会有明显的向下运动趋势。

  • 从曲线的平滑程度来观察,价格线的上下波动较频繁,且三条轨道线相对平滑。从上下通道的间距情况大致可以看出来股价的震荡情况。股价波动较小时,两条轨道线的间距大致稳定,股价波动较大时,带宽也时大时小,股价与中间轨道交叉的次数也越多。


2.2 在K线图中绘制唐奇安上下通道线


未来看到更多的价格信息和股票价格运动情况,我们在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)

效果展示如下:

在这里插入图片描述


2.3 Python捕捉唐奇安通道突破


选定一个时间段后,唐奇安通道突破的主要规则是:当价格线走强,而突破前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)

在这里插入图片描述

2.4 选择不同时间跨度


唐奇安通道突破的规则相对简单,但是要注意,时间跨度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日日时间跨度是唐安奇通道突破策略胜率最大。


3.布林带通道

=============================================================================

3.1 布林带通道概述


  • “布林通道”又称“布林带状(Bollinger Bands, BBands)”,或者保力加通道,是通道的形式之一。与唐奇安通道类似,布林带通道也有刻画股票价格变化和波动幅度大小的作用。布林带通道是由美国投资者约翰·布林格(John Bollinger)在20世纪后期结合统计学理论发明的一种技术分析指标。

  • 在分析股价运动时,一般选取股价平均线作为参照线,而布林带在均线的基础上增添了上下两条“股价通道”线。布林带的中轨道线是股价的平均线,上通道为均线加上一定倍数的标准差,下通道则是均线减去一定倍数的标准差得到的。

  • 布林带通道的趋势主要由中轨道平均线决定,当平均线呈现上升趋势的时候,布林带通道也会向上走,当平均线走低时,布林带通道也会有向下的趋势。布林带通道的宽由股价的标准差决定;而股价的标准差刻画了股价波动的范围的大小,当股价的波动较大时,标准差较大,布林带通道带宽也越大;反之股价波动幅度较小的时候,标准差较小,布林带带宽会相应变窄。


3.2布林带通道计算方式


  • 布林带中轨道线: μn = 1 n ∑ i = 1 n p i \displaystyle {\frac{1}{n} }{\sum_{i=1}^n p_i } n1​i=1∑n​pi​

其中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}} n1​i=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}} 201​i=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


3.3 开始编码


定义布林带通道函数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’]


3.4 布林带通道线及K线图绘制


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)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

mg-blog.csdnimg.cn/img_convert/ec690501ea1dbe2cb209cbf4013c2477.png)

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值