相似K线的定量

  • 1.设置样本池,并获取股票代码
In [24]:
indexcode = '000016.SH'
startdate = '20140101'
enddate = '20190201'
stocklist = get_index_stocks(indexcode,enddate)
stocklist
Out[24]:
['600196.SH',
 '600519.SH',
 '600036.SH',
 '601857.SH',
 '600050.SH',
 '601186.SH',
 '600029.SH',
 '601989.SH',
 '601166.SH',
 '601939.SH',
 '600309.SH',
 '600703.SH',
 '600000.SH',
 '600048.SH',
 '601088.SH',
 '601398.SH',
 '600887.SH',
 '600585.SH',
 '600690.SH',
 '601318.SH',
 '600276.SH',
 '600028.SH',
 '601818.SH',
 '601688.SH',
 '601888.SH',
 '601766.SH',
 '603993.SH',
 '601229.SH',
 '600340.SH',
 '600606.SH',
 '601138.SH',
 '600030.SH',
 '601169.SH',
 '600019.SH',
 '601668.SH',
 '600547.SH',
 '601988.SH',
 '603259.SH',
 '601328.SH',
 '601336.SH',
 '601390.SH',
 '601800.SH',
 '601360.SH',
 '600016.SH',
 '601628.SH',
 '601211.SH',
 '601006.SH',
 '600104.SH',
 '601601.SH',
 '601288.SH']
  • 2.获取样本池股票的近四年的开高低收成交量
