课程简介:介绍股票涨跌停板机制,对股票涨停进行分类,并研究股票涨停后的收益情况,最终采用SVM算法进行“打板”研究。
dt = dataclosedf
dt = dt.sort_values(by='date')
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.style.use('seaborn')
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1, 0.618]) #插入面板
x1_list=list(dt['1日收盘价'])
y=np.array(x1_list)
x=np.array(range(0,len(x1_list)))
axes.scatter(x,y,c='tomato')
axes.set_xlabel('time',fontsize=15)
axes.set_ylabel('down_up',fontsize=15)
axes.set_title(' one day distribution',fontsize=18)
# #设置X轴
axes.set_xticks([0,100,200,300,400,500])
axes.set_xticklabels([list(dt.index)[0],list(dt.index)[100],list(dt.index)[200],list(dt.index)[300],list(dt.index)[400],list(dt.index)[500]],fontsize=15)
plt.style.use('seaborn')
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1, 0.618]) #插入面板
x1_list=list(dt['2日收盘价'])
y=np.array(x1_list)
x=np.array(range(0,len(x1_list)))
axes.scatter(x,y,c='tomato')
axes.set_xlabel('time',fontsize=15)
axes.set_ylabel('down_up',fontsize=15)
axes.set_title(' two day distribution',fontsize=18)
# #设置X轴
axes.set_xticks([0,100,200,300,400,500])
axes.set_xticklabels([list(dt.index)[0],list(dt.index)[100],list(dt.index)[200],list(dt.index)[300],list(dt.index)[400],list(dt.index)[500]],fontsize=15)
plt.style.use('seaborn')
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1, 0.618]) #插入面板
x1_list=list(dt['3日收盘价'])
y=np.array(x1_list)
x=np.array(range(0,len(x1_list)))
axes.scatter(x,y,c='tomato')
axes.set_xlabel('time',fontsize=15)
axes.set_ylabel('down_up',fontsize=15)
axes.set_title(' three day distribution',fontsize=18)
# #设置X轴
axes.set_xticks([0,100,200,300,400,500])
axes.set_xticklabels([list(dt.index)[0],list(dt.index)[100],list(dt.index)[200],list(dt.index)[300],list(dt.index)[400],list(dt.index)[500]],fontsize=15)
Out[13]:
[<matplotlib.text.Text at 0x7f1b30cd7630>,
<matplotlib.text.Text at 0x7f1b313e20b8>,
<matplotlib.text.Text at 0x7f1b30b9b630>,
<matplotlib.text.Text at 0x7f1b313b9cc0>,
<matplotlib.text.Text at 0x7f1b31aee0f0>,
<matplotlib.text.Text at 0x7f1b30c90b00>]
In [14]:
labeldt = dataclosedf
labeldt['1日收盘价'] = labeldt['1日收盘价'].apply(lambda x:1 if x>0 else -1)
labeldt['2日收盘价'] = labeldt['2日收盘价'].apply(lambda x:1 if x>0 else -1)
labeldt['3日收盘价'] = labeldt['3日收盘价'].apply(lambda x:1 if x>0 else -1)
labeldt = labeldt.sort_values(by='date')
labeldt
Out[14]:
| stock | date | 1日收盘价 | 2日收盘价 | 3日收盘价 | |
|---|---|---|---|---|---|
| 2014-01-03 | 600010.SH | 2014-01-03 | -1 | -1 | -1 |
| 2014-01-16 | 000767.SZ | 2014-01-16 | -1 | -1 | -1 |
| 2014-02-12 | 000971.SZ | 2014-02-12 | -1 | -1 | -1 |
| 2014-02-21 | 000554.SZ | 2014-02-21 | -1 | -1 | -1 |
| 2014-02-28 | 600680.SH | 2014-02-28 | 1 | 1 | 1 |
| 2014-03-10 | 300116.SZ | 2014-03-10 | -1 | -1 | -1 |
| 2014-03-13 | 000923.SZ | 2014-03-13 | -1 | 1 | 1 |
| 2014-03-27 | 000687.SZ | 2014-03-27 | -1 | -1 | -1 |
| 2014-04-03 | 000918.SZ | 2014-04-03 | -1 | -1 | -1 |
| 2014-04-10 | 300278.SZ | 2014-04-10 | 1 | 1 | 1 |
| 2014-04-30 | 601001.SH | 2014-04-30 | 1 | -1 | -1 |
| 2014-05-21 | 002660.SZ | 2014-05-21 | 1 | 1 | 1 |
| 2014-06-04 | 600601.SH | 2014-06-04 | -1 | -1 | -1 |
| 2014-06-05 | 600074.SH | 2014-06-05 | -1 | -1 | -1 |
| 2014-06-06 | 002535.SZ | 2014-06-06 | 1 | 1 | 1 |
| 2014-06-16 | 300198.SZ | 2014-06-16 | -1 | -1 | -1 |
| 2014-06-30 | 002093.SZ | 2014-06-30 | -1 | -1 | -1 |
| 2014-07-02 | 300288.SZ | 2014-07-02 | 1 | 1 | 1 |
| 2014-07-04 | 002070.SZ | 2014-07-04 | -1 | -1 | -1 |
| 2014-07-07 | 600568.SH | 2014-07-07 | -1 | 1 | 1 |
| 2014-07-08 | 600435.SH | 2014-07-08 | 1 | 1 | 1 |
| 2014-07-11 | 002629.SZ | 2014-07-11 | 1 | -1 | -1 |
| 2014-07-16 | 000868.SZ | 2014-07-16 | -1 | -1 | -1 |
| 2014-07-25 | 600319.SH | 2014-07-25 | -1 | 1 | 1 |
| 2014-07-28 | 600157.SH | 2014-07-28 | 1 | 1 | 1 |
| 2014-08-07 | 600556.SH | 2014-08-07 | -1 | -1 | -1 |
| 2014-08-11 | 600222.SH | 2014-08-11 | -1 | -1 | -1 |
| 2014-08-14 | 300208.SZ | 2014-08-14 | -1 | 1 | 1 |
| 2014-08-18 | 002125.SZ | 2014-08-18 | 1 | -1 | 1 |
| 2014-08-21 | 000922.SZ | 2014-08-21 | 1 | 1 | 1 |
| ... | ... | ... | ... | ... | ... |
| 2018-12-19 | 002845.SZ | 2018-12-19 | 1 | -1 | 1 |
| 2018-12-25 | 000531.SZ | 2018-12-25 | -1 | -1 | -1 |
| 2018-12-26 | 300687.SZ | 2018-12-26 | -1 | -1 | -1 |
| 2018-12-27 | 300407.SZ | 2018-12-27 | -1 | -1 | -1 |
| 2018-12-28 | 601619.SH | 2018-12-28 | -1 | -1 | -1 |
| 2019-01-04 | 300125.SZ | 2019-01-04 | 1 | 1 | 1 |
| 2019-01-07 | 300588.SZ | 2019-01-07 | -1 | -1 | -1 |
| 2019-01-08 | 600677.SH | 2019-01-08 | -1 | -1 | -1 |
| 2019-01-09 | 600452.SH | 2019-01-09 | 1 | 1 | 1 |
| 2019-01-10 | 300076.SZ | 2019-01-10 | -1 | -1 | -1 |
| 2019-01-11 | 002941.SZ | 2019-01-11 | -1 | -1 | -1 |
| 2019-01-14 | 603220.SH | 2019-01-14 | -1 | -1 | 1 |
| 2019-01-16 | 600446.SH | 2019-01-16 | -1 | -1 | -1 |
| 2019-01-18 | 600470.SH | 2019-01-18 | 1 | 1 | 1 |
| 2019-01-21 | 300693.SZ | 2019-01-21 | -1 | 1 | 1 |
| 2019-01-22 | 300503.SZ | 2019-01-22 | -1 | -1 | -1 |
| 2019-01-24 | 002170.SZ | 2019-01-24 | -1 | -1 | -1 |
| 2019-01-25 | 600721.SH | 2019-01-25 | 1 | -1 | -1 |
| 2019-01-28 | 000637.SZ | 2019-01-28 | -1 | -1 | -1 |
| 2019-01-31 | 300250.SZ | 2019-01-31 | 1 | 1 | 1 |
| 2019-02-01 | 002011.SZ | 2019-02-01 | -1 | -1 | -1 |
| 2019-02-11 | 600532.SH | 2019-02-11 | -1 | -1 | -1 |
| 2019-02-12 | 600318.SH | 2019-02-12 | 1 | -1 | -1 |
| 2019-02-13 | 300097.SZ | 2019-02-13 | 1 | 1 | 1 |
| 2019-02-14 | 300256.SZ | 2019-02-14 | -1 | 1 | 1 |
| 2019-02-18 | 002099.SZ | 2019-02-18 | 1 | 1 | -1 |
| 2019-02-19 | 300468.SZ | 2019-02-19 | -1 | -1 | -1 |
| 2019-02-20 | 600393.SH | 2019-02-20 | -1 | -1 | 1 |
| 2019-02-21 | 002565.SZ | 2019-02-21 | 1 | 1 | -1 |
| 2019-02-22 | 300063.SZ | 2019-02-22 | 1 | -1 | -1 |
503 rows × 5 columns
In [15]:
tradeday = list(get_trade_days(startdate, '20200202', count=None).strftime('%Y-%m-%d'))
timelist = []
trlist= []
lplist =[]
q_trlist = []
for d in tradeday:
time = 0
tr = 0
lp = 0
q_tr = 0
if d in list(labeldt['date']):
stock = labeldt['stock'][d]
day = tradeday[tradeday.index(d)+1]
stockdata = get_price(stock,None,day,'1m',['close','high','low','open','turnover_rate'],True,'pre',bar_count=241,is_panel=0)
pc = stockdata.iloc[0].close
highlimit = round(pc*1.1,2)
stockdata = stockdata.iloc[-240:]
for m in list(range(0,240)):
rc = stockdata.iloc[m].close
h = stockdata.iloc[(m+1)].high
if rc == highlimit:
q_tr +=stockdata.iloc[m].turnover_rate
if rc<highlimit:
time += 1
tr +=stockdata.iloc[m].turnover_rate
lp = min(stockdata.iloc[m].low/highlimit-1,lp)
if rc<highlimit and h == highlimit:
break
if time>0:
timelist.append(time)
trlist.append(round(tr,2))
lplist.append(round(lp*100,2))
q_trlist.append(round(q_tr,2))
timelist
Out[15]:
[111,
2,
209,
1,
1,
1,
1,
25,
1,
2,
1,
2,
1,
1,
3,
1,
5,
228,
19,
11,
4,
60,
1,
1,
1,
6,
95,
3,
1,
211,
1,
6,
2,
1,
6,
5,
1,
91,
135,
2,
1,
1,
236,
149,
52,
6,
3,
2,
2,
1,
6,
1,
1,
1,
4,
38,
1,
6,
1,
14,
180,
1,
1,
1,
1,
1,
2,
1,
1,
172,
1,
142,
43,
26,
1,
1,
4,
1,
5,
30,
3,
5,
5,
5,
4,
2,
5,
5,
20,
1,
102,
6,
166,
1,
1,
24,
1,
1,
136,
26,
3,
2,
4,
1,
3,
1,
2,
25,
5,
2,
83,
1,
5,
1,
1,
1,
1,
1,
8,
4,
19,
2,
1,
7,
3,
25,
1,
2,
76,
8,
2,
28,
1,
1,
2,
1,
1,
1,
1,
3,
1,
1,
1,
1,
1,
1,
2,
2,
1,
24,
2,
1,
1,
1,
3,
4,
60,
2,
1,
1,
1,
1,
2,
3,
1,
228,
5,
27,
179,
1,
1,
1,
1,
1,
1,
1,
1,
82,
1,
1,
1,
2,
5,
2,
1,
148,
4,
1,
1,
1,
1,
2,
29,
2,
9,
3,
1,
2,
3,
11,
1,
1,
1,
1,
1,
2,
1,
2,
1,
1,
2,
2,
171,
1,
157,
1,
2,
4,
3,
1,
2,
2,
120,
1,
30,
3,
1,
1,
1,
1,
1,
1,
106,
1,
1,
26,
1,
127,
5,
1,
2,
4,
1,
1,
2,
1,
1,
2,
1,
201,
7,
88,
1,
1,
1,
53,
3,
1,
2,
1,
1,
1,
2,
1,
5,
1,
9,
8,
28,
1,
156,
1,
43,
5,
24,
16,
2,
1,
5,
1,
10,
1,
1,
33,
203,
2,
1,
7,
31,
2,
229,
1,
1,
1,
1,
118,
45,
41,
2,
2,
2,
1,
77,
2,
120,
2,
45,
58,
3,
3,
22,
1,
1,
1,
4,
1,
6,
1,
1,
140,
6,
40,
1,
43,
10,
1,
1,
10,
1,
1,
1,
6,
181,
5,
19,
1,
1,
1,
34,
3,
2,
1,
6,
1,
1,
1,
10,
1,
2,
1,
1,
1,
10,
1,
1,
114,
1,
1,
1,
1,
12,
189,
1,
1,
7,
1,
11,
1,
35,
1,
12,
1,
2,
1,
17,
1,
3,
42,
1,
1,
3,
31,
1,
1,
1,
53,
3,
1,
1,
1,
13,
1,
1,
75,
15,
1,
21,
3,
1,
3,
13,
1,
16,
2,
10,
1,
1,
1,
1,
1,
2,
9,
1,
2,
3,
1,
1,
3,
125,
1,
6,
40,
1,
47,
1,
2,
1,
5,
1,
1,
2,
26,
1,
1,
5,
1,
1,
1,
3,
93,
2,
5,
2,
1,
108,
23,
1,
4,
1,
3,
2,
1,
1,
28,
1,
35,
104,
1,
2,
1,
5,
27,
176,
1,
11,
1,
1,
58,
1,
1,
42,
84,
5,
2,
1,
7,
26,
11,
6,
22,
1,
27,
9,
3,
2,
1,
1,
1,
1,
1,
175,
1,
15,
1,
1,
1,
7,
108,
1,
88,
149,
10,
14]
In [16]:
labeldt['time'] = timelist
labeldt['Change'] = trlist
labeldt['drop range'] = lplist
labeldt['limit Change'] = q_trlist
labeldt
Out[16]:
| stock | date | 1日收盘价 | 2日收盘价 | 3日收盘价 | time | Change | drop range | limit Change | |
|---|---|---|---|---|---|---|---|---|---|
| 2014-01-03 | 600010.SH | 2014-01-03 | -1 | -1 | -1 | 111 | 4.66 | -3.65 | 0.00 |
| 2014-01-16 | 000767.SZ | 2014-01-16 | -1 | -1 | -1 | 2 | 0.23 | -2.27 | 0.00 |
| 2014-02-12 | 000971.SZ | 2014-02-12 | -1 | -1 | -1 | 209 | 10.74 | -7.14 | 0.00 |
| 2014-02-21 | 000554.SZ | 2014-02-21 | -1 | -1 | -1 | 1 | 3.99 | -1.19 | 9.58 |
| 2014-02-28 | 600680.SH | 2014-02-28 | 1 | 1 | 1 | 1 | 0.79 | -0.60 | 1.95 |
| 2014-03-10 | 300116.SZ | 2014-03-10 | -1 | -1 | -1 | 1 | 1.16 | -1.14 | 15.01 |
| 2014-03-13 | 000923.SZ | 2014-03-13 | -1 | 1 | 1 | 1 | 1.42 | -1.99 | 2.48 |
| 2014-03-27 | 000687.SZ | 2014-03-27 | -1 | -1 | -1 | 25 | 8.88 | -7.78 | 1.11 |
| 2014-04-03 | 000918.SZ | 2014-04-03 | -1 | -1 | -1 | 1 | 0.68 | -4.82 | 0.43 |
| 2014-04-10 | 300278.SZ | 2014-04-10 | 1 | 1 | 1 | 2 | 4.56 | -2.59 | 3.06 |
| 2014-04-30 | 601001.SH | 2014-04-30 | 1 | -1 | -1 | 1 | 0.17 | -0.81 | 0.64 |
| 2014-05-21 | 002660.SZ | 2014-05-21 | 1 | 1 | 1 | 2 | 2.72 | -1.87 | 0.88 |
| 2014-06-04 | 600601.SH | 2014-06-04 | -1 | -1 | -1 | 1 | 1.00 | -2.28 | 0.00 |
| 2014-06-05 | 600074.SH | 2014-06-05 | -1 | -1 | -1 | 1 | 1.00 | -1.17 | 2.63 |
| 2014-06-06 | 002535.SZ | 2014-06-06 | 1 | 1 | 1 | 3 | 2.15 | -2.86 | 1.05 |
| 2014-06-16 | 300198.SZ | 2014-06-16 | -1 | -1 | -1 | 1 | 1.01 | -3.84 | 1.28 |
| 2014-06-30 | 002093.SZ | 2014-06-30 | -1 | -1 | -1 | 5 | 3.30 | -3.93 | 0.00 |
| 2014-07-02 | 300288.SZ | 2014-07-02 | 1 | 1 | 1 | 228 | 20.97 | -4.61 | 4.82 |
| 2014-07-04 | 002070.SZ | 2014-07-04 | -1 | -1 | -1 | 19 | 7.00 | -8.27 | 0.60 |
| 2014-07-07 | 600568.SH | 2014-07-07 | -1 | 1 | 1 | 11 | 3.71 | -5.23 | 0.00 |
| 2014-07-08 | 600435.SH | 2014-07-08 | 1 | 1 | 1 | 4 | 1.20 | -2.31 | 4.53 |
| 2014-07-11 | 002629.SZ | 2014-07-11 | 1 | -1 | -1 | 60 | 14.15 | -5.76 | 3.86 |
| 2014-07-16 | 000868.SZ | 2014-07-16 | -1 | -1 | -1 | 1 | 0.69 | -2.19 | 5.31 |
| 2014-07-25 | 600319.SH | 2014-07-25 | -1 | 1 | 1 | 1 | 1.57 | -1.83 | 3.54 |
| 2014-07-28 | 600157.SH | 2014-07-28 | 1 | 1 | 1 | 1 | 1.48 | -2.11 | 4.34 |
| 2014-08-07 | 600556.SH | 2014-08-07 | -1 | -1 | -1 | 6 | 4.43 | -5.58 | 0.00 |
| 2014-08-11 | 600222.SH | 2014-08-11 | -1 | -1 | -1 | 95 | 4.91 | -5.48 | 0.00 |
| 2014-08-14 | 300208.SZ | 2014-08-14 | -1 | 1 | 1 | 3 | 2.98 | -2.43 | 3.87 |
| 2014-08-18 | 002125.SZ | 2014-08-18 | 1 | -1 | 1 | 1 | 0.73 | -1.55 | 5.67 |
| 2014-08-21 | 000922.SZ | 2014-08-21 | 1 | 1 | 1 | 211 | 20.19 | -12.07 | 0.00 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2018-12-19 | 002845.SZ | 2018-12-19 | 1 | -1 | 1 | 2 | 1.35 | -0.82 | 5.63 |
| 2018-12-25 | 000531.SZ | 2018-12-25 | -1 | -1 | -1 | 1 | 0.26 | -1.28 | 0.00 |
| 2018-12-26 | 300687.SZ | 2018-12-26 | -1 | -1 | -1 | 7 | 6.95 | -4.35 | 2.43 |
| 2018-12-27 | 300407.SZ | 2018-12-27 | -1 | -1 | -1 | 26 | 2.90 | -4.58 | 3.67 |
| 2018-12-28 | 601619.SH | 2018-12-28 | -1 | -1 | -1 | 11 | 1.55 | -2.54 | 3.17 |
| 2019-01-04 | 300125.SZ | 2019-01-04 | 1 | 1 | 1 | 6 | 1.15 | -2.67 | 0.20 |
| 2019-01-07 | 300588.SZ | 2019-01-07 | -1 | -1 | -1 | 22 | 7.75 | -4.16 | 3.56 |
| 2019-01-08 | 600677.SH | 2019-01-08 | -1 | -1 | -1 | 1 | 3.41 | -1.64 | 0.00 |
| 2019-01-09 | 600452.SH | 2019-01-09 | 1 | 1 | 1 | 27 | 0.57 | -3.31 | 0.00 |
| 2019-01-10 | 300076.SZ | 2019-01-10 | -1 | -1 | -1 | 9 | 5.39 | -6.87 | 0.00 |
| 2019-01-11 | 002941.SZ | 2019-01-11 | -1 | -1 | -1 | 3 | 5.64 | -3.13 | 0.00 |
| 2019-01-14 | 603220.SH | 2019-01-14 | -1 | -1 | 1 | 2 | 9.77 | -3.34 | 1.07 |
| 2019-01-16 | 600446.SH | 2019-01-16 | -1 | -1 | -1 | 1 | 0.66 | -0.58 | 1.80 |
| 2019-01-18 | 600470.SH | 2019-01-18 | 1 | 1 | 1 | 1 | 0.68 | -0.45 | 2.56 |
| 2019-01-21 | 300693.SZ | 2019-01-21 | -1 | 1 | 1 | 1 | 3.01 | -1.63 | 3.94 |
| 2019-01-22 | 300503.SZ | 2019-01-22 | -1 | -1 | -1 | 1 | 1.47 | -1.62 | 1.12 |
| 2019-01-24 | 002170.SZ | 2019-01-24 | -1 | -1 | -1 | 1 | 2.70 | -1.82 | 0.00 |
| 2019-01-25 | 600721.SH | 2019-01-25 | 1 | -1 | -1 | 175 | 3.81 | -4.69 | 0.48 |
| 2019-01-28 | 000637.SZ | 2019-01-28 | -1 | -1 | -1 | 1 | 1.05 | -2.73 | 6.09 |
| 2019-01-31 | 300250.SZ | 2019-01-31 | 1 | 1 | 1 | 15 | 1.20 | -1.48 | 4.80 |
| 2019-02-01 | 002011.SZ | 2019-02-01 | -1 | -1 | -1 | 1 | 1.27 | -3.88 | 1.30 |
| 2019-02-11 | 600532.SH | 2019-02-11 | -1 | -1 | -1 | 1 | 0.60 | -2.15 | 1.84 |
| 2019-02-12 | 600318.SH | 2019-02-12 | 1 | -1 | -1 | 1 | 0.47 | -0.70 | 0.47 |
| 2019-02-13 | 300097.SZ | 2019-02-13 | 1 | 1 | 1 | 7 | 4.94 | -3.57 | 1.52 |
| 2019-02-14 | 300256.SZ | 2019-02-14 | -1 | 1 | 1 | 108 | 11.96 | -8.09 | 0.50 |
| 2019-02-18 | 002099.SZ | 2019-02-18 | 1 | 1 | -1 | 1 | 0.28 | -0.18 | 0.43 |
| 2019-02-19 | 300468.SZ | 2019-02-19 | -1 | -1 | -1 | 88 | 3.14 | -6.16 | 1.44 |
| 2019-02-20 | 600393.SH | 2019-02-20 | -1 | -1 | 1 | 149 | 16.27 | -8.01 | 0.00 |
| 2019-02-21 | 002565.SZ | 2019-02-21 | 1 | 1 | -1 | 10 | 4.02 | -7.37 | 0.62 |
| 2019-02-22 | 300063.SZ | 2019-02-22 | 1 | -1 | -1 | 14 | 2.24 | -2.49 | 4.45 |
503 rows × 9 columns
In [17]:
updt = labeldt[labeldt['1日收盘价']==1]
downdt = labeldt[labeldt['1日收盘价']==-1]
label = ['time','Change','drop range','limit Change']
from mpl_toolkits.mplot3d import Axes3D
xsup1 = updt[label[0]]
xsup2 = updt[label[1]]
xsup3 = updt[label[2]]
xsdown1 = downdt[label[0]]
xsdown2 = downdt[label[1]]
xsdown3 = downdt[label[2]]
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(xsup1,xsup2,xsup3,c='tomato')
ax.scatter(xsdown1,xsdown2,xsdown3,c='g')
ax.set_xlabel(label[0],fontsize=12)
ax.set_ylabel(label[1],fontsize=12)
ax.set_zlabel(label[2],fontsize=12)
ax.set_title('one day Data space 3D ',fontsize=20)
plt.show()
for l in label:
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1, 0.618])
x1_list=list(updt[l])
y=np.array(x1_list)
x=np.array(range(0,len(x1_list)))
axes.scatter(x,y,c='tomato')
x1_list=list(downdt[l])
y=np.array(x1_list)
x=np.array(range(0,len(x1_list)))
axes.scatter(x,y,c='g')
axes.set_ylabel('value',fontsize=15)
axes.set_title(l,fontsize=20)
In [55]:
labeldt
label = ['time','Change','drop range','limit Change']
train = labeldt[:300]
test = labeldt[-200:]
X=train[label]
Y=train['1日收盘价']
X_test=test[label]
Y_test=test['1日收盘价']
from sklearn import svm
model = svm.SVC(C=1, kernel='rbf', gamma=0.5, decision_function_shape='ovo')
model.fit(X, Y)
print('训练时,预测成功率 {}'.format(round(np.mean(model.predict(X)==Y),2)))
print('测试时,预测成功率 {}'.format(round(np.mean(model.predict(X_test)==Y_test),2)))
训练时,预测成功率 0.88
测试时,预测成功率 0.55
In [102]:
dataclosedf = datadf#[['stock','date','1日收盘价','2日收盘价','3日收盘价']]
dataclosedf = dataclosedf.sort_values(by='1日收盘价',ascending=False)
tradeday = list(get_trade_days(startdate, '20200202', count=None).strftime('%Y-%m-%d'))
timelist = []
trlist= []
lplist =[]
q_trlist = []
for d in tradeday:
time = 0
tr = 0
lp = 0
q_tr = 0
if d in list(labeldt['date']):
stock = labeldt['stock'][d]
day = tradeday[tradeday.index(d)+1]
stockdata = get_price(stock,None,day,'1m',['close','high','low','open','turnover_rate'],True,'pre',bar_count=241,is_panel=0)
pc = stockdata.iloc[0].close
highlimit = round(pc*1.1,2)
stockdata = stockdata.iloc[-240:]
for m in list(range(0,240)):
rc = stockdata.iloc[m].close
h = stockdata.iloc[(m+1)].high
if rc == highlimit:
q_tr +=stockdata.iloc[m].turnover_rate
if rc<highlimit:
time += 1
tr +=stockdata.iloc[m].turnover_rate
lp = min(stockdata.iloc[m].low/highlimit-1,lp)
if rc<highlimit and h == highlimit:
break
if time>0:
timelist.append(time)
trlist.append(round(tr,2))
lplist.append(round(lp*100,2))
q_trlist.append(round(q_tr,2))
dataclosedf['time'] = timelist
dataclosedf['Change'] = trlist
dataclosedf['drop range'] = lplist
dataclosedf['limit Change'] = q_trlist
dataclosedf
Out[102]:
| stock | date | buyprice | 当日收盘价 | 1日收盘价 | 1日开盘价 | 1日最高价 | 1日最低价 | 2日收盘价 | 2日开盘价 | 2日最高价 | 2日最低价 | 3日收盘价 | 3日开盘价 | 3日最高价 | 3日最低价 | time | Change | drop range | limit Change | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2015-05-19 | 002014.SZ | 2015-05-19 | 9.44 | 9.44 | 0.109110 | 0.109110 | 0.109110 | 0.061441 | 0.229873 | 0.119703 | 0.229873 | 0.112288 | 0.363347 | 0.324153 | 0.363347 | 0.318856 | 111 | 4.66 | -3.65 | 0.00 |
| 2014-07-08 | 600435.SH | 2014-07-08 | 7.47 | 7.47 | 0.103079 | 0.038822 | 0.103079 | 0.024096 | 0.168675 | 0.156627 | 0.214190 | 0.140562 | 0.267738 | 0.164659 | 0.282463 | 0.143240 | 2 | 0.23 | -2.27 | 0.00 |
| 2015-01-12 | 002738.SZ | 2015-01-12 | 13.85 | 13.85 | 0.102527 | 0.010108 | 0.102527 | -0.031047 | 0.215162 | 0.156679 | 0.215162 | 0.133574 | 0.338628 | 0.257762 | 0.338628 | 0.246209 | 209 | 10.74 | -7.14 | 0.00 |
| 2015-05-20 | 000838.SZ | 2015-05-20 | 6.69 | 6.69 | 0.101644 | 0.013453 | 0.101644 | 0.001495 | 0.038864 | 0.213752 | 0.213752 | 0.038864 | 0.143498 | 0.005979 | 0.143498 | -0.008969 | 1 | 3.99 | -1.19 | 9.58 |
| 2015-06-04 | 300309.SZ | 2015-06-04 | 10.68 | 10.68 | 0.101124 | 0.088015 | 0.101124 | 0.061798 | -0.008427 | 0.113296 | 0.113296 | -0.010300 | 0.056180 | -0.028090 | 0.056180 | -0.029026 | 1 | 0.79 | -0.60 | 1.95 |
| 2015-07-30 | 300368.SZ | 2015-07-30 | 9.81 | 9.81 | 0.100917 | -0.002039 | 0.100917 | -0.040775 | 0.211009 | 0.113150 | 0.211009 | 0.076453 | 0.332314 | 0.332314 | 0.332314 | 0.298675 | 1 | 1.16 | -1.14 | 15.01 |
| 2018-08-08 | 600470.SH | 2018-08-08 | 4.66 | 4.66 | 0.100858 | -0.034335 | 0.100858 | -0.036481 | -0.006438 | 0.072961 | 0.094421 | -0.008584 | -0.062232 | -0.051502 | -0.040773 | -0.081545 | 1 | 1.42 | -1.99 | 2.48 |
| 2014-07-28 | 600157.SH | 2014-07-28 | 2.48 | 2.48 | 0.100806 | -0.004032 | 0.100806 | -0.012097 | 0.213710 | 0.153226 | 0.213710 | 0.137097 | 0.266129 | 0.262097 | 0.338710 | 0.241935 | 25 | 8.88 | -7.78 | 1.11 |
| 2015-04-02 | 002006.SZ | 2015-04-02 | 11.61 | 11.61 | 0.100775 | 0.088717 | 0.100775 | 0.063738 | 0.136090 | 0.193798 | 0.193798 | 0.074074 | 0.090439 | 0.114556 | 0.114556 | 0.055986 | 1 | 0.68 | -4.82 | 0.43 |
| 2014-08-22 | 300356.SZ | 2014-08-22 | 9.03 | 9.03 | 0.100775 | 0.014396 | 0.100775 | 0.014396 | 0.075305 | 0.071982 | 0.087486 | 0.047619 | 0.160576 | 0.107420 | 0.182724 | 0.091916 | 2 | 4.56 | -2.59 | 3.06 |
| 2015-08-04 | 603616.SH | 2015-08-04 | 18.16 | 18.16 | 0.100771 | -0.011013 | 0.100771 | -0.090308 | 0.210903 | 0.210903 | 0.210903 | 0.034692 | 0.332599 | 0.154185 | 0.332599 | 0.126652 | 1 | 0.17 | -0.81 | 0.64 |
| 2018-08-07 | 300392.SZ | 2018-08-07 | 6.75 | 6.75 | 0.100741 | 0.044444 | 0.100741 | 0.038519 | 0.210370 | 0.210370 | 0.210370 | 0.133333 | 0.331852 | 0.331852 | 0.331852 | 0.331852 | 2 | 2.72 | -1.87 | 0.88 |
| 2017-03-15 | 002850.SZ | 2017-03-15 | 84.81 | 84.81 | 0.100696 | 0.047046 | 0.100696 | 0.031364 | 0.054946 | 0.101167 | 0.141729 | 0.047046 | 0.039382 | 0.031246 | 0.053060 | 0.000000 | 1 | 1.00 | -2.28 | 0.00 |
| 2015-07-17 | 002392.SZ | 2015-07-17 | 6.56 | 6.56 | 0.100610 | 0.092988 | 0.100610 | 0.060976 | 0.211890 | 0.144817 | 0.211890 | 0.103659 | 0.321646 | 0.289634 | 0.333841 | 0.239329 | 1 | 1.00 | -1.17 | 2.63 |
| 2018-03-16 | 002264.SZ | 2018-03-16 | 8.95 | 8.95 | 0.100559 | 0.049162 | 0.100559 | 0.039106 | 0.128492 | 0.098324 | 0.173184 | 0.061453 | 0.241341 | 0.092737 | 0.241341 | 0.092737 | 3 | 2.15 | -2.86 | 1.05 |
| 2015-03-16 | 600207.SH | 2015-03-16 | 7.16 | 7.16 | 0.100559 | 0.005587 | 0.100559 | -0.005587 | 0.150838 | 0.166201 | 0.210894 | 0.117318 | 0.113128 | 0.157821 | 0.157821 | 0.079609 | 1 | 1.01 | -3.84 | 1.28 |
| 2014-09-12 | 300161.SZ | 2014-09-12 | 14.82 | 14.82 | 0.100540 | 0.008772 | 0.100540 | 0.000000 | 0.089744 | 0.102564 | 0.176113 | 0.089069 | 0.057355 | 0.075574 | 0.075574 | 0.033738 | 5 | 3.30 | -3.93 | 0.00 |
| 2016-11-01 | 300044.SZ | 2016-11-01 | 9.55 | 9.55 | 0.100524 | 0.021990 | 0.100524 | 0.008377 | 0.067016 | 0.158115 | 0.211518 | 0.056545 | 0.086911 | 0.071204 | 0.106806 | 0.053403 | 228 | 20.97 | -4.61 | 4.82 |
| 2018-11-21 | 002337.SZ | 2018-11-21 | 4.28 | 4.28 | 0.100467 | 0.100467 | 0.100467 | 0.079439 | 0.210280 | 0.168224 | 0.210280 | 0.126168 | 0.088785 | 0.331776 | 0.331776 | 0.088785 | 19 | 7.00 | -8.27 | 0.60 |
| 2018-05-21 | 002828.SZ | 2018-05-21 | 17.92 | 17.92 | 0.100446 | 0.046875 | 0.100446 | 0.019531 | 0.210937 | 0.210937 | 0.210937 | 0.155692 | NaN | NaN | NaN | NaN | 11 | 3.71 | -5.23 | 0.00 |
| 2015-05-04 | 600744.SH | 2015-05-04 | 9.06 | 9.06 | 0.100442 | 0.100442 | 0.100442 | 0.004415 | 0.121413 | 0.034216 | 0.203091 | 0.024283 | 0.008830 | 0.088300 | 0.113687 | 0.008830 | 4 | 1.20 | -2.31 | 4.53 |
| 2015-08-26 | 000628.SZ | 2015-08-26 | 11.45 | 11.45 | 0.100437 | 0.082969 | 0.100437 | 0.061135 | 0.210480 | 0.210480 | 0.210480 | 0.210480 | 0.089083 | 0.222707 | 0.222707 | 0.089083 | 60 | 14.15 | -5.76 | 3.86 |
| 2014-09-19 | 000852.SZ | 2014-09-19 | 16.13 | 16.13 | 0.100434 | 0.003100 | 0.100434 | 0.000620 | 0.115933 | 0.075635 | 0.141971 | 0.058896 | 0.115313 | 0.112213 | 0.135152 | 0.088655 | 1 | 0.69 | -2.19 | 5.31 |
| 2017-08-29 | 603042.SH | 2017-08-29 | 33.56 | 33.56 | 0.100417 | -0.021454 | 0.100417 | -0.027414 | 0.076281 | 0.031585 | 0.103397 | 0.008641 | 0.030691 | 0.056317 | 0.093564 | 0.027712 | 1 | 1.57 | -1.83 | 3.54 |
| 2015-02-04 | 000875.SZ | 2015-02-04 | 5.28 | 5.28 | 0.100379 | 0.041667 | 0.100379 | 0.009470 | 0.090909 | 0.115530 | 0.181818 | 0.062500 | 0.009470 | 0.045455 | 0.077652 | -0.017045 | 1 | 1.48 | -2.11 | 4.34 |
| 2017-03-13 | 601212.SH | 2017-03-13 | 10.66 | 10.66 | 0.100375 | -0.016886 | 0.100375 | -0.031895 | 0.211069 | 0.158537 | 0.211069 | 0.137899 | 0.332083 | 0.280488 | 0.332083 | 0.267355 | 6 | 4.43 | -5.58 | 0.00 |
| 2018-08-09 | 300392.SZ | 2018-08-09 | 8.17 | 8.17 | 0.100367 | 0.100367 | 0.100367 | 0.100367 | 0.210526 | 0.188494 | 0.210526 | 0.144431 | 0.097919 | 0.200734 | 0.200734 | 0.089351 | 95 | 4.91 | -5.48 | 0.00 |
| 2015-12-02 | 000668.SZ | 2015-12-02 | 26.61 | 26.61 | 0.100338 | 0.050733 | 0.100338 | 0.033070 | 0.066892 | 0.104848 | 0.162345 | 0.062383 | 0.071778 | 0.069523 | 0.086809 | 0.044344 | 3 | 2.98 | -2.43 | 3.87 |
| 2017-08-22 | 300678.SZ | 2017-08-22 | 29.01 | 29.01 | 0.100310 | 0.061358 | 0.100310 | 0.042744 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1 | 0.73 | -1.55 | 5.67 |
| 2014-02-28 | 600680.SH | 2014-02-28 | 13.26 | 13.26 | 0.100302 | 0.045249 | 0.100302 | 0.045249 | 0.210407 | 0.118401 | 0.210407 | 0.105581 | 0.331825 | 0.272247 | 0.331825 | 0.272247 | 211 | 20.19 | -12.07 | 0.00 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2016-02-25 | 300280.SZ | 2016-02-25 | 31.52 | 29.89 | -0.122462 | -0.084074 | -0.054569 | -0.146574 | -0.210343 | -0.147525 | -0.147525 | -0.210343 | -0.216371 | -0.216688 | -0.191942 | -0.264911 | 2 | 1.35 | -0.82 | 5.63 |
| 2015-10-23 | 300081.SZ | 2015-10-23 | 16.35 | 15.89 | -0.125994 | -0.078287 | -0.056881 | -0.125994 | -0.099694 | -0.173089 | -0.083792 | -0.176758 | -0.185321 | -0.124771 | -0.116820 | -0.188991 | 1 | 0.26 | -1.28 | 0.00 |
| 2018-06-14 | 002096.SZ | 2018-06-14 | 8.44 | 8.16 | -0.130332 | -0.092417 | -0.092417 | -0.130332 | -0.218009 | -0.210900 | -0.187204 | -0.218009 | -0.172986 | -0.254739 | -0.169431 | -0.255924 | 7 | 6.95 | -4.35 | 2.43 |
| 2018-06-15 | 002423.SZ | 2018-06-15 | 14.62 | 14.08 | -0.133379 | -0.110807 | -0.110807 | -0.133379 | -0.112859 | -0.220246 | -0.056772 | -0.220246 | -0.178523 | -0.158687 | -0.083447 | -0.189466 | 26 | 2.90 | -4.58 | 3.67 |
| 2016-12-19 | 300268.SZ | 2016-12-19 | 50.41 | 48.50 | -0.134100 | -0.067249 | -0.048006 | -0.134100 | -0.218806 | -0.176552 | -0.167824 | -0.220591 | -0.218409 | -0.226146 | -0.199564 | -0.238643 | 11 | 1.55 | -2.54 | 3.17 |
| 2018-08-02 | 002400.SZ | 2018-08-02 | 3.62 | 3.46 | -0.140884 | -0.093923 | -0.088398 | -0.140884 | -0.174033 | -0.157459 | -0.151934 | -0.182320 | -0.140884 | -0.149171 | -0.135359 | -0.168508 | 6 | 1.15 | -2.67 | 0.20 |
| 2017-04-14 | 000616.SZ | 2017-04-14 | 6.12 | 5.78 | -0.145425 | -0.101307 | -0.084967 | -0.150327 | -0.145425 | -0.153595 | -0.111111 | -0.156863 | -0.156863 | -0.156863 | -0.140523 | -0.181373 | 22 | 7.75 | -4.16 | 3.56 |
| 2015-05-22 | 300201.SZ | 2015-05-22 | 11.64 | 10.16 | -0.146048 | -0.185567 | -0.088488 | -0.214777 | -0.060137 | -0.158935 | -0.060137 | -0.162371 | -0.066151 | -0.005155 | -0.001718 | -0.095361 | 1 | 3.41 | -1.64 | 0.00 |
| 2015-04-27 | 300188.SZ | 2015-04-27 | 17.96 | 16.97 | -0.150334 | -0.084076 | -0.055122 | -0.150334 | NaN | NaN | NaN | NaN | -0.149220 | -0.116927 | -0.097439 | -0.149777 | 27 | 0.57 | -3.31 | 0.00 |
| 2018-12-06 | 300006.SZ | 2018-12-06 | 4.92 | 4.42 | -0.154472 | -0.097561 | -0.085366 | -0.168699 | -0.203252 | -0.172764 | -0.166667 | -0.203252 | -0.199187 | -0.201220 | -0.191057 | -0.203252 | 9 | 5.39 | -6.87 | 0.00 |
| 2015-03-05 | 300364.SZ | 2015-03-05 | 16.04 | 14.58 | -0.154613 | -0.085411 | -0.026808 | -0.175810 | -0.149002 | -0.158354 | -0.125312 | -0.175810 | -0.143392 | -0.155860 | -0.092893 | -0.163965 | 3 | 5.64 | -3.13 | 0.00 |
| 2018-11-29 | 600936.SH | 2018-11-29 | 5.10 | 4.77 | -0.154902 | -0.109804 | -0.107843 | -0.158824 | -0.117647 | -0.158824 | -0.090196 | -0.162745 | -0.133333 | -0.133333 | -0.129412 | -0.150980 | 2 | 9.77 | -3.34 | 1.07 |
| 2018-04-11 | 300705.SZ | 2018-04-11 | 28.85 | 26.79 | -0.164298 | -0.071404 | -0.049567 | -0.164298 | -0.224263 | -0.198614 | -0.164298 | -0.235355 | -0.236742 | -0.250260 | -0.228076 | -0.253380 | 1 | 0.66 | -0.58 | 1.80 |
| 2018-10-26 | 603999.SH | 2018-10-26 | 5.75 | 5.25 | -0.177391 | -0.142609 | -0.142609 | -0.177391 | -0.160000 | -0.184348 | -0.137391 | -0.205217 | -0.161739 | -0.172174 | -0.149565 | -0.180870 | 1 | 0.68 | -0.45 | 2.56 |
| 2019-01-10 | 300076.SZ | 2019-01-10 | 5.68 | 5.13 | -0.179577 | -0.140845 | -0.125000 | -0.184859 | -0.179577 | -0.158451 | -0.144366 | -0.197183 | -0.170775 | -0.188380 | -0.160211 | -0.198944 | 1 | 3.01 | -1.63 | 3.94 |
| 2014-12-22 | 600169.SH | 2014-12-22 | 8.81 | 7.95 | -0.181612 | -0.113507 | -0.091941 | -0.187287 | -0.205448 | -0.205448 | -0.185017 | -0.225880 | -0.125993 | -0.187287 | -0.125993 | -0.197503 | 1 | 1.47 | -1.62 | 1.12 |
| 2015-05-14 | 300431.SZ | 2015-05-14 | 105.32 | 91.51 | -0.187524 | -0.191132 | -0.137486 | -0.218002 | -0.106248 | -0.165970 | -0.106248 | -0.173092 | -0.016901 | -0.050893 | -0.016901 | -0.106248 | 1 | 2.70 | -1.82 | 0.00 |
| 2018-11-05 | 300748.SZ | 2018-11-05 | 36.32 | 31.29 | -0.217786 | -0.174009 | -0.146476 | -0.223568 | -0.185022 | -0.208700 | -0.177037 | -0.236509 | -0.229075 | -0.215584 | -0.201542 | -0.243667 | 175 | 3.81 | -4.69 | 0.48 |
| 2015-09-14 | 000797.SZ | 2015-09-14 | 7.66 | 6.38 | -0.251958 | -0.223238 | -0.184073 | -0.251958 | -0.199739 | -0.259791 | -0.176240 | -0.283290 | -0.227154 | -0.202350 | -0.154047 | -0.228460 | 1 | 1.05 | -2.73 | 6.09 |
| 2015-07-06 | 002234.SZ | 2015-07-06 | 12.73 | 10.44 | -0.261587 | -0.260801 | -0.231736 | -0.261587 | -0.226237 | -0.335428 | -0.206599 | -0.335428 | NaN | NaN | NaN | NaN | 15 | 1.20 | -1.48 | 4.80 |
| 2018-01-10 | 600652.SH | 2018-01-10 | 8.94 | 8.94 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | -0.083893 | -0.051454 | -0.020134 | -0.090604 | 1 | 1.27 | -3.88 | 1.30 |
| 2017-04-11 | 002774.SZ | 2017-04-11 | 22.72 | 22.72 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | -0.100352 | -0.078785 | -0.034771 | -0.100352 | 1 | 0.60 | -2.15 | 1.84 |
| 2017-07-07 | 002885.SZ | 2017-07-07 | 31.91 | 31.91 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1 | 0.47 | -0.70 | 0.47 |
| 2016-03-03 | 000982.SZ | 2016-03-03 | 8.22 | 8.22 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 7 | 4.94 | -3.57 | 1.52 |
| 2017-11-10 | 002409.SZ | 2017-11-10 | 41.15 | 41.15 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 108 | 11.96 | -8.09 | 0.50 |
| 2015-03-24 | 300310.SZ | 2015-03-24 | 9.98 | 9.98 | NaN | NaN | NaN | NaN | -0.071142 | -0.046092 | -0.039078 | -0.100200 | -0.044088 | -0.090180 | -0.002004 | -0.097194 | 1 | 0.28 | -0.18 | 0.43 |
| 2014-02-12 | 000971.SZ | 2014-02-12 | 3.64 | 3.64 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | -0.027473 | -0.098901 | -0.002747 | -0.098901 | 88 | 3.14 | -6.16 | 1.44 |
| 2016-02-17 | 600234.SH | 2016-02-17 | 22.85 | 22.22 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 149 | 16.27 | -8.01 | 0.00 |
| 2018-05-14 | 002930.SZ | 2018-05-14 | 41.53 | 41.53 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.099928 | 0.059475 | 0.099928 | 0.037804 | 10 | 4.02 | -7.37 | 0.62 |
| 2017-04-12 | 600550.SH | 2017-04-12 | 12.54 | 12.54 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 14 | 2.24 | -2.49 | 4.45 |
503 rows × 20 columns
In [184]:
xdf = dataclosedf.dropna(axis=0)
In [185]:
xdf = xdf.sort_values(by='date')
xlabel = ['time','Change','drop range','limit Change']
ylabel = '3日收盘价'
xdf[ylabel] =xdf[ylabel].apply(lambda x:1 if x>0.02 else -1)
train = xdf[:300]
test = xdf[-200:]
X=train[xlabel]
Y=train[ylabel]
X_test=test[xlabel]
Y_test=test[ylabel]
from sklearn import svm
model = svm.SVC(C=5, kernel='rbf', gamma=0.5)
model.fit(X, Y)
print('训练时,预测成功率 {}'.format(round(np.mean(model.predict(X)==Y),2)))
print('测试时,预测成功率 {}'.format(round(np.mean(model.predict(X_test)==Y_test),2)))
len(list(test[test[ylabel]==1].index)),len(list(test[test[ylabel]==-1].index))
训练时,预测成功率 0.92
测试时,预测成功率 0.6
Out[185]:
(49, 151)
查看以上策略详情请到supermind量化交易官网查看:同花顺Supermind量化交易 运用SVM算法“打板”-- SVM算法应用