pandas.DataFrame获取多列构成一个新的pandas.DataFrame
data=df[[‘trade_date’,‘close’]]#获取交易日期与收盘价数据
使用DataFrame.plot绘图
data[‘close’].plot(grid=True,figsize=(12,10))#figsize设置窗口的大小
pandas.Series.rolling功能生成均线,window设置均线周期,.mean功能计算window的均值
data[‘5d’]=pd.Series.rolling(data[‘close’],window=5).mean()#使用pd的Series功能生成5均线,window=5就是5次一滚动
pandas.DataFrame的pct_change计算变化百分比
data[‘market’]=data[‘close’].pct_change(1)#下面的-上面的)/上面的
pandas.DataFrame.shift(1)就是往下一个数据的意思
data[‘stategy’]=data[‘signal’].shift(1)*data[‘market’]#‘.shift(1)就是往下移动一个数据的意思’
pandas.DataFrame.iloc函数切片函数就是获取某一行的某一列
rtn.append(data.iloc[i,6])
np.cumsum计算列表的累加值
result=np.cumsum(rtn)#计算累积收益:上一个加上下一个,返回一个列表
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
df=pd.DataFrame(pd.read_csv("601698.SH.csv"))
data=df[['trade_date','close']]#获取交易日期与收盘价数据
#data['close'].plot(grid=True,figsize=(12,10))#figsize设置窗口的大小
data['5d']=pd.Series.rolling(data['close'],window=5).mean()#使用pd的Series功能生成5均线,window=5就是5次一滚动
data['25d']=pd.Series.rolling(data['close'],window=25).mean()
data[['close','5d','25d']].plot(grid=True)
data['s-l']=data['5d']-data['25d']
data['signal']=np.where(data['s-l']>0,1,0)
data['signal']=np.where(data['s-l']<0,-1,data['signal'])
#data['signal'].plot(lw=1.5)#lw设置绘图曲线的长度
print(data['signal'].value_counts())
#创建市场收益率
data['market']=data['close'].pct_change(1)#下面的-上面的)/上面的
data['stategy']=data['signal'].shift(1)*data['market']#'.shift(1)就是往下移动一个数据的意思'
#寻找多头收益
rtn=[];
for i in range(0,data.shape[0]):
if data.iloc[i,5]==1:
rtn.append(data.iloc[i,6])
result=np.cumsum(rtn)#计算累积收益:上一个加上下一个,返回一个列表
plt.plot(result)
print("hello!")