最近学习了一个选股策略,股价出现了向上的跳空缺口再配合业绩的话,往往都会有一波行情。随便找几个图:





如果我们可以抓住这些跳空岂不是起飞。
实现该功能最简单的思路就是:
1、判断股票是否有跳空
2、该股票近期是否有业绩的公布(这点很简单,甚至不需要写代码(别问为什么,问就是懒),你只需要在业绩公布的那段时间关注就好了)
目录:
1、收集今日的所有股票数据
2、通过tushare获取前一交易日的数据
3、筛选跳空高开
1、收集今日的所有股票数据
目标网站:
aHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL2dyaWRsaXN0Lmh0bWwjaHNfYV9ib2FyZA==
这个网站我已经讲了很多次,这里我就不再讲了,不了解的可以查看——股票数据的获取,代码就不用以前的了,我进行了更新。回复“跳空”即可获取本篇所有数据及代码。
2、通过tushare获取前一交易日的数据
如果你第一天跑这个程序就想筛选出哪些股票有跳空,这时候只能通过其他渠道获得前一天的数据,比如:tushare(打钱)
这个的用法可以查看——获取股票历史数据。
3、筛选跳空高开
最后一步就是对比今日最低价与上一交易日最高价的关系。上述的数据都是存储在csv文件中,对比起来那就简单了,依据股票代码进行一个左合并,再进行对比。
左合并demo:
import pandas as pd
today_file = f'./每日数据/{date_list[-1]}-个股.csv'
previous_file = f'./每日数据/{date_list[-2]}-个股.csv'
today_df = pd.read_csv(today_file, encoding='gbk')
previous_day_df = pd.read_csv(previous_file, encoding='gbk')[['股票代码', '最高价']]
df = today_df.merge(previous_day_df, on='股票代码', how='left')
使用pandas的merge方法
参数讲解:
on:为合并依据
how:合并方式
如果有相同的字段名时会分别在字段名后添加_x/y,如下图3-1。

实现思路:
1、将近两个交易日的数据进行合并
2、判断今日最低价是否高于上一交易日最高价
3、还可以与前面获取的涨停数据(布置作业)
3.1、将近两个交易日的数据进行合并
这里需要判断哪两个文件是邻近的两个交易日数据,因此在命名时需要按一个标准的日期格式进行命名(如:2022-08-05),标准日期即可以转为时间戳也可以直接使用sort进行排序。
左合并代码:
def merge_data():
data_file = './每日数据'
date_list = []
for i in os.listdir(data_file):
date_list.append(i[:10])
date_list.sort()
today_file = f'./每日数据/{date_list[-1]}-个股.csv'
previous_file = f'./每日数据/{date_list[-2]}-个股.csv'
today_df = pd.read_csv(today_file, encoding='gbk')
previous_day_df = pd.read_csv(previous_file, encoding='gbk')[['股票代码', '最高价']]
df = today_df.merge(previous_day_df, on='股票代码', how='left')
df.to_csv('./跳空数据/temp.csv', encoding='gbk', index=False)
判断是否出现了跳空:
def judge_jump():
date = get_standard_date(timestamp=time.time())
df = pd.read_csv('./跳空数据/temp.csv', encoding='gbk')
code_list,name, low, high, close, jump, percent, up_down = [], [], [], [], [], [], [], []
for i in df[['股票代码', '最低价', '最高价_y', '收盘价', '股票名称', '涨跌幅']].values:
try:
temp_low, temp_high = eval(i[1]), eval(i[2])
except SyntaxError:
continue
if temp_low > temp_high:
print(i)
jump.append(1)
percent.append(round((temp_low - temp_high) * 100 / temp_high, 2))
code_list.append(i[0])
low.append(temp_low)
high.append(temp_high)
close.append(i[3])
name.append(i[4])
up_down.append(i[5])
data = {'日期': [date] * len(low), '股票代码': code_list, '股票名称': name, '收盘价': close, '今日涨跌幅': up_down,
'最低价': low, '昨日最高价': high, '跳空幅度': percent}
save_data(data=data, file_name=f'./跳空数据/{date}-跳空个股')
os.remove('./跳空数据/temp.csv')
回复“跳空”即可获取全部数据及代码