数据分析之布林带
布林帶
布林帶共由三條線組成,分別為上軌、中軌、下軌
中軌:移動(dòng)平均線(例:收盤價(jià)5日均線–>從第五天開始,每天計(jì)算最近5天的收盤價(jià)的平均值所構(gòu)成的直線)
上軌:中軌 + 2 * 5日收盤價(jià)標(biāo)準(zhǔn)差
下軌:中軌+ 2 * 5日收盤價(jià)標(biāo)準(zhǔn)差
布林帶收窄代表穩(wěn)定的取值,張開代表有較大的波動(dòng)空間的趨勢
""" demo06_sma.py 移動(dòng)平均線 """ import numpy as np import matplotlib.pyplot as mp import datetime as dt import matplotlib.dates as mddef dmy2ymd(dmy):# 把日月年字符串轉(zhuǎn)為年月日字符串dmy = str(dmy, encoding='utf-8')d = dt.datetime.strptime(dmy, '%d-%m-%Y').date()ymd = d.strftime('%Y-%m-%d')return ymd# 加載文件 dates, opening_prices, highest_prices, \ lowest_prices, closing_prices = \np.loadtxt('aapl.csv',delimiter=',', usecols=(1, 3, 4, 5, 6),unpack=True, dtype='M8[D], f8, f8, f8, f8',converters={1: dmy2ymd})# 繪制收盤價(jià)的折線圖 mp.figure('AAPL', facecolor='lightgray') mp.title('AAPL', fontsize=18) mp.xlabel('Date', fontsize=14) mp.ylabel('Price', fontsize=14) mp.grid(linestyle=':') mp.tick_params(labelsize=10) # 設(shè)置刻度定位器 ax = mp.gca()# 主刻度為每周一 maloc = md.WeekdayLocator(byweekday=md.MO) ax.xaxis.set_major_locator(maloc) # 設(shè)置主刻度日期的格式 ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))# DayLocator:每天一個(gè)次刻度 ax.xaxis.set_minor_locator(md.DayLocator())# 把dates的數(shù)據(jù)類型改為matplotlib的日期類型 dates = dates.astype(md.datetime.datetime)# 繪制收盤價(jià) mp.plot(dates, closing_prices,label='Closing Prices', linewidth=2,color='dodgerblue', linestyle='--',alpha=0.7)# 5日移動(dòng)平均線 # sma = np.zeros(closing_prices.size - 4) # for i in range(sma.size): # sma[i] = closing_prices[i:i + 5].mean() # mp.plot(dates[4:], sma, # label='SMA-5', linewidth=1, # color='orangered', linestyle='-')# 使用卷積實(shí)現(xiàn)5日移動(dòng)平均線 # kernel = np.ones(5) / 5 # sma52 = np.convolve( # closing_prices, kernel, 'valid') # mp.plot(dates[4:], sma52, alpha=0.3, # label='SMA-5(2)', linewidth=7, # color='orangered', linestyle='-')# 實(shí)現(xiàn)加權(quán)卷積 # 通過指數(shù)函數(shù),尋求一組卷積核 kernel = np.exp(np.linspace(-1, 0, 5)) kernel = kernel[::-1] kernel /= kernel.sum() sma53 = np.convolve(closing_prices, kernel, 'valid') mp.plot(dates[4:], sma53,label='SMA-5(3)', linewidth=1,color='violet', linestyle='-')# 求5日標(biāo)準(zhǔn)差 stds = np.zeros(sma53.size) for i in range(stds.size):stds[i] = closing_prices[i:i + 5].std() # 下軌y坐標(biāo) lowers = sma53 - 2 * stds # 上軌y坐標(biāo) uppers = sma53 + 2 * stds # 繪制上下軌 mp.plot(dates[4:], uppers,label='uppers', linewidth=1,color='green', linestyle='-') mp.plot(dates[4:], lowers, label='lowers', linewidth=1,color='gold', linestyle='-') # 繪制軌內(nèi)填充色 mp.fill_between(dates[4:], uppers, lowers, uppers > lowers, color="orangered", alpha=0.3)mp.legend() mp.gcf().autofmt_xdate() mp.show()2019年7月11日22:21:16編寫
總結(jié)
- 上一篇: 【献计一刻】软件开发小工的学习和工作清单
- 下一篇: C++枚举类的使用