深入浅出Python量化交易实学习(三)
第二章 回测与经典策略
2.2 移动平均线及双均线策略
2.2.1 单一移动平均指标
移动平均策略的核心思想非常简单,且十分容易理解
- 当股价上升且向上穿过N日的均线时,说明股价在向上突破,此时下单买入;当股价下降且向下穿过N日的均线时,说明股价整体出现下跌的趋势,此时下单卖出
- 当M日均价上升穿过N日的均线(M < N)时,说明股票处于上升的趋势,应下单买入;反之,当M日均价下降且穿过N日均线时,说明股票处于下降的趋势,应下单卖出
实现N日的均线代码如下:
#codeing=utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import mplfinance as mpf
from utils import wz_data
if __name__ == '__main__':
#单独实现了去wz网获取数据的接口
wz = wz_data()
#股票代码,起始日期,结束日期,这里走的是前复权
data = wz.get_stock_data_online('601318', '2020-01-01','2020-03-20')
#返回的直接是一个DataFrame对象
data.rename(columns={
'交易时间': 'Date',
'开盘价': 'Open',
'最高价': 'High',
'最低价': 'Low',
'收盘价': 'Close',
'成交量': 'Volume',
'成交额': 'Money',
'换手率': 'Turnover'
}, inplace = True)
data.index = pd.DatetimeIndex(data['Date'])
#print(data.head())
#计算10天均线
period = 10
avg_10 = []
avg_value = []
avg_value1 = []
#保证avg_10最多只有10个数,然后计算均值放入avg_value,初始化的时候值为avg_10[0]
for price in data['Close']:
avg_10.append(price)
if len(avg_10) > 10:
del avg_10[0]
avg_value.append(np.mean(avg_10))
#或者直接用rolling函数计算
avg_value1 = data['Close'].rolling(10,min_periods