tushare +talib 三指标筛选股票

① 以中小版指数的成分股为股票池
② 交易热度:通过均幅指标值从大到小降序排列选出前33只
③ 整体趋势:使用SMA(5)是否大于SMA(10)删选股票
④ 通过MACD的快线大于慢线且快线低于0删选股票

import tushare as ts
import pandas as pd
import datetime
from dateutil.relativedelta import relativedelta
import talib as tb

today = datetime.datetime.today().strftime('%Y%m%d')    #获取今天的年月日
lastday = datetime.datetime.today() - datetime.timedelta(days=1)  #获取前一天数据
lastday = lastday.strftime('%Y%m%d')
last_year = datetime.datetime.today() - relativedelta(months=12)   #获取前一年的日期
last_year = last_year.strftime('%Y%m%d')   # 转换成STR
Lastweek = datetime.datetime.today() - datetime.timedelta(days=7)   #获取前一周的日期
Lastweek = Lastweek.strftime('%Y%m%d')    # 转换成STR
last_mon = datetime.datetime.today() - relativedelta(months=1)   #获取前一月的日期
last_mon = last_mon.strftime('%Y%m%d')   # 转换成STR
ts.set_token('you token')
pro=ts.pro_api()

df = pro.index_weight(index_code = '399005.SZ', start_date = last_year, end_date = today)

zxb_list = df.con_code.values
print(len(zxb_list))

ATR_Value = []

# 获取ATR的值
for stock in zxb_list:
    df1 = pro.daily(ts_code=stock, start_date=last_mon, end_date= today)
    df1 = df1.set_index('trade_date')   # 将最近的日期放到最后
    df1 = df1.sort_index(ascending = False)   # 将最近的日期放到最后
    ATRs = tb.ATR(df1.high.values,df1.low.values,df1.close.values, timeperiod=14)
    ATR = ATRs[-1]
    ATR_Value.append(ATR)
df['ATR_Value'] = ATR_Value
df2 = df.sort_values(by = 'ATR_Value',ascending = False).head(33)

df2 = df2.reset_index()   
df2 = df2.drop(columns = ['index']) 
df1_list = df2.con_code.values

# 检测5日均线与10日均线的大小关系
label = []
for t in df1_list:
    df3 = pro.daily(ts_code= t , start_date=last_year, end_date= today)
    df3 = df3.set_index('trade_date')
    df3 = df3.sort_index(ascending = True)
    SMA5 = tb.SMA(df3[['close'][0]], timeperiod=5)
    SMA10 = tb.SMA(df3[['close'][0]], timeperiod=10)
    if SMA5[-1] > SMA10[-1]:
        label.append(1)
    else :
        label.append(0)
df2['label'] = label

df4 = df2.loc[df2['label'] == 1]  #只获取标签为1的股票
df4 = df4.reset_index()
df4_list = df4.con_code.values

# 根据MACD指标信号筛选股票
buy_list = []
for s in df4_list:
    df5 = pro.daily(ts_code = s , start_date=last_year, end_date= today)  #获取平安银行一年的行情数据
    df5 = df5.set_index('trade_date')
    df5 = df5.sort_index(ascending = True)
    # 参数设置为12 26 9
    dif, dea, bar = tb.MACD(df5.close.values, fastperiod=12, slowperiod=26, signalperiod=9)
    if dif[-1] < 0 and dif[-1] > dea[-1]:
        buy_list.append(s)
    else:
        Continue

print(buy_list )
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhaojieming1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值