需求二:双均线策略制定
任务一:计算该股票历史数据的5日均线和60日均线
- 什么是均线?
- 对于每一个交易日,都可以计算出前N天的移动平均值,然后把这些移动平均值连起来,成为一条线,就叫做N日移动平均线。移动平均线常用线有5天、10天、30天、60天、120天和240天的指标。
- 5天和10天的是短线操作的参照指标,称作日均线指标;
- 30天和60天的是中期均线指标,称作季均线指标;
- 120天和240天的是长期均线指标,称作年均线指标。
- 均线计算方法:MA=(C1+C2+C3+...+Cn)/N,C:某日收盘价 N:移动平均周期
1、处理数据
import pandas as pd
df=pd.read_csv('./maotai.csv').drop(labels='Unnamed: 0.1',axis=1)
df
#将date列转为时间序列且其作为源数据的行索引
df['date']=pd.to_datetime(df['date'])
df.set_index('date',inplace=True)
df.head()
2、计算均线
- rolling(),pandas里面滚动选择数据,rolling(2)是连续计算和,x1+x2,x2+x3,x3+x4
ma5=df['close'].rolling(5).mean()
ma30=df['close'].rolling(30).mean()
3、画图
- %matplotlib inline可以在ipython编译器里面直接使用,功能是可以内嵌画图,并且可以省略掉plt.show()这一步。
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(ma5[50:80])
plt.plot(ma30[50:80])
任务二:分析输出所有金叉日期和死叉日期
- 股票分析技术中的金叉和死叉,可以简单解释为:
- 分析指标中的两根线,一根为短时间内的指标线,另一根为较长时间的指标线。
- 如果短时间的指标线方向拐头向上,并且穿过了较长时间的指标线,这种状况叫“金叉”。
- 如果短时间的指标线方向拐头向下,并且穿过了较长时间的指标线,这种状况叫“死叉”。
- 一般情况下,出现金叉后,操作趋向买入;死叉则卖出。当然,金叉和死叉只是分析指标之一,要和其他很多指标配合使用,才能增加操作的准确性。
如上图白色的线是短期均线,黄色的线是中期均线,第一个交叉点,白色的线是向上拐,则说明这个点金叉,可以买入与。交点左边中期均值大于短期均值,交点右边中期均值小于短期均值。
Q1:如果我从2010年1月1日开始,初始资金为100000元,金叉尽量买入,死叉全部卖出,则到今天为止,我的炒股收益率如何?
思考:如果s1=ma5<ma30,s2=ma5>ma30,满足S1是TRUE,满足S2是FALSE,那么金叉对于s1就是T到F,死叉就是F到T,但这个对于s2不适用,因为s1和s2判断对错是相反的所以要统一起来。我们用到了逻辑与非。
图片如果还是看不懂我们可以整理一下表格
#空值不能比较大小,所以找30个数据往后的数据
ma5=ma5[30:]
ma30=ma30[30:]
s1=ma5<ma30
s2=ma5>ma30
1、判断金叉
gloden_ex = ~(s1 | s2.shift(1)) #False代表金叉
gloden_date = df.loc[gloden_ex].index
gloden_date
Int64Index([ 120, 190, 301, 330, 386, 412, 428, 442, 502, 593, ... 4531, 4565, 4581, 4681, 4690, 4711, 4795, 4836, 4925, 4962], dtype='int64', length=104)
2、判断死叉
df=df[30:]
death_ex=s1&s2.shift(1)#判断死叉条件
death_ex##返回的是布尔值
df.loc[death_ex]##死叉对应行数据
death_date=df.loc[death_ex].index
death_date
Int64Index([ 135, 215, 317, 365, 391, 426, 432, 457, 591, 638, ... 4554, 4574, 4657, 4689, 4701, 4733, 4823, 4867, 4948, 4996], dtype='int64', length=104)