使用stock_basic接口获取股票信息,使用4个线程计算每只股票最近3个月最低价低于开盘价3%的日期,返回到一个全局变量中,全局变量要做升序排列
时间: 2023-12-25 19:06:25 浏览: 57
好的,你可以使用以下代码来实现:
```python
import tushare as ts
import threading
import datetime
# 设置 token
ts.set_token('YOUR_TOKEN')
# 初始化 tushare
pro = ts.pro_api()
# 定义全局变量
result = []
# 获取符合条件的日期
def get_lowest_price_date(stock_code):
# 获取最近3个月的K线数据
end_date = datetime.datetime.now().strftime('%Y%m%d')
start_date = (datetime.datetime.now() - datetime.timedelta(days=90)).strftime('%Y%m%d')
df = pro.daily(ts_code=stock_code, start_date=start_date, end_date=end_date)
# 计算每天的最低价
df['lowest_price'] = df[['open', 'close', 'high', 'low']].min(axis=1)
# 获取最低价低于开盘价3%的日期
date_list = df[df['lowest_price'] < df['open'] * 0.97]['trade_date'].tolist()
# 将结果添加到全局变量中
result.extend([(stock_code, date) for date in date_list])
# 多线程获取数据
def get_data():
# 获取所有股票代码
data = pro.stock_basic(list_status='L', fields='ts_code')
stock_codes = data['ts_code'].tolist()
# 使用4个线程并发处理
threads = []
for i in range(4):
thread = threading.Thread(target=get_lowest_price_date, args=(stock_codes[i::4],))
threads.append(thread)
thread.start()
# 等待所有线程执行完毕
for thread in threads:
thread.join()
# 对结果进行升序排列
result.sort(key=lambda x: x[1])
if __name__ == '__main__':
get_data()
print(result)
```
在该代码中,我们定义了一个 `get_lowest_price_date` 函数,用来获取每只股票最近3个月最低价低于开盘价3%的日期,并将结果添加到全局变量 `result` 中。我们使用 `get_data` 函数来启动多个线程并发执行 `get_lowest_price_date` 函数,最后对 `result` 进行升序排序并输出结果。
你需要将 `YOUR_TOKEN` 替换成你的 tushare token。
阅读全文