循序渐进:用python做金融量化分析(三)如何寻找均线系统的最优参数

在上一节中我们讲述了简单的单移动平均线策略系统,看起来还是挺简单的,但是简单的代价就是不够智能,功能太少,如果要测试多条均线参数都要手工输入,现在我们就把它加以改进,增加一个自动寻找最佳均线的功能,有了这个功能,我们只要运行一次,就可以把各均线参数的收益率从高到底的输出,这样哪个参数最优就一目了然了,同样这个改进,我们还是按绝对收益率来进行排名,暂不考虑交易回撤。结果打印出收益率最高的五条均线参数。编程的实现过程我们在上一节的基础上加了一个大循环,这个循环就是用来遍历均线的,我们设定均线从2日到120日测试一遍。然后用DataFrame建立一个二维表,第一列”re”用来存放收益点数,第二列”ma”用来存放均线参数,运行结束的时候就是输出这个表格。为了让程序更容易理解,这次我们增加了一个maCal函数,这个函数的功能就是求移动平均线的均值的,有了这个函数后,程序看起来更清晰,更有层次感。测试的结果表明20日均线的收益点数最高,截取前5条输出记录如下

          re    ma

18   2894.44  20.0

7    2786.33   9.0

32   2518.90  34.0

33   2501.34  35.0

39   2394.43  41.0

其中第一列是原始索引,re列为收益点数,ma列为均线参数。

程序代码如下:

import pandas aspd

import xlrd

importmatplotlib.pyplot as plt

import numpy as np

def maCal(price,m): #求移动平均线的函数

    ma=pd.Series(0.0,index=list(price))

    for i in range(m-1,len(col)):

        ma[i]=sum(col[(i-m+1):(i+1)])/m

    return(ma)

xls =xlrd.open_workbook('hs300.xls')#打开文件

sheet =xls.sheets()[0]#打开表1

col =sheet.col_values(0)#打开第一列

nrows =sheet.nrows #行数

m=120

ma_re =pd.DataFrame(columns=['re', 'ma'])

row=0

for j inrange(2,m): #大循环遍历均线参数

    buy=[]

    sell=[]

    a=0 #用于判断是否持仓,0代表空仓

    Sma=[]

    Sma=maCal(col,j).values 

    ret=0   

    for k in range(j,nrows):  #收盘价在均线之上,且均线是向上的,空仓的时候买入

        if Sma[k-1]Sma[k] and a==0:

            buy.append(col[k])

            a=1

        elif col[k]

 

你可能感兴趣的:(python,量化,投资,均线)