Python金融大数据分析-例3-2:42天和252天均线投资策略

同样不能完全按照书上的案例写,要修改一些地方才能正常运行。

import numpy as np
import pandas as pd
from pandas_datareader import data as web
import matplotlib.pyplot as plt

# pandas_datareader和pyplot的导入格式要修改一下才能用

sp500 = web.DataReader(
    '^GSPC', data_source='yahoo', start='1/1/2000', end='1/30/2017')
sp500.info()

sp500['Close'].plot(grid=True, figsize=(8, 5))

plt.show()
# 增加这个命令才能显示数据图

sp500['42d'] = np.round(
    sp500['Close'].rolling(
        window=42, center=False).mean(), 2)
sp500['252d'] = np.round(
    sp500['Close'].rolling(
        window=252, center=False).mean(), 2)
# 这里的rolling的写法要更新
print(sp500[['Close', '42d', '252d']].tail())
# 增加print以便让tail真正的显示数据
sp500[['Close', '42d', '252d']].plot(grid=True, figsize=(8, 5))

plt.show()

sp500['42-252']=sp500['42d']-sp500['252d']
print(sp500['42-252'].tail())

SD=50
sp500['Regime']=np.where(sp500['42-252']>SD,1,0)
sp500['Regime']=np.where(sp500['42-252']<-SD,-1,sp500['Regime'])
print(sp500['Regime'].value_counts())

sp500['Regime'].plot(lw=1.5)
plt.ylim([-1.1,1.1])

plt.show()

sp500['Market']=np.log(sp500['Close']/sp500['Close'].shift(1))
sp500['Strategy']=sp500['Regime'].shift(1)*sp500['Market']

sp500[['Market','Strategy']].cumsum().apply(np.exp).plot(grid=True,figsize=(8,5))
plt.show()

Python金融大数据分析-例3-2:42天和252天均线投资策略_第1张图片
标普500收盘价走势
Python金融大数据分析-例3-2:42天和252天均线投资策略_第2张图片
42日与252日均线走势
Python金融大数据分析-例3-2:42天和252天均线投资策略_第3张图片
多空交易信号图
Python金融大数据分析-例3-2:42天和252天均线投资策略_第4张图片
策略收益率与标普500指数收益率对比

Python金融大数据分析-例3-2

你可能感兴趣的:(Python金融大数据分析-例3-2:42天和252天均线投资策略)