目标:通过macd指标判断股票买入卖出时机
一、金叉死叉定义
金叉定义: 当MACD指标中的DIFF线从下而上与DEA线交叉时,这个交叉为金叉,金叉一般情况下是买入的信号。
死叉定义: 当MACD指标中的DIFF线从上而下与DEA线交叉时,这个交叉为死叉,死叉一般情况下是卖出的信号。
二、数据来源
1、tushare
(1)优点
数据很全,经得起验证,准确率不错;学生党免费使用!这点必须夸爆,这么好的接口居然可以对学生免费;文档查阅方便,接口使用实例详实,点赞!
(2)缺点
有积分制度和频率限制,写程序必须考虑频率限制比如每分钟获取次数;需要注册和登录,比较繁琐;
(3)解决高频访问历史行情数据方法
构建本地数据库,每日更新,不直接访问tushare。只支持日级行情数据,高频数据还得花钱。
2、baostock
baostock官网
优点:没有频率限制,可以高频访问;基本的一些数据都有;不用注册不用登陆;文档查阅方便容易上手
缺点:缺少精细一些的季度报数据;没有基金数据
.
三、计算买入卖出时机
设第t-1天和第t天的diff、dea值分别为diff[t-1]、dea[t-1]、diff[t]、dea[t],则
1、买入时机(快线上穿慢线,且在零轴附近)
diff[t-1]<dea[t-1] and diff[t]>dea[t] and -0.01<=diff[t]<+0.01
2、卖出时机(慢线上穿快线,且在零轴附近)
diff[t-1]>dea[t-1] and diff[t]<dea[t] and -0.01<=diff[t]<+0.01
四、发送微信提醒
待开发
五、完整代码
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
def read_stock_data(code='001979.SZ'):
df=pd.read_csv('./stock_data/%s.csv'%code,index_col=0)
return df
# 股票代码列表
code_list=['601288.SH','001979.SZ','600048.SH','002920.SZ','000560.SZ',
'002377.SZ','002574.SZ','600115.SH','002410.SZ','300285.SZ',
'300760.SZ','601963.SH','601328.SH','601916.SH','601318.SH',
'601628.SH','000333.SZ','000001.SZ','600016.SH','601988.SH',
'601398.SH','601939.SH','600036.SH','601633.SH','002594.SZ',
'000625.SZ','300059.SZ']
data=read_stock_data()#读取股票行情数据
#计算金叉和死叉
print(len(data))
for i in range(len(data)-1):
print(data.iloc[i+1,0])
print(data.iloc[i,7])
print(data.iloc[i+1,7])
if data.iloc[i,7]<=0 and data.iloc[i+1,7]>0:
trade_date=data.iloc[i+1,0]
print('金叉买入信号')
elif data.iloc[i,7]>=0 and data.iloc[i+1,7]<0:
trade_date=data.iloc[i+1,0]
print('死叉卖出信号')
fig, ax = plt.subplots()
print(data)
#绘制dif和dea曲线图
x=range(len(data))
y1=data.iloc[:,8]
y2=data.iloc[:,9]
ax.plot(x,y1)
ax.plot(x,y2)
plt.show()