In [25]:
data = get_price(stocklist,startdate,enddate,'1d',['open','high','low','close'],is_panel =1)
#收盘价
closedf = data['close'].fillna(0)
opendf = data['open'].fillna(0)
highdf = data['high'].fillna(0)
lowdf = data['low'].fillna(0)
lowdf
Out[25]:
600000.SH 600016.SH 600019.SH 600028.SH 600029.SH 600030.SH 600036.SH 600048.SH 600050.SH 600104.SH ... 601766.SH 601800.SH 601818.SH 601857.SH 601888.SH 601939.SH 601988.SH 601989.SH 603259.SH 603993.SH
2014-01-02 4.88 4.47 3.00 3.03 2.36 10.80 7.11 3.94 3.00 6.45 ... 4.24 3.02 1.80 6.84 15.49 2.63 1.67 5.48 0.00 1.84
2014-01-03 4.74 4.39 2.99 2.94 2.31 10.52 6.84 3.88 2.95 5.96 ... 4.13 2.97 1.77 6.81 15.25 2.58 1.64 5.36 0.00 1.83
2014-01-06 4.78 4.26 2.79 2.89 2.23 10.18 6.76 3.60 2.87 5.64 ... 3.93 2.84 1.71 6.72 14.76 2.52 1.58 5.03 0.00 1.74
2014-01-07 4.69 4.18 2.86 2.98 2.22 10.29 6.72 3.55 2.87 5.57 ... 3.91 2.85 1.72 6.89 14.69 2.55 1.57 5.01 0.00 1.74
2014-01-08 4.76 4.19 2.72 2.95 2.22 10.28 6.90 3.48 2.82 5.80 ... 3.67 2.84 1.72 6.83 14.45 2.52 1.57 5.00 0.00 1.71
2014-01-09 4.79 4.21 2.77 2.95 2.21 10.13 7.05 3.56 2.82 5.66 ... 3.76 2.83 1.71 6.79 14.41 2.50 1.57 5.01 0.00 1.66
2014-01-10 4.85 4.19 2.73 2.98 2.19 9.82 7.05 3.58 2.78 5.55 ... 3.75 2.82 1.70 6.71 14.53 2.50 1.57 4.81 0.00 1.64
2014-01-13 4.92 4.19 2.76 2.98 2.19 9.68 7.17 3.44 2.78 5.53 ... 3.74 2.82 1.70 6.71 14.85 2.51 1.58 4.89 0.00 1.66
2014-01-14 4.86 4.20 2.84 3.04 2.20 9.69 7.09 3.46 2.79 5.61 ... 3.71 2.83 1.71 6.71 14.98 2.52 1.58 4.72 0.00 1.72
2014-01-15 4.79 4.20 2.85 3.13 2.21 9.66 6.97 3.45 2.79 5.68 ... 3.74 2.83 1.70 6.78 15.35 2.51 1.58 4.75 0.00 1.68
2014-01-16 4.80 4.17 2.85 3.19 2.21 9.71 6.96 3.45 2.80 5.61 ... 3.70 2.83 1.70 6.74 15.52 2.47 1.57 4.71 0.00 1.68
2014-01-17 4.73 4.06 2.68 3.18 2.20 9.67 6.85 3.44 2.78 5.26 ... 3.58 2.79 1.66 6.72 15.14 2.44 1.56 4.63 0.00 1.69
2014-01-20 4.71 3.95 2.71 3.09 2.20 9.78 6.86 3.42 2.76 5.03 ... 3.51 2.76 1.63 6.82 14.91 2.46 1.53 4.68 0.00 1.65
2014-01-21 4.75 3.97 2.71 3.15 2.21 9.87 6.92 3.49 2.77 5.18 ... 3.55 2.80 1.64 6.81 15.30 2.46 1.54 4.69 0.00 1.65
2014-01-22 4.80 4.00 2.73 3.18 2.25 10.05 6.92 3.56 2.79 5.33 ... 3.61 2.82 1.65 6.82 15.55 2.48 1.55 4.73 0.00 1.68
2014-01-23 4.83 4.04 2.75 3.13 2.28 10.15 6.93 3.77 2.81 5.69 ... 3.79 2.86 1.65 6.82 15.81 2.47 1.56 4.98 0.00 1.71
2014-01-24 4.78 4.00 2.74 3.14 2.28 10.14 6.83 3.76 2.79 5.65 ... 3.82 2.85 1.63 6.80 15.97 2.46 1.55 5.04 0.00 1.70
2014-01-27 4.75 3.96 2.74 3.08 2.28 9.84 6.72 3.82 2.78 5.60 ... 3.68 2.83 1.63 6.72 15.63 2.45 1.54 5.07 0.00 1.73
2014-01-28 4.77 4.06 2.75 3.07 2.29 9.83 6.78 3.83 2.79 5.66 ... 3.68 2.80 1.64 6.74 15.71 2.47 1.55 5.07 0.00 1.72
2014-01-29 4.82 4.12 2.76 3.06 2.28 9.87 6.88 3.78 2.82 5.62 ... 3.60 2.84 1.66 6.74 15.12 2.49 1.57 5.08 0.00 1.72
2014-01-30 4.78 4.23 2.78 3.04 2.27 9.86 6.76 3.66 2.79 5.61 ... 3.47 2.82 1.65 6.74 15.05 2.49 1.59 5.04 0.00 1.70
2014-02-07 4.73 4.14 2.76 2.99 2.24 9.66 6.68 3.58 2.79 5.28 ... 3.39 2.81 1.64 6.66 15.00 2.46 1.56 5.02 0.00 1.67
2014-02-10 4.79 4.19 2.78 3.05 2.27 9.85 6.79 3.76 2.83 5.69 ... 3.51 2.85 1.65 6.71 14.68 2.48 1.57 5.32 0.00 1.72
2014-02-11 4.84 4.24 2.80 3.07 2.30 10.04 6.77 3.77 2.83 6.06 ... 3.72 2.89 1.67 6.74 15.80 2.48 1.58 5.49 0.00 1.75
2014-02-12 4.99 4.46 2.82 3.09 2.32 10.18 6.92 3.83 2.86 5.98 ... 3.72 2.93 1.72 6.76 17.05 2.53 1.61 5.44 0.00 1.76
2014-02-13 4.97 4.50 2.82 3.09 2.32 10.08 6.87 3.71 2.86 5.97 ... 3.63 2.92 1.69 6.76 16.91 2.53 1.61 5.29 0.00 1.77
2014-02-14 5.04 4.67 2.81 3.08 2.33 10.12 6.89 3.66 2.86 5.99 ... 3.62 2.92 1.71 6.74 16.95 2.54 1.61 5.29 0.00 1.76
2014-02-17 5.02 4.57 2.83 3.10 2.34 10.15 6.91 3.60 2.87 6.11 ... 3.68 2.95 1.70 6.76 17.00 2.55 1.62 5.37 0.00 1.79
2014-02-18 4.85 4.50 2.80 3.10 2.28 9.76 6.74 3.53 2.88 6.06 ... 3.62 2.90 1.67 6.77 17.13 2.51 1.61 5.43 0.00 1.78
2014-02-19 4.82 4.52 2.80 3.09 2.28 9.62 6.72 3.50 2.88 6.09 ... 3.59 2.89 1.67 6.73 17.18 2.51 1.61 5.38 0.00 1.76
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2018-12-20 10.11 5.73 6.57 5.57 6.90 16.20 25.65 12.21 5.12 24.87 ... 9.01 11.77 3.68 7.38 58.56 6.33 3.52 4.13 75.71 4.01
2018-12-21 10.00 5.67 6.55 5.51 6.73 15.89 25.25 11.53 5.08 25.08 ... 9.01 11.72 3.62 7.35 57.10 6.20 3.52 4.06 74.00 3.91
2018-12-24 9.86 5.66 6.57 5.56 6.75 15.88 24.92 11.61 5.11 25.21 ... 9.07 11.60 3.62 7.35 58.00 6.23 3.55 4.06 74.60 3.92
2018-12-25 9.60 5.58 6.31 5.55 6.75 16.01 24.77 11.67 5.06 25.49 ... 8.81 10.99 3.57 7.20 58.60 6.20 3.56 4.12 74.00 3.76
2018-12-26 9.64 5.63 6.32 5.60 6.80 16.01 24.85 11.62 5.13 25.96 ... 8.94 11.19 3.62 7.24 57.35 6.25 3.60 4.17 74.98 3.84
2018-12-27 9.66 5.63 6.39 5.23 6.60 16.01 24.82 11.75 5.11 25.97 ... 8.81 11.15 3.64 7.15 58.67 6.28 3.63 4.21 74.75 3.75
2018-12-28 9.71 5.65 6.43 4.99 6.57 16.01 24.91 11.70 5.11 26.05 ... 8.84 11.17 3.65 7.14 58.78 6.30 3.61 4.23 74.27 3.74
2019-01-02 9.58 5.61 6.30 4.96 6.51 16.01 24.40 11.52 5.12 24.95 ... 8.70 10.98 3.62 7.12 58.90 6.23 3.53 4.23 71.55 3.65
2019-01-03 9.66 5.62 6.33 4.96 6.58 16.01 24.38 11.61 5.13 24.76 ... 8.76 11.02 3.65 7.13 56.50 6.22 3.52 4.24 71.06 3.67
2019-01-04 9.70 5.63 6.36 5.00 6.55 16.01 24.65 11.75 5.06 24.31 ... 8.89 10.83 3.71 7.17 55.73 6.19 3.52 4.30 70.48 3.67
2019-01-07 9.92 5.74 6.53 5.12 6.81 16.01 25.29 12.06 5.20 24.60 ... 9.22 11.34 3.83 7.28 56.89 6.31 3.55 4.47 71.38 3.83
2019-01-08 9.91 5.73 6.58 5.17 6.86 16.01 25.16 11.72 5.23 24.23 ... 9.19 11.32 3.80 7.30 57.74 6.29 3.52 4.51 71.02 3.85
2019-01-09 9.98 5.76 6.68 5.29 6.89 16.01 25.22 11.92 5.26 24.98 ... 9.16 11.27 3.83 7.32 59.55 6.34 3.54 4.46 71.53 3.83
2019-01-10 9.92 5.71 6.67 5.29 6.92 16.75 25.47 11.94 5.21 24.78 ... 9.01 11.12 3.83 7.34 59.80 6.33 3.51 4.42 71.82 3.80
2019-01-11 9.96 5.74 6.70 5.28 7.09 16.74 25.75 11.90 5.27 24.89 ... 8.95 11.07 3.84 7.34 59.77 6.30 3.52 4.43 71.30 3.80
2019-01-14 10.01 5.72 6.69 5.28 7.15 16.97 26.22 11.65 5.30 24.80 ... 8.98 11.02 3.85 7.30 58.46 6.29 3.49 4.45 71.55 3.80
2019-01-15 10.05 5.74 6.74 5.30 7.17 17.01 26.30 11.23 5.32 24.79 ... 8.98 11.02 3.87 7.31 58.80 6.28 3.50 4.47 71.30 3.80
2019-01-16 10.07 5.76 6.76 5.33 7.09 17.48 26.61 11.50 5.35 25.11 ... 8.98 10.93 3.90 7.33 60.00 6.36 3.50 4.38 71.83 3.81
2019-01-17 10.07 5.75 6.76 5.34 7.10 17.51 26.43 11.72 5.31 25.02 ... 8.91 10.87 3.90 7.30 60.45 6.37 3.51 4.37 72.80 3.78
2019-01-18 10.22 5.76 6.77 5.36 7.12 17.51 26.46 11.75 5.31 25.00 ... 8.92 10.90 3.91 7.28 57.00 6.47 3.53 4.38 73.40 3.81
2019-01-21 10.30 5.81 6.94 5.43 7.11 17.69 27.03 11.85 5.36 25.45 ... 8.93 11.05 3.92 7.36 59.28 6.63 3.56 4.41 75.15 3.91
2019-01-22 10.23 5.78 6.95 5.34 6.96 17.37 26.76 11.95 5.34 25.30 ... 8.86 10.83 3.86 7.30 58.39 6.56 3.55 4.39 75.56 3.85
2019-01-23 10.25 5.79 6.81 5.34 6.98 17.36 26.92 11.87 5.32 25.18 ... 8.69 10.75 3.88 7.26 58.50 6.60 3.55 4.38 75.30 3.83
2019-01-24 10.27 5.80 6.76 5.35 6.91 17.52 27.18 11.73 5.39 24.94 ... 8.38 10.53 3.87 7.22 53.31 6.63 3.56 4.35 75.37 3.83
2019-01-25 10.38 5.83 6.88 5.46 6.95 17.89 27.85 11.93 5.38 25.59 ... 8.43 10.58 3.91 7.26 55.06 6.72 3.59 4.41 76.21 3.83
2019-01-28 10.39 5.85 6.82 5.53 7.08 17.82 28.50 12.15 5.33 25.99 ... 8.65 10.64 3.92 7.26 54.67 6.75 3.61 4.38 73.73 3.83
2019-01-29 10.38 5.85 6.80 5.49 6.94 17.82 28.47 12.14 5.26 25.73 ... 8.61 10.44 3.93 7.21 54.50 6.71 3.60 4.30 72.88 3.62
2019-01-30 10.47 5.90 6.88 5.58 7.09 17.91 28.32 12.48 5.25 25.92 ... 8.60 10.56 3.97 7.24 54.01 6.79 3.62 4.31 74.43 3.73
2019-01-31 10.51 5.91 6.94 5.63 7.05 17.99 28.45 12.64 5.26 26.10 ... 8.48 10.59 3.99 7.25 53.35 6.90 3.63 4.29 73.86 3.78
2019-02-01 10.62 5.90 6.98 5.70 6.99 18.42 28.88 12.56 5.30 26.25 ... 8.50 10.63 4.03 7.28 53.50 6.97 3.65 4.30 76.00 3.83

