循序渐进:用python做金融量化分析(四)双均线系统策略

上一节中讲了单均线系统最优参数的寻找,这一节我们开讲双均线系统,在编程设计上,双均线系统相对于单均线系统来说多了一个均线循环,在短期均线循环里面再嵌套一个长期均线循环,其它方面和单均线系统变化不大,由于嵌套了一个循环,程序运算量大增,运行时间随着均线参数的增大而大大延长,所以本程序在设置的时候是把均线设计在4-40之间。有兴趣的朋友也可以自己修改参数,增加均线的数量,本文运行结果截取前五条记录,结果如下:

          re  sma   lma

456  3092.20 20.0  21.0

187  2682.15  9.0  27.0

476  2593.25 21.0  22.0

435  2549.35 19.0  20.0

158  2545.83  8.0  29.0

最优的是20和21日均线,这和单均线策略系统的结果差不多,两者的收益点数都是第一,而且收益点数相差也不是太大,这说明从日线上来看,沪深300指数用20日均线来判断趋势行情比较有利。

下面是完整的程序代码:

import pandas aspd

import xlrd

import matplotlib.pyplotas 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=40

ma_re =pd.DataFrame(columns=['re', 'sma','lma'])#建立表格,三列分别表示收益点数,短期均线,长期均线参数

row=0 

for j inrange(4,m): #外循环代表短期均线

    Sma=[]

    Lma=[]

    Sma=maCal(col,j).values     

    for n in range(j+1,m+1):#内循环代表长期均线

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

        buy=[]

        sell=[]

        Lma=maCal(col,n).values

        for k in range(j,nrows): 

            ret=0

            if col[k]>Sma[k] andSma[k]>Lma[k]  and a==0:#收盘价在短期均线之上,短期均线在长期均线之上

                buy.append(col[k])

                a=1

            elif col[k]

 

你可能感兴趣的:(循序渐进:用python做金融量化分析(四)双均线系统策略)