【量化交易笔记】4.移动平均值的实现

上一讲已经讲A股的数据下载到本地或保存数据库,我们可以随时使用。
移动平均MA(Moving Average) ,是用统计分析的方法,将一定时期内的证券价格(指数)加以平均,并把不同时间的平均值连接起来,形成一根MA,用以观察证券价格变动趋势的一种技术指标。

下面我们从K 线图中的均线讲解移动平均值,如 5日均线(周),10日均线(半月),20日均线(月),250日均线(年)。在肌市多头排列,空头排列这些专业名称,我在以后讲解都需要用到移动平均值。多头排列,即小周期的均值大于大周期的均值,即小周期均线在大周期均线之上,反之,即空头排列。
除了移动平均之外,加权移动平均(Weighted Moving Average,WMA),指数移动平均值(Exponential Moving AverageEMA),也是类似指标,在股市也有着广泛的应用。

原理

在讲移动平均值前,让我先了解简单平均值:
M = 1 N ∗ ( X 1 + X 2 + ⋯ + X N ) = 1 N ∑ i = 1 N M=\frac{1}{N}*(X_1+X_2+ \cdots +X_N)=\frac{1}{N} \sum_{i=1}^N M=N1(X1+X2++XN)=N1i=1N
这就是我们平时讲的一般意义的平均值。而移动平均值,给定一个移动窗口,来计算一系列平均值。
我们以百度百科的例子。
原数据列为: X 1 , X 2 , X 3 , ⋯   , X n X_1,X_2,X_3,\cdots,X_n X1,X2,X3,,Xn 现以窗口长度为 3,进行移动平均值,公式如下:
X 1 + X 2 + X 3 3 , X 2 + X 3 + X 4 3 , ⋯   , X n − 2 + n n − 1 + X n 3 \frac{X_1+X_2+X_3}{3},\frac{X_2+X_3+X_4}{3},\cdots,\frac{X_{n-2}+n_{n-1}+X_n}{3} 3X1+X2+X3,3X2+X3+X4,,3Xn2+nn1+Xn

代码实现

为了方便描述,将数列都放在 pandas 里;

X= np.arange(1,11)
df=pd.DataFrame(X,columns=['A'])
for i in range(3,df.shape[0]):
    df.loc[i,'B']=(df.loc[i-3][0]+df.loc[i-2][0]+df.loc[i-1][0])/3
df
AB
01NaN
12NaN
232.0
343.0
454.0
565.0
676.0
787.0
898.0
9109.0

可以发现B2=(A0+A1+A2)/3B3=(A1+A2+A3)/3B4=(A2+A3+A4)/3。由于前面2行个无法计算一般情况下是删除。
弄清楚原理后,pandas 函数和 Ta-lib 库都可以提供相关操作,获得一致结果。

  • pandas 函数
# 直接用pandas 的rolling函数
df.A.rolling(window=3).mean()
  • ta-lib 库
# talib 的MA 函数
talib.MA(df.A, timeperiod = 3)

这里在安装talib有个坑,需提醒大家的。
不能直接用命令安装pip install Ta-Lib,可能会提示安装不成功或错误。
原因是不同的python版本,需要不同的talib库。因此需要自己下载whl格式文件,进行手动安装。
方法如下:

  1. 找到自己电脑的python 版本 ,具体 命令为‘!python -V’,比如得到的是3.6.4
    如:若本机安装是32位的python3.6,则选TA_Lib‑0.4.17‑cp36‑cp36m‑win32.whl下载;
    下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
    在后面找到“TA-Lib: a wrapper for the TA-LIB Technical Analysis Library.”这一行下面。
  2. 在命令行中(命令行的打开方式在文章最后的Tips里),进入此whl文件所在的目录,执行命令:
    pip install 下载的whl文件名
    如:pip install TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl
    pip install 文件所在的绝对路径+文件名
    如:pip install D:my_packages TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl
应用

现在以收盘价,画出5日,10日,20日,均线。为了方便我们定义一个函数。

def ma(df, n=5, factor='close'):
    """
    计算均线因子
    :param df: 待计算扩展因子的DataFrame
    :param n: 待计算均线的周期,默认计算5日均线
    :param factor: 待计算均线的因子,默认为收盘价
    :return: 包含扩展因子的DataFrame
    """
    # 均线名称,例如,收盘价的5日均线名称为ma_5,成交量的5日均线名称为volume_ma_5
    name = '{}ma_{}'.format('' if 'close' == factor else factor + '_', n)
    # 取待计算均线的因子列
    s = pd.Series(df[factor], name=name, index=df.index)
    
    # 利用rolling和mean计算均线数据
    s = s.rolling(center=False, window=n).mean()

    # 将均线数据添加到原始的DataFrame中
    df = df.join(s)

    # 均线数值保留两位小数
    df[name] = df[name].apply(lambda x: round(x + 0.001, 2))
    return df
# 均线周期列表
ma_list = [5, 10, 20, 30, 60]

newxx=pd.DataFrame()
newxx['close']=dataframe['close']
for i in ma_list:
    newxx=ma(newxx,i)
# 数据太多,就取最后100个进行画图。
newxx[-100:].plot(figsize=(10, 8));

在这里插入图片描述

插播一个知识点

在采集到A股数据中有一列 pctChg ,即涨跌幅,也可以通过pandaspct_change() 函数 来获得,

dataframe.close.pct_change()

原理即
收 益 当前 = 收盘 价 当前 − 收盘 价 前交易日 收盘 价 前交易日 收益_{当前}=\frac{收盘价_{当前} - 收盘价_{前交易日}}{收盘价_{前交易日}} 当前=收盘前交易日收盘当前收盘前交易日
这个函数,在A股又称收益率,如果带上参数, pct_change(5)可以表示5天的收益率。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种流行的编程语言,由于其易学易用、免费且开源、具有丰富的第三方库等优势,它被广泛应用于各种领域,特别是在金融分析和量化交易中,Python也成为了不可缺少的工具之一。 在Python金融分析与量化交易实战的课程中,学生可以通过pan.baidu.com平台获取相关资源,掌握包括了数据分析、量化交易策略、数据可视化等方面的实用技能。 首先,课程将从数据的获取和清洗入手,介绍如何使用Python的pandas包进行数据分析和预处理。特别是在金融领域,数据质量的好坏对于交易策略的制定至关重要,因此学生可以通过课程中的案例学习,掌握常见的数据清洗技巧,比如缺失值处理和异常值检测等。 其次,课程还将介绍如何使用Python进行量化交易策略的设计和实现量化交易是一种基于量化模型和算法的交易方式,通过历史数据分析建立规则并实现自动化交易,具有较高的执行效率和一定的风险控制能力。学生可以学习和了解Python中一些流行的量化交易库,例如zipline和backtrader等,同时,还可以了解一些经典的交易策略,比如均值回归和趋势跟踪等。 最后,课程会介绍如何使用Python进行数据可视化,这对于金融分析和量化交易来说也非常重要。学生可以使用Python的可视化工具包matplotlib和seaborn等,对数据进行可视化呈现,有助于快速掌握数据的规律和趋势。 总之,Python金融分析与量化交易实战 pan.baidu.com 是一门非常实用的课程,学习者可以通过课程了解并掌握Python在金融领域中的应用,同时也可以在实践中提升编程和数据分析的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值