火币 BOLL 指标计算公式 (Python3) 版本
# -*- coding: utf-8 -*- """ BOLL(布林带) 计算方法: 1、计算中轨 MB=(当前k线收盘价+前k线收盘价+...+前N-1根k线收盘价)/N N默认为20 2、计算标准差 先计算N根K线差额的平方和 sum=(当前K线收盘价-当前k线MB)^2+(前K线收盘价-前k线MB)^2+...+(第N根K线收盘价-第N根k线MB)^2 再计算标准差(Sqrt表示开方,计算平方根) MD=K*Sqrt(sum/N) K为标准差值,默认值为2;N默认为20 3、计算上轨、下轨 UP=MB+MD (上轨值计算) DN=MB-MD (下轨值计算) """ import math,os import json def Get_close_allday(stock_code): allday=[] #日期 close=[] #收盘价数组 raw = open('./data.json').read() r = json.loads(raw) print(r) allday = [it['id'] for it in r['data']] #获取日K的所有日期 close = [round(it['close'],2) for it in r['data']] #获取日K中有点的数据明细 return close[::-1],allday[::-1] def Get_Boll(close,allday): L = len(close) #计算收盘价数组长度,用于处理MID20的值 N=20 #默认N值为0 start = 0 #数组分割,起始分割索引为:0 end = 20 #数组分割,结束索引为:20 与N值相同 while True: #循环遍历:遍历指定日K长度,用于计算每个日期的MID值 for price in range(0,len(close)): sum_close = 0 # print start,end,price MID=round(sum(close[start:end])/N,5) #MB的计算公式:计算方法为收盘价数组中,最后一个点的收盘价加前19个点的 #收盘价只和,再除以20;每循环一次:最后一个点位移一个点 for i in range(0,20): # print close[price+i] sum_close= sum_close + round(abs((close[price+i]-MID)**2),5) UPPER = MID + 2 * round(math.sqrt(sum_close/20),5) LOWER = MID - (UPPER-MID) print (u'日期:' + str(allday[price]) + u'\tMID:' + str(MID) + u'\tUPPER:' + str(round(UPPER,5)) + u'\tLOWER值' + str(LOWER)) start = start + 1 end = end + 1 L = L-1 if L - N == -1: #改判断用于判断不足20个点,无法计算时,退出for循环 break break #for循环结束后,退出while循环 if __name__ == "__main__": close,allday = Get_close_allday('sz002023') Get_Boll(close,allday)
目前尚无回复