python背离点的判断

##python实现背离点的判断(test2)

这一次是先判断金叉和死叉,然后把其输出结果作为新的两张表,然后在新的两张表里分别进行判断是否是背离点。

import baostock as bs
import pandas as pd
import talib as ta
import matplotlib.pyplot as plt


def computeMACD(code, startdate, enddate):
    login_result = bs.login(user_id='anonymous', password='123456')
    print(login_result)

    ###获取股票日K线数据###
    rs = bs.query_history_k_data(code,
                                 "date,code,close,tradeStatus",
                                 start_date=startdate, end_date=enddate,
                                 frequency="d", adjustflag="3")
    #### 打印结果集 ####
    result_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        result_list.append(rs.get_row_data())
    df = pd.DataFrame(result_list, columns=rs.fields)
    # 剔除停盘数据
    df2 = df[df['tradeStatus'] == '1']
    # 获取dif,dea,hist,它们的数据类似是tuple,且跟df2的date日期一一对应
    # 记住了dif,dea,hist前33个为Nan,所以推荐用于计算的数据量一般为你所求日期之间数据量的3倍
    # 这里计算的hist就是dif-dea,而很多证券商计算的MACD=hist*2=(dif-dea)*2
    dif, dea, hist = ta.MACD(df2['close'].astype(float).values, fastperiod=12, slowperiod=26, signalperiod=9)
    df3 = pd.DataFrame({'dif': dif[33:], 'dea': dea[33:], 'hist': hist[33:]},
                       index=df2['date'][33:], columns=['dif', 'dea', 'hist'])
    df3.plot(title='MACD')
    df4= pd.merge(df3, df2, on='date', how='left')
    plt.show()
    df4.to_csv("./test2_df4.csv", index=False)
    #print(df4)
    # 寻找MACD金叉和死叉
    datenumber = int(df3.shape[0])
    #金叉表
    today_data = pd.DataFrame(columns=['date', 'dif', 'dea', 'close'])
    lastday_data = pd.DataFrame(columns=['date', 'dif', 'dea', 'close'])
    #死叉表
    today_data2 = pd.DataFrame(columns=['date', 'dif', 'dea', 'close'])
    lastday_data2 = pd.DataFrame(columns=['date', 'dif', 'dea', 'close'])

    for i in range(datenumber - 1):
        if((df4.iloc[i, 1] <= df4.iloc[i, 2]) & (df4.iloc[i + 1, 1] >= df4.iloc[i + 1, 2])):#判断金叉
            #print("期货代码:{},MACD金叉的日期:{}, 价格:{},dif:{},dea:{}".format(code, df4.iloc[i + 1, 0], df4.iloc[i + 1, 5],df4.iloc[i + 1, 1], df4.iloc[i + 1, 2]))
            #if (df3.iloc[i, 0] <= df3.iloc[i, 1]) & (df3.iloc[i + 1, 0] >= df3.iloc[i + 1, 1]):
            dict1={'date':df4.iloc[i + 1, 0],'dif':df4.iloc[i + 1, 1],'dea':df4.iloc[i + 1, 2],'close':df4.iloc[i + 1, 5]}
            dict2={'date':df4.iloc[i, 0],'dif':df4.iloc[i, 1],'dea':df4.iloc[i, 2],'close':df4.iloc[i, 5]}
            today_data = today_data.append(dict1, ignore_index=True)
            lastday_data = lastday_data.append(dict2, ignore_index=True)

        if ((df4.iloc[i, 1] >= df4.iloc[i, 2]) & (df4.iloc[i + 1, 1] <= df4.iloc[i + 1, 2])):#判断死叉
            dict1 = {'date': df4.iloc[i + 1, 0], 'dif': df4.iloc[i + 1, 1], 'dea': df4.iloc[i + 1, 2],'close': df4.iloc[i + 1, 5]}
            dict2 = {'date': df4.iloc[i , 0], 'dif': df4.iloc[i, 1], 'dea': df4.iloc[i, 2],'close': df4.iloc[i, 5]}
            today_data2 = today_data2.append(dict1, ignore_index=True)
            lastday_data2 = lastday_data2.append(dict2, ignore_index=True)
    print(today_data)
    print(lastday_data)
    print(today_data2)
    print(lastday_data2)
    # 下面开始判断背离点
    flag = False
    for j in range(today_data.shape[0] - 1):
        if ((lastday_data.iloc[j, 1] >today_data.iloc[j+1 , 1]) & (lastday_data.iloc[j, 3] < today_data.iloc[j+1, 3])):  #判断顶背离
            flag = True
            print("期货代码:{},顶背离时间:{}, 价格:{}".format(code, today_data.iloc[j+1, 0], today_data.iloc[j+1, 3]))
    if not flag:
        print("没有顶背离点")

    flag=False
    for j in range(today_data2.shape[0]-1):
        if((lastday_data2.iloc[j, 1] < today_data2.iloc[j+1, 1]) & (lastday_data2.iloc[j, 3] > today_data2.iloc[j+1 , 3])): #判断底背离
            flag=True
            print("期货代码:{},底背离时间:{}, 价格:{}".format(code, today_data2.iloc[j+1, 0], today_data2.iloc[j+1, 3]))
    if not flag:
            print("没有底背离点")

    bs.logout()
    return (dif, dea, hist)


if __name__ == '__main__':
    code = 'sh.600000'
    startdate = '2019-06-08'
    enddate = '2020-01-08'
    (dif, dea, hist) = computeMACD(code, startdate, enddate)
 

python背离点的判断_第1张图片

你可能感兴趣的:(python背离点的判断)