所谓跌久必涨, 事不过三, 只要不是垃圾股, 持续跌, 就大概率会涨起来
会用到的财经数据接口, 1, tushare, https://waditu.com/, 注册获取自己的token,
2, 现在tushare好多接口都提高权限了, 所以需要第2个,baostock, http://baostock.com/baostock/index.php/%E9%A6%96%E9%A1%B5, 当然还有第3个可选, 聚宽,https://www.joinquant.com/:
首先, 获取交易日, 确保n天里没有非交易日:
WX20220301-141406@2x.png有了交易日, 我们就可以获取这些天全部下跌的股票了,获取n天里每个交易日下跌的股票, 考虑到韭菜资金少, 你可以选择自己能买得起的股票价格区间, 土豪默认全部:
WX20220301-155413@2x.png
取每天的交集, 最后输出dataframe:
WX20220301-155505@2x.png
#找到连跌n天的股票
import tushare as ts
ts.set_token('4880ea14a96548a小星星5410c6230c4de11622188')
pro=ts.pro_api()
import baostock as bs
# tushare通用没有-, baostock通用有-
todaydate = time.strftime('%Y-%m-%d',time.localtime(time.time()))
def get_tradedate(aimdate,n,start_date):
'''
获取交易日
aimdate: 目标交易日 如, 2022-03-01, 默认今天
n: 从今天算获取今天之前的几天, 默认5
start_date: 开始日期, 默认2022-02-01
'''
# aimdate,n,start_date='2022-02-27',5,'2022-02-01'
lg = bs.login()
rs = bs.query_trade_dates(start_date=start_date, end_date=aimdate)
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
result=result[result['is_trading_day']=='1']
trade_list=list(result['calendar_date'])
# 获取目标日前n个交易日
trade_list=trade_list[len(trade_list)-n:]
trade_list=[i.replace('-','') for i in trade_list]
return trade_list
def get_ticket(trade_list,high_p,low_p):
'''
根据交易天数, 获取全部下跌的
'''
l_ts0=get_day_tickets(trade_list[0].replace('-',''),high_p=9999,low_p=0.1)
for trade_date in trade_list[1:]:
trade_date=trade_date.replace('-','')# tushare通用没有-, baostock通用有-
l_ts=get_day_tickets(trade_date,high_p,low_p)
l_ts0=list(set(l_ts0).intersection(l_ts))# 交集
l_ts0=[(i.split('.')[0]) for i in l_ts0]
# 代码和名称对应
#查询当天的全部正常交易的股票
stock_rs = bs.query_all_stock(trade_list[0])
stock_df = stock_rs.get_data()
stock_df['code'] = stock_df['code'].apply(lambda i:i.split('.')[1])
df=pd.DataFrame({'code':l_ts0})
df=df.merge(stock_df,how='left',on='code')
return df
def get_day_tickets(trade_date,high_p,low_p):
'''获取该交易日的下跌股票'''
# trade_date=trade_list[0]
df = pro.daily(trade_date=trade_date)
df=df[df['change']<0]
# 获取1元~100元的
df=df[(df['close']<high_p)&(df['close']>low_p)]
# 除去创业板和科创板, 大部分韭菜只能买沪深主板的
df['is_cyb']=df['ts_code'].apply(lambda i:0 if i.startswith('3') or i.startswith('688') or i.startswith('4') or i.startswith('8') else 1)
df=df[df['is_cyb']==1]
l_ts=list(df['ts_code'])
return l_ts
def run(aimdate=todaydate,high_p=9999,low_p=0.1,n=5):
start_date='2022-02-01'
trade_list=get_tradedate(aimdate,n,start_date)
l_ts0=get_ticket(trade_list,high_p,low_p)
return l_ts0
if __name__=='__main__':
aimdate=None
l_ts0=run()
试试看
WX20220301-162123@2x.png
WX20220301-162232@2x.png
本文纯属娱乐, 如依据此文投资亏损, 后果自负哈哈哈
网友评论