请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3351360 新帖:47

量化交易(JoinQuant数据)-BOLL(布林轨迹

此人已认证发表于:5 月 10 日 01:04回复(1)


BOLL轨迹算法

parameter:以下参数均包含的有缺省值
   security 聚宽格式股票代码,只支持['']单只股票格式
   nDay BOLL计算的日平均参数,常见为20日60日
   start_date 起始时间点
   end_date 结束时间点

Note:
    1.布林轨迹(BOLL)由日平均线(MiD)上轨线(UP)下轨线(DN)构成,其带状通道揭示了股票的可能走势/压力位/支撑位.
    2.由于布林轨迹计算包括了标准差的计算,在股价波动低迷时会导致收口(标准差变小),收口往往预示着变盘的可能性.
    3.我的BOLL算法实现基于JoinQuant数据,和通用实现相比加入了滤波器,滤波器的作用可以参考
     
    4.图形中:[红色-UP-上轨线][黄色-MiD-日平均线][绿色-DN-下轨线][蓝色-平滑过后的股价]

.股票跌成狗,代码慌得一批~
.有问题可以留言,回不回复看心(大)情(盘)

Untitled.png

import datetimeimport jqdataimport pylab as pl
'''数据平滑用于将具有杂波的股票数据变换成为相对平滑的股票曲线,其意义在于能够将趋势更加柔和的表现出来,过滤掉了畸变的峰值,但是也丢失了其包含的数据维度效果author:aaron-clark-aic 18/07/2018'''def LinearSmooth5(inP):_outP = []n = len(inP)if n<5:for i in inP:_outP.append(i)else:_outP.append( ( 3.0 * inP[0] + 2.0 * inP[1] + inP[2] - inP[4] ) / 5.0)_outP.append( ( 4.0 * inP[0] + 3.0 * inP[1] + 2 * inP[2] + inP[3] )/10.0)_i=0for i in  inP :if not _i == 0 and not _i==1 and not _i == n-2 and not _i ==n-1:_outP.append(( inP[_i - 2] + inP[_i - 1] + inP[_i] + inP[_i + 1] + inP[_i + 2] ) / 5.0)_i = _i+1_outP.append(( 4.0 * inP[n-1] + 3.0 * inP[n - 2] + 2 * inP[n - 3] + inP[n - 4] ) / 10.0)_outP.append(( 3.0 * inP[n-1] + 2.0 * inP[n - 2] + inP[n - 3] - inP[n - 5] ) / 5.0    )return _outPdef quadraticSmooth5(inP):_outP = []n = len(inP)if n<5:for i in inP:_outP.append(i)else:_outP.append( ( 31.0 * inP[0] + 9.0 * inP[1] -3.0* inP[2] - 5.0*inP[3]+3.0*inP[4] ) / 35.0)_outP.append( ( 9.0 * inP[0] + 13.0 * inP[1] + 12 * inP[2] + 6.0*inP[3] - 5.0*inP[4] )/35.0)_i=0for i in  inP :if not _i == 0 and not _i==1 and not _i == n-2 and not _i ==n-1:_outP.append( ( - 3.0 * (inP[_i - 2] + inP[_i + 2]) + 12.0 * (inP[_i - 1] + inP[_i + 1]) + 17 * inP[_i] ) / 35.0)_i = _i+1_outP.append( ( 9.0 * inP[n - 1] + 13.0 * inP[n - 2] + 12.0 * inP[n - 3] + 6.0 * inP[n - 4] - 5.0 * inP[n - 5] ) / 35.0)_outP.append(( 31.0 * inP[n - 1] + 9.0 * inP[n - 2] - 3.0 * inP[n - 3] - 5.0 * inP[n - 4] + 3.0 * inP[n - 5]) / 35.0)return _outPdef cubicSmooth5(inP):_outP = []n = len(inP)if n<5:for i in inP:_outP.append(i)else:_outP.append( (69.0 * inP[0] + 4.0 * inP[1] - 6.0 * inP[2] + 4.0 * inP[3] - inP[4]) / 70.0)_outP.append(  (2.0 * inP[0] + 27.0 * inP[1] + 12.0 * inP[2] - 8.0 * inP[3] + 2.0 * inP[4]) / 35.0)_i=0for i in  inP :if not _i == 0 and not _i==1 and not _i == n-2 and not _i ==n-1:_outP.append(  (-3.0 * (inP[_i - 2] + inP[_i + 2])+ 12.0 * (inP[_i - 1] + inP[_i + 1]) + 17.0 * inP[_i] ) / 35.0)_i = _i+1_outP.append( (2.0 * inP[n - 5] - 8.0 * inP[n - 4] + 12.0 * inP[n - 3] + 27.0 * inP[n - 2] + 2.0 * inP[n - 1]) / 35.0)_outP.append( (- inP[n - 5] + 4.0 * inP[n - 4] - 6.0 * inP[n - 3] + 4.0 * inP[n - 2] + 69.0 * inP[n - 1]) / 70.0)return _outPdef smoothStock(inP):return cubicSmooth5(quadraticSmooth5(LinearSmooth5(inP)))
'''默认股票代码格式(000915)转换为聚宽代码格式(000915.XSHG)author:aaron-clark-aic 18/07/2018'''def standardStocks(stocks):_stocks = list(get_all_securities('stock').index)_standardStocks = []for i in stocks:_standardStocks =_standardStocks+[code for code in _stocks if code.upper().startswith(i)]return _standardStocks
'''BOLL轨迹算法parameter:以下参数均包含的有缺省值    security 聚宽格式股票代码,只支持['']单只股票格式    nDay BOLL计算的日平均参数,常见为20日60日    start_date 起始时间点    end_date 结束时间点Note:1.布林轨迹(BOLL)由日平均线(MiD)上轨线(UP)下轨线(DN)构成,其带状通道揭示了股票的可能走势/压力位/支撑位.     2.由于布林轨迹计算包括了标准差的计算,在股价波动低迷时会导致收口(标准差变小),收口往往预示着变盘的可能性.     3.我的BOLL算法实现基于JoinQuant数据,和通用实现相比加入了滤波器,滤波器的作用可以参考https://www.joinquant.com/post/11886     4.图形中:[红色-UP-上轨线][黄色-MiD-日平均线][绿色-DN-下轨线][蓝色-平滑过后的股价]          .股票跌成狗,我慌得一批~     author:aaron-clark-aic 19/07/2018'''def BOLL(security=standardStocks(['000915']),nDay=20,start_date=(datetime.date.today()-datetime.timedelta(days=200)),end_date=datetime.date.today()):_base_days = jqdata.get_trade_days(start_date=start_date, end_date=end_date)#基础交易日list_close_price = []_MiD = []#日平均线数组_MD = []#标准差for i in _base_days:_close =get_price(security,end_date=i,count=nDay,fields=['close']).values_close_smooth = smoothStock(_close)_close_price.append(_close_smooth[-1][-1])_SMA = mean(_close_smooth)_MiD.append(_SMA)_MD_base = ((_close_smooth - _SMA)**2)        _MD.append(mean(_MD_base)**0.5)_UP = list(map(lambda x,y:x+2*y, _MiD,_MD))#上轨_DN = list(map(lambda x,y:x-2*y, _MiD,_MD))#下轨x= range(len(_MiD))pl.plot(range(len(_MiD)), _MiD,"y",lw=0.5)pl.plot(range(len(_UP)), _UP,"r",lw=0.5)pl.plot(range(len(_DN)), _DN,"g",lw=0.5)pl.plot(range(len(_close_price)), _close_price,lw=1)pl.show()
BOLL()

全部回复

0/140

量化课程

    移动端课程