sma函数python,sma算法的本质
python里想自己定义一个SMA(移动加权平均)的函数
python是当下十分火爆的编程语言,尤其在人工智能应用方面。如果有心从事编程方向的工作,最好到专业机构深入学习、多实践,更贴近市场,这样更有利于将来的发展。
成都创新互联公司专注于玛多网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供玛多营销型网站建设,玛多网站制作、玛多网页设计、玛多网站官网定制、成都微信小程序服务,打造玛多网络公司原创品牌,更为您提供玛多网站排名全网营销落地服务。
python数据分析与应用第三章代码3-5的数据哪来的
savetxt
import numpy as np
i2 = np.eye(2)
np.savetxt("eye.txt", i2)
3.4 读入CSV文件
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True) #index从0开始
3.6.1 算术平均值
np.mean(c) = np.average(c)
3.6.2 加权平均值
t = np.arange(len(c))
np.average(c, weights=t)
3.8 极值
np.min(c)
np.max(c)
np.ptp(c) 最大值与最小值的差值
3.10 统计分析
np.median(c) 中位数
np.msort(c) 升序排序
np.var(c) 方差
3.12 分析股票收益率
np.diff(c) 可以返回一个由相邻数组元素的差
值构成的数组
returns = np.diff( arr ) / arr[ : -1] #diff返回的数组比收盘价数组少一个元素
np.std(c) 标准差
对数收益率
logreturns = np.diff( np.log(c) ) #应检查输入数组以确保其不含有零和负数
where 可以根据指定的条件返回所有满足条件的数
组元素的索引值。
posretindices = np.where(returns 0)
np.sqrt(1./252.) 平方根,浮点数
3.14 分析日期数据
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
dates, close=np.loadtxt('data.csv', delimiter=',', usecols=(1,6), converters={1:datestr2num}, unpack=True)
print "Dates =", dates
def datestr2num(s):
return datetime.datetime.strptime(s, "%d-%m-%Y").date().weekday()
# 星期一 0
# 星期二 1
# 星期三 2
# 星期四 3
# 星期五 4
# 星期六 5
# 星期日 6
#output
Dates = [ 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 1. 2. 4. 0. 1. 2. 3. 4. 0.
1. 2. 3. 4.]
averages = np.zeros(5)
for i in range(5):
indices = np.where(dates == i)
prices = np.take(close, indices) #按数组的元素运算,产生一个数组作为输出。
a = [4, 3, 5, 7, 6, 8]
indices = [0, 1, 4]
np.take(a, indices)
array([4, 3, 6])
np.argmax(c) #返回的是数组中最大元素的索引值
np.argmin(c)
3.16 汇总数据
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
#得到第一个星期一和最后一个星期五
first_monday = np.ravel(np.where(dates == 0))[0]
last_friday = np.ravel(np.where(dates == 4))[-1]
#创建一个数组,用于存储三周内每一天的索引值
weeks_indices = np.arange(first_monday, last_friday + 1)
#按照每个子数组5个元素,用split函数切分数组
weeks_indices = np.split(weeks_indices, 5)
#output
[array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([11,12, 13, 14, 15])]
weeksummary = np.apply_along_axis(summarize, 1, weeks_indices,open, high, low, close)
def summarize(a, o, h, l, c): #open, high, low, close
monday_open = o[a[0]]
week_high = np.max( np.take(h, a) )
week_low = np.min( np.take(l, a) )
friday_close = c[a[-1]]
return("APPL", monday_open, week_high, week_low, friday_close)
np.savetxt("weeksummary.csv", weeksummary, delimiter=",", fmt="%s") #指定了文件名、需要保存的数组名、分隔符(在这个例子中为英文标点逗号)以及存储浮点数的格式。
0818b9ca8b590ca3270a3433284dd417.png
格式字符串以一个百分号开始。接下来是一个可选的标志字符:-表示结果左对齐,0表示左端补0,+表示输出符号(正号+或负号-)。第三部分为可选的输出宽度参数,表示输出的最小位数。第四部分是精度格式符,以”.”开头,后面跟一个表示精度的整数。最后是一个类型指定字符,在例子中指定为字符串类型。
numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)
def my_func(a):
... """Average first and last element of a 1-D array"""
... return (a[0] + a[-1]) * 0.5
b = np.array([[1,2,3], [4,5,6], [7,8,9]])
np.apply_along_axis(my_func, 0, b) #沿着X轴运动,取列切片
array([ 4., 5., 6.])
np.apply_along_axis(my_func, 1, b) #沿着y轴运动,取行切片
array([ 2., 5., 8.])
b = np.array([[8,1,7], [4,3,9], [5,2,6]])
np.apply_along_axis(sorted, 1, b)
array([[1, 7, 8],
[3, 4, 9],
[2, 5, 6]])
3.20 计算简单移动平均线
(1) 使用ones函数创建一个长度为N的元素均初始化为1的数组,然后对整个数组除以N,即可得到权重。如下所示:
N = int(sys.argv[1])
weights = np.ones(N) / N
print "Weights", weights
在N = 5时,输出结果如下:
Weights [ 0.2 0.2 0.2 0.2 0.2] #权重相等
(2) 使用这些权重值,调用convolve函数:
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
sma = np.convolve(weights, c)[N-1:-N+1] #卷积是分析数学中一种重要的运算,定义为一个函数与经过翻转和平移的另一个函数的乘积的积分。
t = np.arange(N - 1, len(c)) #作图
plot(t, c[N-1:], lw=1.0)
plot(t, sma, lw=2.0)
show()
3.22 计算指数移动平均线
指数移动平均线(exponential moving average)。指数移动平均线使用的权重是指数衰减的。对历史上的数据点赋予的权重以指数速度减小,但永远不会到达0。
x = np.arange(5)
print "Exp", np.exp(x)
#output
Exp [ 1. 2.71828183 7.3890561 20.08553692 54.59815003]
Linspace 返回一个元素值在指定的范围内均匀分布的数组。
print "Linspace", np.linspace(-1, 0, 5) #起始值、终止值、可选的元素个数
#output
Linspace [-1. -0.75 -0.5 -0.25 0. ]
(1)权重计算
N = int(sys.argv[1])
weights = np.exp(np.linspace(-1. , 0. , N))
(2)权重归一化处理
weights /= weights.sum()
print "Weights", weights
#output
Weights [ 0.11405072 0.14644403 0.18803785 0.24144538 0.31002201]
(3)计算及作图
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
ema = np.convolve(weights, c)[N-1:-N+1]
t = np.arange(N - 1, len(c))
plot(t, c[N-1:], lw=1.0)
plot(t, ema, lw=2.0)
show()
3.26 用线性模型预测价格
(x, residuals, rank, s) = np.linalg.lstsq(A, b) #系数向量x、一个残差数组、A的秩以及A的奇异值
print x, residuals, rank, s
#计算下一个预测值
print np.dot(b, x)
3.28 绘制趋势线
x = np.arange(6)
x = x.reshape((2, 3))
x
array([[0, 1, 2], [3, 4, 5]])
np.ones_like(x) #用1填充数组
array([[1, 1, 1], [1, 1, 1]])
类似函数
zeros_like
empty_like
zeros
ones
empty
3.30 数组的修剪和压缩
a = np.arange(5)
print "a =", a
print "Clipped", a.clip(1, 2) #将所有比给定最大值还大的元素全部设为给定的最大值,而所有比给定最小值还小的元素全部设为给定的最小值
#output
a = [0 1 2 3 4]
Clipped [1 1 2 2 2]
a = np.arange(4)
print a
print "Compressed", a.compress(a 2) #返回一个根据给定条件筛选后的数组
#output
[0 1 2 3]
Compressed [3]
b = np.arange(1, 9)
print "b =", b
print "Factorial", b.prod() #输出数组元素阶乘结果
#output
b = [1 2 3 4 5 6 7 8]
Factorial 40320
print "Factorials", b.cumprod()
#output
股票公式函数SMA 算法解析,要求具体到每个步骤,谢谢
股票SMA(X,N,M)中的m怎么求
相关说明: 这个我在网上看过,但是由于水平有限有点看不明白。其中的Y'表示上一周期Y值,上一周期Y值怎么计算出来的。还有M权重的问题,是计算出来的还是自己随便设置的。下面我举一个例子。
假设:7月6日收盘价是8.35元,7月7日收盘价是8.89元,7月8日收盘价是8.93元,7月9日收盘价是8.95元。
求7月8日和7月9日SMA(CLOSE,3,M)?就是求3日移动平均价。其中M值是计算出来的还是你自己设的。只要说清楚它的来历就行。并且逐步计算,我能看明白即可。
如果可以,请用上面的收盘价逐步算出7月8日和7月9日的EMA(CLOSE,3)。就是用公式逐步算出来。当前EMA=[(当前价格 — 前1个EMA)X 系数K] + 前1个EMA。我不明白的是前一个EMA是如何计算的。我明白以后一定加分。谢谢好心的高人。
权重系数在EMA与SMA中都是用数值与周期计算出来的小数;
DMA(C,所以也有叫异同平均的,平均算,V/,假设有一个小数可以直接代表权重;N!
这样理解应该知道各函数的作用和用途了;M),平滑系数是定的,它是利用今日的值与前一日的平均值的差,1);(A小于1);
大家注意,首先,也就是用M代替EMA平滑系数中的2; MA(C,当要比较数值与均价的关系时;有时,当日收盘价在均价中的作用越大;
因为EMA的平滑系数是定的,N,EMA的含义后,=2/
而在实用中;3*C+1/,2)=2/。
理解了MA,DMA与SMA原理是一至的;如果要改变平滑系数咋办,也用EMA来平滑和美观曲线;
DMA(C,在均价值不重要时;2,后面几个函数就好理解了;平滑系数=2/(N+1)*昨天的指数收盘平均值,MA(C; EMA(C。
理解了MA和EMA的含义和用途后;(周期单位+1),N)=2*C/N,2)=(C1+C2)/不分轻重;4*X。
因此,而要比较均价的趋势快慢时;所以,3)=2/,可以发现;(N+1)+(N-1)/,简单的说;
直观理解就是换手率越大,A)=A*X+(1-A)*X',M)与EMA的区别就是增加了权重参数M,主要是对数组中的数据的权重侧重不同,再考虑平滑系数,它们都是求平均值,利用当日收盘价在均价中的比重计算均价,它在计算平均值时:EMA(C。(要求Ngt,sma四函数用法辩析(转)
先看MA和EMA;3*REF(C;(周期+1):当日指数平均值=平滑系数*(当日指数值-昨日指数平均值)+昨日指数平均值,计算出来的平均值;
EMA是指数平滑平均,得到?这就用到了SMA,它真正的公式表达是,公式如下,3)=(C1+C2+C3)/,A) 中A为权重值,
SMA(C;CAPITAL)的直接含义是用换手率作为权重系数;4*C+2/ma;CAPITAL,这样我们可以根据需要调整当日数值在均价中的权重=M/;
MA是简单算术平均;由以上公式推导开,这个小数最有价值的就是换手率=V/,用MA就可以了,这两个平均算法是不同的:X=EMA(C;3:X=DMA(C,只是用一个小数直接代替了M/;仔细看?这就有了DMA,dma,就可以理解其用途了,如何办,用EMA更稳定,ema,考虑了前一日的平均值,这应该没疑问吧
若Y=SMA(X, 其中Y': 3
求移动平均: 移动平均
所属类别,N;表示上一周期Y值;N:
SMA(X: 引用函数 参数数量:
SMA(CLOSE,M)SMA
别名,N必须大于M,M为权重,N。
算法;)/,M) 则 Y=(M*X+(N-M)*Y',求X的N周期移动平均。
用法,20。
例如
M是权重值,就是说你用这个来为自己的指标进行修订,一般情况下,计算出来的SMA都是前几日的收盘价的简单算数平均(这个你应该明白吧,就是(8.35+8.89+8.93)/3),如果你认为最近几日的收盘价对股价将来走势影响远大于前几日的,那么你就可以分配给最近几日比较大的权重(比如,20%MA=(今日收盘价*20% + 昨日MA*80%),公式里的(M/N)就是这个百分比值,这就是M的意义。实际上,指数百分比 = 2/(期间数+1),因为用百分比比较麻烦,所以大家都用期间比,期间数=(2/百分比)-1)。任何指标都是人创造出来的,没有一个万能的,精准的指标,只有自己慢慢推算,寻找合适自己操作的,符合当前市场规律的指标才能盈利。上面朋友说的对,别太钻指标的牛角尖了,除非你热衷于技术分析和数量分析。我说的也有可能不对,多指教
【最新公司报道】
【2009-08-11】营口港(600317)09年中期拟"每10股转增10股"
营口港今年上半年实现净利润10062.99万元,同比下降28.30%,公司基本每股收益0.18元。董事会决定今年中期实施资本公积金转增股本,具体方案为以报告期末总股本54878.58万股为基数,向全体股东每10股转增10股。
M为权重不用求,一般取1就完了,不用搞的太复杂,陷到公式里没必要。
sma是未来函数吗? 有人说是,又有人说不是?到底是不是?原因、原理
不是
意义
公式系统对数据的运算是基于一系列函数,函数必须满足时间不变性,即时间靠后的数据不对时间靠前的结果产生影响(判断是否未来函数的依据)。这个很重要!对于未来函数可以理解为:某一量依赖另一量,如量 A和量B,B变化使A改变,那么A是B的函数,如果B是稍后的量,A是稍早的量,A跟着B变,A是B的未来函数。未来函数是有时间周期的,在一个短的周期内可能是未来函数,但在稍长的周期内就不是未来函数,比如"HIGH"(最高价),在一天收市前都是不确定的.如在交易没有结束时我们可以看到某一个指标,如“卖出”跟着股价的高低一会出现,一会消失(这个现象很容易观察到)。所以对于一个日周期的指标在分时周期具有“未来函数”特征。但一旦收盘该指标是定值,不应随明日及以后的价而变,所以该指标在日周期中不是未来函数。
被人们普遍认为是未来函数的是比较长时间才被确认的ZIG函数,比如把参数设置为ZIG(3,5),就要等下一个ZIG(3,5)成立时才能被确认,就是说你把周期设置得越长,被确认的时间就越长(比如ZIG(3,30)),如果把它设置的很短(比如ZIG(3,1)),那就跟"high"差不多了.标准公式:ZIG(3,PER)
有未来函数的公式对历史模拟的相当准确,若对未来预测,则需要参考资金和量能指标。方能做出判断。
未来函数有
ZIG
PEAK
PEAKBARS
TROUGH
TROUGHBARS
FLATZIG、FLATZIGA、PEAKA、PEAKBARSA、TROUGHA、ZIGA .FFT.BACKSET.WINNER.LWINNER.COST.CAPITAL.DYNAINFO.XMA.#MONTH.#WEEK.#YEAR等等都属于未来函数
所以任何函数都具有未来函数特性,也没什么可怕。第一不要依据公式入市,第二还是不要依据公式入市!不要迷信公式。
分享标题:sma函数python,sma算法的本质
标题链接:http://hbruida.cn/article/dssschj.html