1243 rows × 50 columns

  • 3.挑两段日级行情,长度为60个交易日

浦发银行(600000.SH)与中国石化(600028.SH)
2017-11-13至2018-02-05

In [26]:
stock = ['600000.SH','600028.SH']
trade = list(closedf.index.strftime('%Y%m%d'))
num = trade.index('20180205')
close = closedf[stock].iloc[num-59:num+1]
opens = opendf[stock].iloc[num-59:num+1]
high = highdf[stock].iloc[num-59:num+1]
low = lowdf[stock].iloc[num-59:num+1]
low
Out[26]:
600000.SH 600028.SH
2017-11-13 12.53 5.49
2017-11-14 12.48 5.49
2017-11-15 12.45 5.37
2017-11-16 12.28 5.33
2017-11-17 12.28 5.33
2017-11-20 12.51 5.38
2017-11-21 12.65 5.35
2017-11-22 12.90 5.42
2017-11-23 12.81 5.54
2017-11-24 12.83 5.56
2017-11-27 12.71 5.52
2017-11-28 12.82 5.44
2017-11-29 12.71 5.44
2017-11-30 12.70 5.42
2017-12-01 12.71 5.40
2017-12-04 12.74 5.45
2017-12-05 12.81 5.41
2017-12-06 12.81 5.50
2017-12-07 12.81 5.45
2017-12-08 12.77 5.46
2017-12-11 12.75 5.44
2017-12-12 12.64 5.47
2017-12-13 12.53 5.44
2017-12-14 12.56 5.39
2017-12-15 12.51 5.34
2017-12-18 12.51 5.35
2017-12-19 12.52 5.36
2017-12-20 12.50 5.34
2017-12-21 12.50 5.37
2017-12-22 12.51 5.39
2017-12-25 12.46 5.43
2017-12-26 12.46 5.45
2017-12-27 12.43 5.52
2017-12-28 12.43 5.50
2017-12-29 12.41 5.54
2018-01-02 12.50 5.60
2018-01-03 12.56 5.78
2018-01-04 12.52 6.00
2018-01-05 12.52 6.29
2018-01-08 12.53 6.42
2018-01-09 12.56 6.37
2018-01-10 12.58 6.54
2018-01-11 12.77 6.45
2018-01-12 12.80 6.43
2018-01-15 12.75 6.54
2018-01-16 12.68 6.53
2018-01-17 12.79 6.40
2018-01-18 12.95 6.33
2018-01-19 13.08 6.38
2018-01-22 12.61 6.31
2018-01-23 12.58 6.32
2018-01-24 12.79 6.46
2018-01-25 13.26 6.66
2018-01-26 13.26 6.58
2018-01-29 13.22 6.80
2018-01-30 12.99 6.62
2018-01-31 12.88 6.46
2018-02-01 12.84 6.41
2018-02-02 12.91 6.51
2018-02-05 12.88 6.78
In [27]:
import numpy as np
import matplotlib.pyplot as plt 
from matplotlib.finance import candlestick2_ohlc
import datetime
for s in stock:
    open1=list(opens[s])
    high1=list(high[s])
    low1=list(low[s])
    close1=list(close[s])
    #画图
    fig,ax = plt.subplots(figsize = (10,6.18),facecolor='white')
    fig.subplots_adjust() 

    ticks = ax.set_xticks([0,60])
    labels = ax.set_xticklabels([list(opens.index.strftime('%Y%m%d'))[0],list(opens.index.strftime('%Y%m%d'))[-1]], fontsize=10) 

    plt.yticks()  
    plt.title("{} K线走势图".format(s),fontsize = 15)  
    plt.ylabel("股价",fontsize = 15)  
    candlestick2_ohlc(ax,open1,high1,low1,close1,width=0.6,colorup='red',colordown='green')
  • 4.计算相似度
In [28]:
s1 = '600000.SH'
s2 = '600028.SH' 
corropen = round(np.corrcoef(opens[s1],opens[s2])[0][1],3)
corrhigh = round(np.corrcoef(high[s1],high[s2])[0][1],3)
corrlow = round(np.corrcoef(low[s1],low[s2])[0][1],3)
corrclose = round(np.corrcoef(close[s1],close[s2])[0][1],3)

print('开盘价的相似度:{}'.format(corropen))
print('最高价的相似度:{}'.format(corrhigh))
print('最低价价的相似度:{}'.format(corrlow))
print('收盘价的相似度:{}'.format(corrclose))

#综合值
T = (corropen+corrhigh+corrlow+corrclose)/4
T = round(T,2)
T
开盘价的相似度:0.534
最高价的相似度:0.582
最低价价的相似度:0.573
收盘价的相似度:0.607
Out[28]:
0.57
In [ ]: