探寻妖股的特征
在现实世界中,当人们对某类事物的探究渐趋深入,往往就会热衷于对其加以分类,深挖它们的共性,进而更为精准地描绘出其独有的特征,股票市场亦不例外。举例来说,那些长期保持稳定增长态势的大型企业所发行的股票,被称作蓝筹股;业绩表现优异,能够定期以现金形式向股东派发红利的股票,则被冠名为红利股;还有一类伴随着时代的发展步伐,拥有极高增长预期的股票,人们赋予了它成长股的名号。
而谈及妖股,这一概念最早可回溯至 2007 年,它堪称股票市场中极为特殊的存在。妖股的走势常常背离市场情绪以及常规的经济学规律,股价波动幅度极为惊人,变化异常剧烈,常常在极短的时间跨度内,上演暴涨暴跌的 “大戏”。正因如此,它能够迅速点燃一些投资者的情绪,使之获得强烈的心理满足,同时也为他们打开了一扇充满无限遐想的大门,让幻想肆意驰骋。
探寻妖股,则需要先探寻市场上究竟有哪些妖股,它们的特征是什么。
获取市场上的妖股
虽然妖股概念出现的早,但时代在发展,股市上的妖股可能已经发展出了了不同的表现特征,为了让数据更加可信,此次只统计近几年的沪深两市各股票的行为表现。
从20180101开始来统计,排除过早的时期市场的形势的变化带来的影响,以最少在连续5天内3次涨停为评判妖股的基准来统计沪深两市中的妖股数据。
# 安装 efinance
!pip install efinance
!pip install openpyxl
import efinance as ef
import numpy as np
import pandas as pd
from tqdm import tqdm
all_stocks = ef.stock.get_realtime_quotes()
tsxv_stocks = ef.stock.get_realtime_quotes(['创业板'])
sci_tech_stocks = ef.stock.get_realtime_quotes(['科创板'])
# 剔除创业板和科创板股票,留下主板股票
stock_codes= np.setdiff1d(np.array(all_stocks["股票代码"]),np.array(tsxv_stocks["股票代码"]))
stock_codes= np.setdiff1d(stock_codes,np.array(sci_tech_stocks["股票代码"]))
demon_stock_arr = []
# 跳过前100天的数据
skip_previous_days = 100
beg = '20180101'
# 遍历所有股票
for stock_code in tqdm(stock_codes):
is_demon_stock = False
demon_stock = {
}
demon_stock["股票代码"]=stock_code
demon_stock["妖期"]=[]
start_limit_up = False
demon_period = {
}
demon_day_count = 0
demon_day_total = 0
day_count = 0
limit_up_count = 0
limit_up_total = 0
start_money = 0
end_money = 0
# 获取股票历史行情数据
df = ef.stock.get_quote_history(stock_code, beg=beg, fqt=0)
# 跳过不到100天的新股数据
if len(df) < skip_previous_days:
continue
# 忽略掉前100天数据
for i in df.index[skip_previous_days:]:
line = df.loc[i]
if start_limit_up:
if line["涨跌幅"]>9.9:
limit_up_count+=1
demon_period["最后涨停日期"]=line["日期"]
end_money = line["收盘"]
demon_day_count = day_count
day_count+=1
if limit_up_count/day_count<0.6:
s