TradingView Pine原版代码
plot(stdev(close, 5))//the same on pine
isZero(val, eps) => abs(val) <= epsSUM(fst, snd) =>EPS = 1e-10res = fst + sndif isZero(res, EPS)res := 0elseif not isZero(res, 1e-4)res := reselse15pine_stdev(src, length) =>avg = sma(src, length)sumOfSquareDeviations = 0.0for i = 0 to length - 1sum = SUM(src[i], -avg)sumOfSquareDeviations := sumOfSquareDeviations + sum * sumstdev = sqrt(sumOfSquareDeviations / length)
plot(pine_stdev(close, 5))
Python3实现:
import math #求平方根"""字典转数组"""
def GetSrc(r, name):if name == 'o+h+l+c':src = [ (v['Open'] + v['High'] + v['Low'] + v['Close']) / 4 for v in r ]elif name == 'h+l+c':src = [ (v['High'] + v['Low'] + v['Close']) / 3 for v in r ]elif name == 'h+l':src = [ (v['High'] + v['Low']) / 2 for v in r ]else:src = [ v[name] for v in r ] if name else rreturn src#移动平均线
def SMA(r, days, name=0):cps = GetSrc(r, name)emas = [0 for i in range(len(cps))] # 创造一个和cps一样大小的集合for i in range(len(cps)):if i < days-1:emas[i] = 0else:ma = 0for i2 in range(i-days,i):i2 += 1ma += cps[i2]emas[i] = ma / daysreturn emasdef STDEV_isZero(val, eps):return abs(val) <= epsdef STDEV_SUM(fst, snd):res = fst + sndif STDEV_isZero(res, 1e-10):res = 0elif STDEV_isZero(res, 1e-4):res = 15return resdef STDEV(r, days, name=0):src = GetSrc(r, name)avg = SMA(src, days)stdev = [0 for i in range(len(src))]for i in range(len(src)):if i > days:sumOfSquareDeviations = 0for i2 in range(days):i3 = i-i2sum = STDEV_SUM(src[i3], -avg[i])sumOfSquareDeviations = sumOfSquareDeviations + sum * sumstdev[i] = math.sqrt(sumOfSquareDeviations / days)return stdev
调用方法:STDEV(r, 5, "Close")
结果基本一致
转自:【原生代码】Python3 实现TradingView中的STDEV标准差 - 苏慕白的博客
本文发布于:2024-01-30 18:24:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170661026621948.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |