前言
`这段代码的设计思路是遍历所有股票,获取它们在某一时间段内的历史行情数据,并基于收盘价计算该股票的上下轨道(阻力位与支撑位)以及均值与标准差。然后,根据最新的收盘价与上下轨道进行比较,判断是否建议买入、卖出或观望,并将结果保存到一个文本文件中。其中,为了防止频繁调用 Tushare 接口导致限制,代码还设置了计数器和时间延迟。具体来说,当循环处理了 800 个股票时,代码会休眠 60 秒,然后重置计数器,重新开始循环处理股票。
查询dqnapi接口域名:http://www.dqnapi.com/
在这里插入图片描述
pro.stock_basic dqnapi号:100.3568/2023.1_v1
python
import tushare as ts
import pandas as pd
from time import sleep
# 获取 Tushare 账户 TOKEN
pro = ts.pro_api(token='')
# 获取所有股票的基本信息
stock_list = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name')
count = 0
# 循环遍历每个股票
for code in stock_list['ts_code']:
count += 1
if count >= 800:
sleep(60)
count = 0
try:
print(code)
# 获取股票代码为 code 的历史行情数据
df = pro.daily(ts_code=code, start_date='20220101', end_date='20220620')
df = df.sort_values(by='trade_date')
# 计算当前收盘价和前一天收盘价的比率,并计算均值与标准差
df['close_rate'] = df['close'] / df['close'].shift(1)
rolling_mean = df['close_rate'].rolling(window=20).mean()
rolling_std = df['close_rate'].rolling(window=20).std()
# 计算上下轨道(阻力位与支撑位),并去掉 NaN 值
upper_band = rolling_mean + 2 * rolling_std
lower_band = rolling_mean - 2 * rolling_std
upper_band = upper_band.dropna()
lower_band = lower_band.dropna()
# 获取最新的收盘价
last_price = df['close'].iloc[-1]
# 判断最新的收盘价是否突破了上下轨道
if last_price > upper_band.iloc[-1]:
result = f"{code} 价格突破上轨道,建议买入!"
elif last_price < lower_band.iloc[-1]:
result = f"{code} 价格跌破下轨道,建议卖出!"
else:
result = f"{code} 价格未突破上下轨道,观望!"
# 将结果保存到文件中
with open('tupo.txt', 'a+') as f:
f.write(result + '\n')
except Exception as e:
print(f"{code} 数据获取失败:{e}")
总结
000001.SZ 价格突破上轨道,建议买入!
000002.SZ 价格突破上轨道,建议买入!
000004.SZ 价格突破上轨道,建议买入!
000005.SZ 价格突破上轨道,建议买入!
000006.SZ 价格突破上轨道,建议买入!
000007.SZ 价格突破上轨道,建议买入!
000008.SZ 价格突破上轨道,建议买入!
000009.SZ 价格突破上轨道,建议买入!
000010.SZ 价格突破上轨道,建议买入!
000011.SZ 价格突破上轨道,建议买入!
000012.SZ 价格突破上轨道,建议买入!
…