一、Python语言的主要特征
1、开源性
Python和大多数的支撑库和工具都是开源的,通常可以非常灵活的使用而且有开放的协议。
2、解释性
也可以使用Cpython完成将解释性语言转化为实施可执行的Python二进制代码的应用
3、多框架
Python语言支持不同的编程与实现框架,例如面向对象、和必要的函数型或过程化编程。
4、多目的
Python可以用于快速的、交互式的代码开发以及建构大型应用系统,它也可以用于底层系统操作以及高级分析的任务。
二、Python的科学计算库
NumPy: 提供了多维数组对象保存同质或异质的数据,它还提供了处理这个数组对象的优化函数/方法。
SciPy:包含一系列子库和函数来完成科学和金融领域的重要标准功能,比如三维曲线插值以及数值积分。
Matplotlib:这是Python最为流行的绘图和可视化库,提供了2D和3D的绘图功能。
PyTables:是流行的HDF5数据存储库,这个库可以完成基于有层次的数据库和文件格式的优化的,以磁盘为基础的IO操作。
Pandas:pandas基于NumPy来创建,提供了管理和分析时间序列以及表格数据的丰富的类;它与matplotlib库紧密结合提供了绘图功能,和PyTables类结合提供了数据读取功能。
三、Python 用于技术分析
基于历史价格信息的技术分析对于金融从业者和其他相关方而言是一项典型的工作。
在下面的介绍中,我们关注的是为了回测的目的而研究过去的市场数据,而不是特别的关注预测未来的价格波动。我们研究的目标是基准指数S&P500,这通常被看作是美国股票整体市场变化的一项好的代理指标。这是因为指数包含大量的股票范围而且代表了市值的大部分。它还拥有大量具有流动性的期货和期权市场。
我们将从网络资源中读入历史指数信息,并完成一项基于趋势信号的交易系统的回测。首先我们需要读入数据,使用的是pandas库。具体来说,我们使用pandas.io.data中的DataReader函数来获得金融时间序列数据。同时,这段代码还会随Timestamp对象生成一个时间指数。
通过作图来简要的看一下数据,代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt #在pycharm软件中,直接调用plot()方法并不会直接弹出图片,需要引用这个库再调用这个库下的方法,才会画图。
from pandas_datareader import data as web #原来处于pandas.io.data的内容已经被移动到新的模块中,先安装新包 pandas_datareader,再引用data。
sp500 = web.DataReader('^GSPC',data_source='yahoo',start='1/1/2000',end='4/14/2014')#实例化data模块下的DataReader类,^GSPC为标普500代码,yahoo为数据来源,start为开始时间,end为接收的结束时间。
sp500.info() #查看接收的标普500的数据。
sp500['Close'].plot(grid=True,figsize=(8,5))#以收盘价为基准,画图,有网格,图形大小是(8,5)
sp500['42d']=np.round(pd.rolling_mean(sp500['Close'],window=42),2)#新建立一个key为42d的键值对,值为42天MA,pd.rolling_mean是调用pd下的移动平均方法,把sp500的收盘价和时间窗口42天,传给移动平均函数,最外层套上np.round()取几位小数的函数。
sp500['252d']=np.round(pd.rolling_mean(sp500['Close'],window=252),2)#同上
sp500[['Close','42d','252d']].tail()#取收盘价、42MA、252MA的尾数
未完待续。。。
这里我们要实现的趋势策略是基于两个月(或42天)以及一年(即252天)的趋势(即,对应时期的指数水平的移动平均)。pandas会较为有效的生成对应的时间序列并且可以将趋势序列与原始序列表达在同一副图中。
我们首先在pandas DataFrame对象中加入新的两列,分别代表趋势。这样数据会有所减少。接着对新的带有趋势数据的数据图进行绘制。
未完待续。。。