import tushare as ts import datetime def has_five_consecutive_rises(data): close = data['close'] if len(close) < 5 or any(close[-5:] != close.iloc[-1]): return False for i in range(1, 5): if close.iloc[-i-1] >= close.iloc[-i]: return False return True today = datetime.datetime.now().strftime('%Y-%m-%d') three_months_ago = (datetime.datetime.now() - datetime.timedelta(days=90)).strftime('%Y-%m-%d') data = ts.get_hist_data('hs300', start=three_months_ago, end=today) for code in data.index: stock_data = ts.get_hist_data(code, start=three_months_ago, end=today) if has_five_consecutive_rises(stock_data): print(code)改正上述代码
时间: 2024-02-22 12:01:38 浏览: 106
上述代码本身并没有错误,但是需要注意以下几点:
1. 代码中使用了tushare包,需要先安装,并且需要在tushare官网上注册账号获取token,否则无法获取数据;
2. 在使用tushare获取数据时,需要注意限制调用频率,否则可能会被封禁;
3. 代码中只是简单地判断了最近5天的股价是否连续上涨,并不能完全说明该股票已经具有投资价值,需要结合其他指标进行分析。
如果您想要具体了解如何使用tushare获取股票数据并进行分析,推荐您学习相关的量化投资知识和Python编程技巧。
相关问题
import tushare as ts import datetime # 设置 token,用于认证 ts.set_token('530fbc2b682d65696dbeec010a893f70d6953fbb6842151003c3e12f') # 初始化 tushare pro = ts.pro_api() df = pro.daily(fields = 'ts_code,trade_date,open,close',start_date='20180701', end_date='20180718') def get_stock_poll(df): stock_pool=[] for code in df['ts_code'].unique(): temp_df = df[df['ts_code'] == code ] for i in range(len(temp_df)-3): if (temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close']) and \ (temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 2]['open']) and \ (temp_df.iloc[i + 1]['close'] > temp_df.iloc[i + 1]['open']) and \ (temp_df.iloc[i]['close'] > temp_df.iloc[i]['open'])and \ (temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close'])and \ (temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 1]['close']) and\ (temp_df.iloc[i + 1]['close'] > temp_df.iloc[i]['close']): stock_pool.append(code) break return stock_pool def buy_stock(stock_pool,df): buy_list = [] for code in stock_pool: temp_df = df[df['ts_code']==code] for i in range(len(temp_df-2)): if(temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 2]['open']) and \ (temp_df.iloc[i + 1]['close'] < temp_df.iloc[i + 1]['open']) and \ (temp_df.iloc[i]['close'] < temp_df.iloc[i]['open'])and \ (temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 1]['close'])and \ (temp_df.iloc[i + 1]['close'] < temp_df.iloc[i]['close']): buy_list.append(code) break return buy_list def sell_stock(buy_stock,df): sell_list = [] for stock in buy_list: buy_date=dateime.datetime.strptime(stock[1],"%Y-%m-%d") current_date = datetime.datetime.today() days_held = (current_date - buy_date).days if days_held >=3: sell_list.append(stock[0]) print("sell list:",sell_list)要求上述代码在聚宽上运行
这段代码需要进行一些修改才能在聚宽上运行,具体修改如下:
1. 将导入的 tushare 改为聚宽提供的接口,即 import jqdatasdk as jq
2. 将 tushare 的 token 设置语句删除,因为在聚宽中不需要 token 认证
3. 将 tushare 的 pro_api() 改为聚宽的 auth(),并传入聚宽账号和密码进行认证
4. 将 tushare 的 daily() 改为聚宽的 get_price(),并传入聚宽的股票代码格式 '000001.XSHE',以及开始和结束时间
5. 将 datetime 改为聚宽提供的 jqdata.datetime,即 import jqdatasdk as jq 和 from jqdatasdk import *,并将代码中的 datetime.datetime 改为 jqdata.datetime。
修改后的代码如下:
```
import jqdatasdk as jq
from jqdatasdk import *
auth('聚宽账号', '聚宽密码')
df = get_price('000001.XSHE', start_date='2018-07-01', end_date='2018-07-18', fields=['open', 'close'])
def get_stock_poll(df):
stock_pool=[]
for code in df.index.unique():
temp_df = df[df.index == code ]
for i in range(len(temp_df)-3):
if (temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close']) and \
(temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 2]['open']) and \
(temp_df.iloc[i + 1]['close'] > temp_df.iloc[i + 1]['open']) and \
(temp_df.iloc[i]['close'] > temp_df.iloc[i]['open'])and \
(temp_df.iloc[i + 3]['close'] > temp_df.iloc[i + 2]['close'])and \
(temp_df.iloc[i + 2]['close'] > temp_df.iloc[i + 1]['close']) and\
(temp_df.iloc[i + 1]['close'] > temp_df.iloc[i]['close']):
stock_pool.append(code)
break
return stock_pool
def buy_stock(stock_pool,df):
buy_list = []
for code in stock_pool:
temp_df = df[df.index==code]
for i in range(len(temp_df)-2):
if(temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 2]['open']) and \
(temp_df.iloc[i + 1]['close'] < temp_df.iloc[i + 1]['open']) and \
(temp_df.iloc[i]['close'] < temp_df.iloc[i]['open'])and \
(temp_df.iloc[i + 2]['close'] < temp_df.iloc[i + 1]['close'])and \
(temp_df.iloc[i + 1]['close'] < temp_df.iloc[i]['close']):
buy_list.append(code)
break
return buy_list
def sell_stock(buy_list,df):
sell_list = []
for stock in buy_list:
buy_date=jqdata.datetime.strptime(str(stock[1]),"%Y-%m-%d")
current_date = jqdata.datetime.today()
days_held = (current_date - buy_date).days
if days_held >=3:
sell_list.append(stock[0])
print("sell list:",sell_list)
```
注意,由于聚宽不支持 tushare 的 ts_code,因此需要将股票代码格式改为聚宽支持的 '000001.XSHE' 格式。另外需要注意代码中的大小写,聚宽中的 jqdatasdk、jqdata.datetime 都是小写。
阅读全文