from matplotlib import pylab
import numpy as np
from datetime import datetime
import pandas as pd
import DataAPI #通联数据提供的数据API
import seaborn as sns
sns.set_style('white')#设置背景为白色
secID = '510050.XSHG' #华夏上证50ETF
start = '20080101'
end = '20150423'
#获取基金行情信息
security = DataAPI.MktFunddGet(secID=secID,beginDate=start,endDate=end,field=['tradeDate','closePrice'])
security['tradeDate']=pd.to_datetime(security['tradeDate'])
security.info()
security['closePrice'].plot(grid=False,figsize=(12,8))
sns.despine()
window_short = 20 #月均线,短期均线
window_long = 120 #半年线,长期均线
SD = 0.05 #偏离度阈值5%
#numpy内置移动平均函数:rolling_mean
security['short_window'] = np.round(pd.rolling_mean(security['closePrice'],window=window_short),2)
security['long_window'] = np.round(pd.rolling_mean(security['closePrice'], window=window_long), 2)
print(security[['closePrice','short_window','long_window']].tail())
#将三条线画到一张图上
security[['closePrice','short_window','long_window']].plot(grid=False,figsize=(12,8))
sns.despine()
#定义信号
#计算短期均线与长期均线的差s-1
security['s-1'] = security['short_window'] - security['long_window']
print(security['s-1'].tail)
#定义Regime为True,买入;Regime为False,卖出
security['Regime'] = np.where(security['s-1']>security['long_window']*SD,1,0)
security['Regime'].value_counts()
#信号时间分布
security['Regime'].plot(grid=False,lw=1.5,figsize=(12,8))
pylab.ylim((-0.1,1.1))
sns.despine()
security['Market'] = np.log(security['closePrice'] / security['closePrice'].shift(1))
security['Strategy'] = security['Regime'].shift(1) * security['Market']
security[['Market', 'Strategy', 'Regime']].tail()
security[['Market', 'Strategy']].cumsum().apply(np.exp).plot(grid=False, figsize=(12,8))
sns.despine()
双均线策略 ------优矿学习
最新推荐文章于 2024-05-07 14:55:26 发布