沪深300指数的42天和246天均线投资策略

我把Python金融大数据分析-例3-2做了一下修改,将标普500指数换成了沪深300指数。我们来看看效果如何。

数据源从Yahoo换成了国内的TuShare。

年限的交易天数修改为246天。更适合A股实际交易天数。

import numpy as np
import pandas as pd
import tushare as ts
import matplotlib.pyplot as plt

hs300 = ts.get_k_data(
    '399300', index=True, start='2000-01-01', end='2017-01-31')
hs300.info()

hs300['close'].plot(grid=True, figsize=(8, 5))

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

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

plt.show()

hs300['42-246'] = hs300['42d'] - hs300['246d']
print(hs300['42-246'].tail())

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

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

plt.show()

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

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

《沪深300指数的42天和246天均线投资策略》 沪深300指数收盘价走势
《沪深300指数的42天和246天均线投资策略》 42天和246天均线走势
《沪深300指数的42天和246天均线投资策略》 多空交易信号图
《沪深300指数的42天和246天均线投资策略》 测率收益与市场收益比较

    原文作者:changzw
    原文地址: https://www.jianshu.com/p/a4f437f66e59
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