移动平均的可视化

# 移动均线 (Moving Average, MA) 是将一段时间 (也叫窗口) 内资产收盘价的平均价格连成曲线,用以显示价格趋势的一种技术指标。
# 在下面是数据中我们假设第二列的数据就是收盘价
# i 是从0 开始计数的
data = [
[2320.26, 2320.26, 2287.3, 2362.94],
[2300, 2291.3, 2288.26, 2308.38],
[2295.35, 2346.5, 2295.35, 2345.92],
[2347.22, 2358.98, 2337.35, 2363.8],
[2360.75, 2382.48, 2347.89, 2383.76],
]
print(len(data))

def calculate_ma(day_count: int, d): # day_count 就是每一次滑动的窗口 d是输入的数据
result: List[Union[float, str]] = []
for i in range(len(d)):
if i < day_count: #小于滑动的窗口时用“-”来代替值
result.append("-")
print('我这是第{}次窗口里面数据不足落空了'.format(i))
continue
sum_total = 0.0
for j in range(day_count): #在每一个对应的窗口大小里面
print('即将加上的数字【{},1】是:'.format(i - j),float(d[i - j][1]))
sum_total += float(d[i - j][1])
print('这一个窗口的总和',sum_total) #到此计算了一个窗口下的平均价格,下一个循环中i+1,也就是窗口向后面一栋一格
print('上面这个除以窗口长度{}后就是 MA:'.format(day_count),abs(float("%.3f" % (sum_total / day_count))))
result.append(abs(float("%.3f" % (sum_total / day_count))))
return result


y=calculate_ma(day_count=2, d=data)
print(y)

输出结果是:

5
我这是第0次窗口里面数据不足落空了
我这是第1次窗口里面数据不足落空了
即将加上的数字【2,1】是: 2346.5
即将加上的数字【1,1】是: 2291.3
这一个窗口的总和 4637.8
上面这个除以窗口长度2后就是 MA: 2318.9
即将加上的数字【3,1】是: 2358.98
即将加上的数字【2,1】是: 2346.5
这一个窗口的总和 4705.48
上面这个除以窗口长度2后就是 MA: 2352.74
即将加上的数字【4,1】是: 2382.48
即将加上的数字【3,1】是: 2358.98
这一个窗口的总和 4741.46
上面这个除以窗口长度2后就是 MA: 2370.73
['-', '-', 2318.9, 2352.74, 2370.73]

 

算法取自官方文档

值得注意的是for循环的第一个i是0开始的

对于为什么一开始是两个空而不是一个空,

按照官方文档的计算方法,当前的MA的值是它和n(n=前面圈口大小)个数字求和后除以窗口大小,那么其实第二个应该也是有值的啊

「更新」:官网已经反馈,将尽快更新。

posted @ 2020-02-27 21:27  星涅爱别离  阅读(219)  评论(0编辑  收藏  举报