使用tushare的pro版本获取股票数据,包括开盘价、收盘价、最高价、最低价、成交量等数据,以及kdj、macd、boll指标和移动平均线数据。结合kdj、macd、boll指标和移动平均线数据,来筛选合适的股票并导出到excel
时间: 2023-10-20 21:13:13 浏览: 209
以下是使用tushare的pro版本获取股票数据,包括开盘价、收盘价、最高价、最低价、成交量等数据,以及kdj、macd、boll指标和移动平均线数据,并结合这些指标来筛选合适的股票并导出到excel的示例代码:
```python
import pandas as pd
import tushare as ts
# 设置token
ts.set_token('your_token')
# 初始化pro接口
pro = ts.pro_api()
# 获取股票代码列表
stock_codes = pro.stock_basic(list_status='L')['ts_code'].tolist()
# 定义筛选条件
ma_periods = [5, 10, 20, 30] # 移动平均线周期
kdj_periods = [9, 3, 3] # KDJ指标周期
macd_periods = (12, 26, 9) # MACD指标周期
boll_periods = 20 # BOLL指标周期
min_volume = 1000000 # 最小成交量
# 定义筛选函数
def filter_stocks(stock_codes):
selected_stocks = []
for code in stock_codes:
# 获取历史数据
df = pro.daily(ts_code=code, start_date='20200101', end_date='20211231')
df = df.sort_values('trade_date').reset_index(drop=True)
if len(df) < max(ma_periods) + max(kdj_periods[0], kdj_periods[1], 1) + macd_periods[1] + boll_periods:
continue
# 计算指标
df['ma5'] = df['close'].rolling(window=5).mean()
df['ma10'] = df['close'].rolling(window=10).mean()
df['ma20'] = df['close'].rolling(window=20).mean()
df['ma30'] = df['close'].rolling(window=30).mean()
df['K'], df['D'], df['J'] = talib.STOCH(df['high'].values, df['low'].values, df['close'].values, *kdj_periods)
df['DIF'], df['DEA'], df['MACD'] = talib.MACD(df['close'].values, *macd_periods)
df['upper'], df['middle'], df['lower'] = talib.BBANDS(df['close'].values, timeperiod=boll_periods)
# 筛选股票
if df['volume'].iloc[-1] >= min_volume and \
df['close'].iloc[-1] > df[['ma5', 'ma10', 'ma20', 'ma30']].iloc[-1].max() and \
df['J'].iloc[-1] > df['D'].iloc[-1] and \
df['MACD'].iloc[-1] > df['MACD'].iloc[-2] and \
df['close'].iloc[-1] > df['upper'].iloc[-1]:
selected_stocks.append(code)
return selected_stocks
# 筛选股票
selected_stocks = filter_stocks(stock_codes)
# 导出数据到excel
writer = pd.ExcelWriter('selected_stocks.xlsx')
for code in selected_stocks:
df = pro.daily(ts_code=code, start_date='20200101', end_date='20211231')
df.to_excel(writer, sheet_name=code, index=False)
writer.save()
```
该示例代码中,首先使用tushare的pro接口获取所有上市股票的代码列表。然后定义了一些筛选条件,包括移动平均线周期、KDJ指标周期、MACD指标周期、BOLL指标周期和最小成交量。接下来定义了一个筛选函数`filter_stocks`,该函数接受股票代码列表作为参数,循环遍历每个股票,获取其历史数据,并计算各种指标。在计算指标的过程中,使用了talib库来计算KDJ、MACD和BOLL指标。
最后,在筛选股票的过程中,使用了一些简单的条件来判断股票是否适合买入,包括最近一天的成交量是否大于最小成交量、收盘价是否高于所有移动平均线、J指标是否大于D指标、MACD指标是否呈上升趋势、收盘价是否高于BOLL指标的上轨。如果股票符合以上条件,则将其添加到选中股票列表中。
最后,将选中股票的历史数据导出到excel文件中,每个股票对应一个sheet。
阅读全文