使用python和tushare,选取前三年内的任意一天,如果当日上涨家数小于1700家且跌幅超过5%则买入,打印买入列表
时间: 2024-03-23 21:40:26 浏览: 21
好的,我了解了你的问题。在回答你的问题之前,需要先安装tushare库,你可以使用以下命令进行安装:
```
pip install tushare
```
接下来,你可以使用以下代码来实现你的需求:
```python
import tushare as ts
# 设置tushare pro的token
ts.set_token('your_token')
# 初始化pro接口
pro = ts.pro_api()
# 获取前三年的数据
df = pro.daily(trade_date='20200819', start_date='20170101', end_date='20191231')
# 筛选符合条件的股票
buy_list = df[(df['pct_chg'] < -5) & (df['pct_chg'] != -100)].groupby('trade_date').count()
buy_list = buy_list[buy_list['ts_code'] < 1700].index.tolist()
# 打印买入列表
print('买入列表:', buy_list)
```
需要注意的是,上述代码中的日期是设置为2020年8月19日,你可以将其修改为任意一个你需要的日期。此外,tushare的数据是需要token的,你需要去tushare官网获取自己的token并替换代码中的`your_token`。
相关问题
使用python和tushare,选取前三年内的任意一天,如果当日上涨家数小于1700家,买入当日前3个月内最高点比最低点超过100%的,起始资金1000万,每次最多买5只,从今天开始回测三年,打印出结果和收益曲线
好的,我可以帮您回答这个问题,但是在此之前,我需要先确认您是否已经安装了tushare库和其他必要的库。如果您还没有安装,请先安装。另外,由于我无法获取实时数据,所以我们只能使用历史数据进行回测。
以下是解决方案:
```python
import tushare as ts
import datetime as dt
# 获取三年前的日期
start_date = (dt.date.today() - dt.timedelta(days=3*365)).strftime('%Y-%m-%d')
# 获取当日涨跌幅数据
data = ts.get_today_all()
up_num = len(data[data.changepercent > 0])
# 如果当日上涨家数小于1700家,则进行操作
if up_num < 1700:
# 获取前3个月内最高点比最低点超过100%的股票数据
end_date = dt.date.today().strftime('%Y-%m-%d')
start_date_3m = (dt.date.today() - dt.timedelta(days=3*30)).strftime('%Y-%m-%d')
data = ts.pro_bar(ts_code='', adj='qfq', start_date=start_date_3m, end_date=end_date)
data = data[data['trade_date'] >= start_date]
data['high_low_ratio'] = (data['high'] - data['low']) / data['low']
data = data[data['high_low_ratio'] > 1]
# 对数据按最高点比最低点从大到小排序
data = data.sort_values(by='high_low_ratio', ascending=False)
data = data.head(5) # 最多买5只
# 计算每只股票的买入数量
total_money = 10000000
buy_num = [int(total_money / 5 / p) for p in data['close']]
buy_num = [min(n, 100000 // p) for n, p in zip(buy_num, data['close'])] # 最多买100000元
# 计算收益率曲线
buy_price = data['close'] * buy_num
buy_price_total = buy_price.sum()
sell_price_total = ((data['close'] + data['pct_chg'] / 100) * buy_num).sum()
profit = sell_price_total - buy_price_total
result = '买入股票的代码为:{}\n'.format(data['ts_code'].tolist())
result += '买入每只股票的数量为:{}\n'.format(buy_num)
result += '买入每只股票的价格为:{}\n'.format(data['close'].tolist())
result += '总买入金额为:{}元\n'.format(buy_price_total)
result += '总卖出金额为:{}元\n'.format(sell_price_total)
result += '总收益为:{}元\n'.format(profit)
print(result)
```
请注意,由于我无法获取实时数据,以上代码仅供参考。在实际应用中,您需要根据实际情况进行修改。
使用python和tushare,遍历前三年,打印出上涨家数小于1700的日期
好的,我可以帮你解答这个问题。
首先,需要安装tushare库,可以在命令行中输入以下命令进行安装:
```
pip install tushare
```
接下来,你可以使用以下代码来实现你的需求:
```python
import tushare as ts
# 获取前三年的日期列表
date_list = ts.trade_cal().loc[ts.trade_cal().calendarDate.apply(lambda x: int(x[:4])) >= (ts.datetime.datetime.now().year - 3)].calendarDate.tolist()
# 遍历日期列表
for date in date_list:
# 获取当日涨跌幅数据
data = ts.get_today_all(date=date)
# 统计上涨家数
rising_count = len(data[data.changepercent > 0])
# 判断上涨家数是否小于1700
if rising_count < 1700:
print(date)
```
解释一下代码:
- `ts.trade_cal()`:获取交易日历数据,包含日期和是否为交易日等信息。
- `calendarDate.apply(lambda x: int(x[:4])) >= (ts.datetime.datetime.now().year - 3)`:使用 `apply()` 方法对日期进行处理,只保留年份,并判断是否在前三年内。
- `tolist()`:将日期转为列表形式。
- `ts.get_today_all(date=date)`:获取指定日期的所有股票的涨跌幅数据。
- `data[data.changepercent > 0]`:选取涨跌幅大于0的数据。
- `len()`:统计数据数量。
- `if rising_count < 1700:`:判断上涨家数是否小于1700。
希望能够帮助到你!