量化分析中常用语句片段1
作者:冯德平(山野雪人)
1 用pandas_datareader从网上读取数据
#引入库:
import pandas as pd
import pandas_datareader as pdr
import datetime as dt
import numpy as np
start = dt.datetime(2010, 1, 1) #起始日
#end = datetime(2021, 1,1) #结束日,如果结束日是今天,可以省略
data = pdr.get_data_yahoo("600021.SS", start) #读取上海股票:上海代码+.SS
#data = pdr.get_data_yahoo("000002.SZ", start) #读取深圳股票:深圳代码+.SZ
#data = pdr.get_data_yahoo("AAPL", start) #读取美股
#print(data.tail()) #显示最后5行
#print(data.head()) #显示前面5行
#print(data.head(8)) #显示前面8行,类似地显示后面9行:print(data.tail(9))
print(data) #前后各显示5行
2 从文件读取数据
import pandas as pd
data=pd.read_csv("600882.csv",index_col="Date",parse_dates=["Date"])[["Close","Position"]]
#600882.csv为文件名;index_col="Date"以Date为索引值;
#parse_dates=["Date"])将Date字符串转为日期;[["Close","Position"]]只要Close和Position这两列。
print(data)
3 计算金叉或死叉
#注意前面要引入库import numpy as np
data['Signal'] = data['Adj Close'].rolling(5).mean() - data['Adj Close'].rolling(20).mean()
data['Position'] = (data['Signal'].apply(np.sign) + 1)/2
#np.sign>0时取1,np.sign=0时取0,np.sign<0时取-1,所以data['Position']只能取0或1
#print(data['Signal'])
#print(data['Position'])
4 只要指定的列
data=data[["Adj Close","Signal","Position"]]
#print(data.tail(30))
5 删除指定的列
data.drop(['High', 'Low', 'Open', 'Volume', 'Close'], axis=1, inplace=True)
data.dropna(inplace=True)
6 保存文件
data.to_csv("stock.csv",index=False) #不要索引值
7 读取当时的时间
import datetime
import time
# 获取当前时间, 其中中包含了year, month, hour, 需要import datetime
today = datetime.date.today()
print("时间:")
print(today)
# 日期转字符串
record_date = today.strftime('%Y-%m-%d')
print("字符串:")
print(record_date) #年月日
print(today.year) #年
print(today.month) #月
print(today.day) #日
8去掉时间中的时分秒
df["date"] = df["date"].dt.date
9只要某几个特征值(字段)
df.drop(columns=['volume','outstanding_share','turnover'],inplace=True) #删除三个特征值
10显示中文
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #显示中文
#mpl.rcParams['axes.unicode_minus']=False #显示正负号