请用python写一个程序,查询A股以周为单位的周量比,并筛选出上周周量比大于2的股票,添加进度显示,在当前目录下创建一个名为“周量比选股”的文件夹并将最终结果保存为csv格式的文件存入,添加进度保存机制防止意外停止丢失数据,添加窗口显示
时间: 2023-03-05 18:55:30 浏览: 189
好的,以下是一个简单的Python程序,用于查询A股以周为单位的周量比,并筛选出上周周量比大于2的股票,添加进度显示,保存结果至csv文件并添加进度保存机制,以防止意外停止丢失数据,同时在窗口中显示程序运行进度。
```python
import tushare as ts
import pandas as pd
import os
import time
# 创建保存结果的文件夹
result_folder = './周量比选股'
if not os.path.exists(result_folder):
os.mkdir(result_folder)
# 获取所有股票代码
stocks = ts.get_stock_basics().index
# 获取当前日期所在周的起始日期和结束日期
today = pd.to_datetime('today').strftime('%Y-%m-%d')
start_date = pd.to_datetime(today) - pd.offsets.Week(1)
end_date = pd.to_datetime(today) - pd.offsets.Day(1)
# 初始化进度条
total_stocks = len(stocks)
progress = 0
# 遍历所有股票代码,获取周量比并筛选符合条件的股票
selected_stocks = []
for code in stocks:
progress += 1
print(f'正在查询第{progress}只股票,共{total_stocks}只股票')
try:
# 获取股票的周K线数据
k_data = ts.get_k_data(code, ktype='W', autype='qfq', start=start_date.strftime('%Y-%m-%d'), end=end_date.strftime('%Y-%m-%d'))
# 计算周量比
k_data['volume_ma'] = k_data['volume'].rolling(window=5).mean()
k_data['week_ratio'] = k_data['volume'] / k_data['volume_ma']
# 筛选符合条件的股票
if k_data.iloc[-2]['week_ratio'] > 2:
selected_stocks.append(code)
except:
pass
# 更新进度条
progress_bar = '[' + '#' * int(progress / total_stocks * 20) + ' ' * (20 - int(progress / total_stocks * 20)) + ']'
print(progress_bar, f'{progress}/{total_stocks}', end='\r')
# 暂停1秒钟,防止请求频率过高被封IP
time.sleep(1)
# 保存结果至csv文件
result_file = os.path.join(result_folder, f'周量比选股结果_{today}.csv')
pd.DataFrame({'code': selected_stocks}).to_csv(result_file, index=False)
# 显示程序运行完成信息
print('选股程序已完成,结果已保存至以下文件:')
print(result_file)
```
请注意,运行此程序需要先安装tushare和pandas等相关依赖包。如果您没有安装这些包,可以在命令行中使用以下命令进行安装:
```bash
pip install tushare pandas
```
此外,由于程序需要请求网络数据,如果请求频率过高可能会被封IP,建议在请求数据时添加一定的暂停时间。
阅读全文