循序渐进:用python做金融量化分析(二)一条移动平均线策略系统建立

在前言中我们讲了些基础知识,这一节正式开始从最简单的移动平均线讲起,移动平均线是在趋势行情中应用最广泛的策略,移动平均线有简单算术平均线,指数平均线,加权平均线,还可以分为一条均线,两条均线,三条均线策略等等,在这里我们从最简单的一条移动算术平均线开始,因为这个最简单,最好理解。策略的触发条件是当价格在移动平均线之上的时候,此时如果移动平均线趋势是向上的(即当日移动平均线价格大于上一日移动平均线价格),哪么就发出买入开仓信号,同理,当价格在移动平均线之下的时候,此时如果移动平均线是向下的,哪么就卖出平仓,另外还要加一个判断是否持仓的信号(即程序中的a==0),因为不加这个信号,系统按照前两个条件,就会不停的发出买入信号。感兴趣的朋友可试试if条件中去掉a==0这个条件看看结果有什么不同。
下面一段就是全部程序,很简单吧,懂点编程的应该都能看懂了,可以直接复制下来在spyder中直接运行,hs300.xls数据文件和运行文件放在同一个目录下就行了。这个系统可以算是量化系统的雏形了,要让它更加的自动化,智能化,后面还要进行优化完善,在后面的学习中,我们会逐步的增加新功能。

 

import xlrd
import matplotlib.pyplot as plt
buy=[]
sell=[]
a=0 #用于判断是否持仓,0代表空仓
xls = xlrd.open_workbook('hs300.xls')#打开文件
sheet = xls.sheets()[0]#打开表1
col = sheet.col_values(0)#打开第一列
ret=0
nrows = sheet.nrows #行数
Sma=[0.0 for i in range(nrows)]

for j in range(19,nrows):#计算20日均线数值
    Sma[j]=sum(col[(j-19):(j+1)])/20
for k in range(19,nrows): #收盘价在20日均线之上,且均线是向上的,空仓的时候买入
    if Sma[k-1]<Sma[k] and col[k]>Sma[k] and a==0:
        buy.append(col[k])
        a=1
    elif col[k]<Sma[k] and Sma[k]<Sma[k-1] and a==1:#收盘价在20日均线之下,且均线是向下的,持仓的时候卖出   
        sell.append(col[k])
        a=0
for l in range(0,len(sell)):  #用卖出数列减去买入数列得到收益点数,然后对所有收益求和
    ret += sell[l]-buy[l]
print("总的收益点数:" "%.2f"% ret) #总的收益点数,绝对数值,不是百分比
plt.ylim(2000,6000)
plt.plot(Sma[0:len(Sma)],'r')
plt.plot(col,'k')
plt.show()


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值