课程简介:介绍股票涨跌停板机制,对股票涨停进行分类,并研究股票涨停后的收益情况,最终采用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'