def filter_stock_by_average_pe(min, max): path=os.path.join(current_folder,'3年平均利润.csv') if not os.path.exists(path): #没有就生成3年平均利润列表 calcu_all_stocks_3year_average_profit(calcu_average_profit_end_year) gplb=pd.read_csv(path,encoding = "gbk",index_col=0) now=datetime.now() today=str(now)[:11] current_sec=str(now)[:18].replace('-','_').replace(':','_') price_path=os.path.join(current_folder,today+'股票价格.csv') if not os.path.exists(price_path): ts.get_today_all().set_index('code').to_csv(price_path) current_price=pd.read_csv(price_path,encoding = "gbk",index_col=0) current_price= current_price[['trade']] current_price.columns=['价格'] gplb=gplb[['名字','行业','地区','流通股本','总股本(万)','总资产(万)','流动资产','固定资产','每股净资','市净率','上市日期','平均利润']] data=pd.merge(gplb,current_price,left_index=True, right_index=True) data['平均市盈率']=data['总股本(万)']*data['价格']/data['平均利润'] data = data[data['平均市盈率'] < max] data = data[data['平均市盈率'] > min] data['平均市盈率']=data['平均市盈率'].round() data['平均利润']=data['平均利润'].round() data['市净率']=data['市净率'].round(1) data['固定资产']=data['固定资产'].round() data['流动资产']=data['流动资产'].round() data['总股本(万)']=data['总股本(万)'].round() data['流通股本']=data['流通股本'].round() average_pe_file = os.path.join(current_folder, today + '3年平均市盈率在%s和%s之间的公司.xlsx' % (min, max)) data.to_excel(average_pe_file)
def today_df_filter0(today_df): #""" today_df = ts.get_today_all() today_df = today_df[today_df.amount>0] today_df_high_open = today_df[today_df.open>today_df.settlement*1.005] all_trade_code = today_df['code'].values.tolist() all_a_code = ps.get_all_code(hist_dir="C:/中国银河证券海王星/T0002/export/") all_stop_code = list(set(all_a_code).difference(set(all_trade_code))) print('\n') print('all_stop_code=%s' % all_stop_code) print(len(all_stop_code)) high_open_code_str = today_df_high_open['code'].values.tolist() print('all_trade_code = %s'%all_trade_code) print(len(all_trade_code)) print('today_df_high_open = %s'%high_open_code_str) today_df['star'] = ((today_df['trade']-today_df['open'])/(today_df['high']-today_df['low'])).round(3) today_df['star_h'] = np.where(today_df['star']>=0, ((today_df['high']-today_df['trade'])/(today_df['high']-today_df['low'])).round(3), ((today_df['high']-today_df['open'])/(today_df['high']-today_df['low'])).round(3)) today_df['atr'] = np.where((today_df['high']-today_df['low'])<(today_df['high']-today_df['settlement']), today_df['high']-today_df['settlement'],today_df['high']-today_df['low']) #temp_df['close'].shift(1)-temp_df['low']) today_df['atr'] = np.where(today_df['atr']<(today_df['settlement']-today_df['low']), (today_df['settlement']-today_df['low']),today_df['atr']) today_df['atr_r'] = ((today_df['atr']/today_df['settlement']).round(3))*100.0 today_df['star_chg'] = today_df['star'] * today_df['changepercent'] #del today_df['atr'] describe_df = today_df.describe().round(3) #print(type(describe_df)) lt_describe = describe_df.loc['25%']#.iloc[3].values mean_chg = describe_df.loc['mean','changepercent'] most_chg = describe_df.loc['75%','changepercent'] least_chg = describe_df.loc['25%','changepercent'] most_atr_r = describe_df.loc['75%','atr_r'] least_atr_r = describe_df.loc['25%','atr_r'] print(mean_chg,most_chg,least_chg,most_atr_r,least_atr_r) print(describe_df) great_rate = 2.0 gt_today_df = today_df[today_df.changepercent> great_rate] great_atd_df = today_df[today_df['atr_r']>11] stock_basic_df=ts.get_stock_basics() #stock_basic_df['outstanding'] = stock_basic_df['outstanding'] * 0.0001 #stock_basic_df['totals'] = stock_basic_df['totals'] * 0.0001 lt_outstanding_df = stock_basic_df[stock_basic_df.outstanding<100000] #流通股本小于10亿 print(lt_outstanding_df) today_df['real'] = 0.00000001 *today_df['amount']/today_df['turnoverratio'] min_atr_df = today_df[today_df.real<10.0] min_atr_df = min_atr_df[min_atr_df.atr_r<least_atr_r] lt_outstanding_df_list = lt_outstanding_df.index.values.tolist() print(lt_outstanding_df_list) min_atr_df = min_atr_df.set_index('code') min_atr_df_list = min_atr_df.index.values.tolist() print(min_atr_df_list) inter_list = list(set(min_atr_df_list).intersection(set(lt_outstanding_df_list))) print(len(inter_list)) filter_df = min_atr_df[min_atr_df.index.isin(inter_list)] #print(filter_df) #print(type(filter_df)) min_atr_df = filter_df.sort_values(axis=0, by='atr_r', ascending=True) min_atr_df = filter_df.sort_values(axis=0, by='star', ascending=False) print(min_atr_df)
def get_break_bvps(): base_info = ts.get_stock_basics() current_prices = ts.get_today_all() current_prices[current_prices['code'] == '000625']['trade'].values[0] base_info.loc['000625']['bvps']
def daily_market(): df = ts.get_today_all() try: df.to_sql(SaveData.today,SaveData.daily_engine,if_exists='replace') except Exception as e: logger.info(e) logger.info("Save {} data to MySQL".format(SaveData.today))
def get_stock_price(code, include_realtime_price): """ 获取个股股价 :param code: 股票代码 :param include_realtime_price: 是否含实时股价 :return: """ # 获取历史股价 df = ts.get_hist_data(code) df = df[['close']] df['date'] = df.index if include_realtime_price: df_today = ts.get_today_all() df_code = df_today[df_today['code']==code] df_code = df_code[['trade']] df_code['date'] = GetNowDate() df_code.rename(columns={'trade': 'close'}, inplace=True) df = pd.concat([df, df_code], ignore_index=True) df.sort(columns='date', inplace=True) df = df.drop_duplicates(['date']) df.index = range(len(df)) print '\n' # print df.head() print df.tail() return df
def fetch_classification(self): # 数据来源自新浪财经的行业分类/概念分类/地域分类 print( "Trying: get_today_all" ) today_all = ts.get_today_all() #一次性获取今日全部股价 set_today_all = set(today_all.T.values[0]) print( "Trying: get_industry_classified" ) industry_classified = ts.get_industry_classified() set_industry_classified = set(industry_classified.T.values[0]) print( "Trying: get_area_classified" ) area_classified = ts.get_area_classified() set_area_classified = set(area_classified.T.values[0]) print( "Trying: get_concept_classified" ) concept_classified = ts.get_concept_classified() set_concept_classified = set(concept_classified.T.values[0]) print( "Trying: get_sme_classified" ) sme_classified = ts.get_sme_classified() set_sme_classified = set(sme_classified.T.values[0]) return [ today_all , set_today_all , industry_classified , set_industry_classified , area_classified , set_area_classified , concept_classified , set_concept_classified , sme_classified , set_sme_classified ]
def GetAllTodayData(self): #存储每天 涨幅排行 榜,避免每次读取耗时过长 filename=self.today+'_all_.xls' #放在data文件夹下 filename=os.path.join(self.path,filename) if not os.path.exists(filename): re_try=5 while re_try>0: try: self.df_today_all=ts.get_today_all() #过滤停牌的 # self.df_today_all.drop(self.df_today_all[self.df_today_all['turnoverratio']==0].index,inplace=True) #实测可用,删除的方法 #n1=self.df_today_all[self.df_today_all['turnoverratio']==0] #n2=self.df_today_all.drop(n1.index) #print n2 # print self.df_today_all break except Exception,e: re_try=re_try-1 time.sleep(5) if len(self.df_today_all)!=0: self.df_today_all.to_excel(filename,sheet_name='All') else: self.df_today_all=None
def FindGoodStock(): pdReportToday = ts.get_today_all() # print(type(pdReportToday), pdReportToday) for index,row in pdReportToday.iterrows(): delta = row["open"] - row["trade"] stockId = row["code"] # print(stockId, "--------------", delta) try: try: retVal = PrintOpenLow([stockId]) if retVal == None: print("Network data 1") retVal = CheckLowDiffByTushare( stockId ) except: print("Network data 2") retVal = CheckLowDiffByTushare( stockId ) if delta > retVal[0]: print(stockId, "delta:", delta, "now:", row["trade"], retVal) if delta > retVal[0] + 0.5*retVal[1]: print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") elif delta > retVal[0] + retVal[1]: print("--------------------------------------------------------------------------------------------------") # CheckLowDiffByTushare( stockId, bShow = False) except: print(stockId, "Exception")
def get_day_list(): print "tushare version:" + ts.__version__ ''' 获取当天的涨幅排行榜 code name changepercent 涨跌幅 trade:现价 open: high: low: settlement:昨日收盘价 volume: turnoverratio: ''' all_data = ts.get_today_all() if all_data is None: print 'None data fetched' return trade_date = datetime.datetime.today() if int(trade_date.strftime("%w")) == 0: # sunday trade_date = trade_date + datetime.timedelta(days=-2) elif int(trade_date.strftime("%w")) == 6: # saturday trade_date = trade_date + datetime.timedelta(days=-1) all_data_file_name = "allData" + trade_date.strftime("%Y-%m-%d") + ".csv" output_all_data_file_dir = "e:/data/" + all_data_file_name all_data.to_csv(output_all_data_file_dir, encoding='gbk') # output_all_data_file_dir = "e:/data/" + all_data_file_name # up_data = pd.read_csv(output_all_data_file_dir, encoding='gbk', index_col=0, dtype={'code': str}) print all_data['code']
def get_url_data_(self): # 从 tushare.org 获取股票市场的代码列表 code_list_ = pandas.DataFrame((tushare.get_today_all())['code']) # 排序 code_list_ = code_list_.sort(columns='code', ascending=True) # 增加一自然数列做为 index code_list_['index'] = pandas.DataFrame([i for i in range(0, len(code_list_))], code_list_.index) code_list_.reindex(index=code_list_['code']) # 写库 code_list_.to_sql('code_list_', self.engine_, if_exists='replace', index=True, index_label='index') # 把 index 设为主键 self.engine_.connect().execute('alter table testdb.code_list_ add primary key(`index`)') # 根据上面股票列表逐个获取个股数据 for i in range(0, len(code_list_)): # 取的是已经复权的数据 stock_data_ = tushare.get_h_data(code_list_['code'][i]) # 因为获取的数据以 date 为 index,但是写库时不能把 date 当 index 写入,所以复制该列 stock_data_['date'] = pandas.Series(stock_data_.index, stock_data_.index) stock_data_ = stock_data_.sort_values(by='date', ascending=True) stock_data_['index'] = pandas.DataFrame([i for i in range(0, len(stock_data_))], stock_data_.index) stock_data_.to_sql(code_list_['code'][i], self.engine_, if_exists='replace', index=True, index_label='index') self.engine_.connect().execute('alter table testdb.' + code_list_['code'][i] + ' add primary key(`index`)')
def real_time_data_all_stock(self): now_str = sutils.get_datetime_str() now_data = ts.get_today_all() now_data_len = len(now_data) logger.debug('The length of real time data is: %d' % now_data_len) now_data['time'] = pd.Series(np.array([now_str] * now_data_len)) mutils.to_sql(now_data, table='real_time_data', engine)
def save_excel(): df = ts.get_today_all() df.to_excel('1.xls', sheet_name='all_stock') df2 = ts.get_hist_data('300333') df2.to_excel('1.xls', sheet_name='basic_info') df.ExcelWriter out = pd.ExcelWriter("2.xls") df.to_excel()
def gsz(): hq = ts.get_today_all() hq['trade'] = hq.apply(lambda x: x.settlement if x.trade == 0 else x.trade, axis=1) basedata = stock_info[['outstanding', 'totals', 'reservedPerShare', 'esp']] hqdata = hq[['code', 'name', 'trade', 'mktcap', 'nmc']] hqdata = hqdata.set_index('code') data = basedata.merge(hqdata, left_index=True, right_index=True) print(data.head(10))
def get_day_all(): try: #print('Get Day All...') df = ts.get_today_all() except: print('ts.get_today_all failed.') sys.exit(1) return(df)
def get_all_top(): gold = {} goldl = [] df = ts.get_today_all() top = df[df['changepercent'] > 6] print "top:", len(top['code']) for code in top['code']: ave=sl.get_today_tick_ave(code)
def get_profit_report(): df = ts.profit_data(top=4000) df = df.sort_values('divi', ascending=False) #获取最新股价 df_quots = ts.get_today_all() df_quots['roe'] = df_quots['pb'] * 100 / df_quots['per'] #df_basic['peg'] = df_basic['pe']/df_basic['profit'] df_quots['close'] = map(swap_value, df_quots['trade'], df_quots['settlement']) df_quots.reset_index(inplace=True) df_quots = df_quots.drop([ 'index', 'name', 'changepercent', 'trade', 'open', 'high', 'low', 'settlement', 'volume', 'turnoverratio', 'amount', 'nmc' ], axis=1) df = pd.merge(df, df_quots, how='left', on=key) df['rate'] = df['divi'] / 10 * 100 / df['close'] df['valueprice'] = df['roe'] * (df['close'] / df['pb']) / 15 df = df.sort_values('rate', ascending=False) #df['value'] = df['esp']/0.08 #df['rate'] = (df['value']-df['close'])*100/df['close'] df = df[df['per'] > 0] df = df.sort_values('report_date', ascending=False) df = df.drop_duplicates(['name']) # 按现金股息率排行 df = df.sort_values('rate', ascending=False) export_report(df, title="stock_dividence") # 按roe排行 df = df.sort_values('roe', ascending=False) export_report(df, title="stock_roe") # 按市盈率 df = df.sort_values('per', ascending=True) export_report(df, title="stock_pe") # 按市净率 df = df.sort_values('pb', ascending=True) export_report(df, title="stock_pb") # 不排序 df = df.sort_values('mktcap', ascending=True) export_report(df, title="stock_value")
def get_all_trading_codes(): ''' 获取A股市场全部的交易代码和交易名称 ''' all_data = ts.get_today_all() current_dir = os.path.dirname(__file__) ab_path = os.path.join( current_dir, "..\\", "..\\" ) meta_data_path =os.path.abspath( ab_path ) + "\\meta_data\\" all_data[['code', 'name']].to_csv(meta_data_path+"meta_codes.csv", encoding='utf-8', index=False)
def get_stop_trade_symbol(): today_df = ts.get_today_all() today_df = today_df[today_df.amount>0] today_df_high_open = today_df[today_df.open>today_df.settlement*1.005] all_trade_code = today_df['code'].values.tolist() all_a_code = pds.get_all_code(hist_dir="C:/中国银河证券海王星/T0002/export/") #all_a_code = pds.get_all_code(hist_dir="C:/hist/day/data/") all_stop_codes = list(set(all_a_code).difference(set(all_trade_code))) return all_stop_codes
def process_stock_exchange_rate(): # 代码,名称,涨跌幅,现价,开盘价,最高价,最低价,最日收盘价,成交量,换手率,成交额,市盈率,市净率,总市值,流通市值 # code name changepercent trade open high low settlement volume turnoverratio amount per pb mktcap nmc while True: basic = ts.get_today_all() push = basic[(basic.turnoverratio > 0.3) & (basic.changepercent < 0.0)] print(push.code) break time.sleep(60)
def update_stocks_data(state, all_stocks): if not state: try: all_stocks = ts.get_today_all() state = True except Exception, e: print e all_stocks = None state = False
def get_all_toplist(): # gold = {} # goldl = [] df = ts.get_today_all() top = df[df['changepercent'] > 6] top = top[top['changepercent'] < 10] list = top.index print len(list) return list
def daily_market(): df = ts.get_today_all() try: df.to_sql(SaveData.today, SaveData.daily_engine, if_exists='replace') except Exception as e: logger.info(e) logger.info("Save {} data to MySQL".format(SaveData.today))
def GetCurrentData(): CurrentData = ts.get_today_all() if CurrentData.index.name != 'code' and CurrentData.columns.contains('code'): CurrentData.set_index(['code'], inplace=True) else: return False if CurrentData.columns.contains('trade'): CurrentData.rename(columns={'trade': 'close'}, inplace=True) return CurrentData
def getOutStandingStock(): df_stk = ts.get_stock_basics().reset_index() df_trans = ts.get_today_all() df_result = pd.merge(df_stk,df_trans,on = 'code') df_result = df_result.loc[:,['code','name_x','industry','outstanding','trade']] df_result['outstanding_amt'] = df_result['outstanding'] * df_result['trade'] * 10000 df_result = df_result[df_result.outstanding_amt < 5000000000] return df_result
def download_stock_D1(self): """ 下载日线数据 """ #print('downloading the stock daily info...') stock_basics = ts.get_today_all() stock_list = sorted(list(stock_basics.code.values)) total = 0 file_path = self.working_folder for stock in stock_list: filename = stock + '.csv' stock_data = pd.DataFrame([]) try: stock_data = pd.read_csv(file_path + filename) stock_data.sort_values(by='date', ascending=False, inplace=True) start_date = stock_data.head(1).iloc[0, 0] end_date = strftime("%Y-%m-%d", localtime()) try: stock_data_latest = ts.get_k_data(stock, autype=None, start=start_date, end=end_date) stock_data = stock_data.append(stock_data_latest) except: pass except: year = 1990 while year <= self.today_year: start_date = str(year) + '-01-01' end_date = str(year) + '-12-31' try: stock_data_latest = ts.get_k_data(stock, autype=None, start=start_date, end=end_date) stock_data = stock_data.append(stock_data_latest) except: pass year = year + 1 if len(stock_data) > 0: stock_data.drop_duplicates(subset=['date'], keep='first', inplace=True) stock_data.sort_values(by='date', ascending=False, inplace=True) stock_data.set_index(keys=['date'], drop=True, inplace=True, append=False) stock_data.to_csv(file_path + filename) #print('download_stock_D1 successful ' + str(total)) return
def zqAmoMin(self, stime, etime): # amosql="select * from stocksystem.bigcashflow where datetime>='"+stime+ "'and datetime <='"+etime+"'" # print amosql # amodata=pd.read_sql(amosql,con=self.engine) # # print '资金流数据读取完成' # # s2=pd.DataFrame() # sindex=['vbigB','vbigS','lbigB','lbigS'] # tmpgroup=amodata.groupby('hq_code') # for code,tmpdata in tmpgroup: # tmpdata=tmpdata.groupby('type').agg({'amo':'sum','amoper':'sum'}) # tmpdata=tmpdata.reindex(sindex) # tmpdata=tmpdata.unstack().unstack() # tmpdata['hq_code']=code # s2=s2.append(tmpdata) # # s2.fillna(0,inplace=True) # s2['bigD']=s2['vbigB']+s2['lbigB']-s2['vbigS']-s2['lbigS'] # amodata=s2.loc['amo'] # amoperdata=s2.loc['amoper'] # amodata.set_index('hq_code',inplace=True) # amoperdata.set_index('hq_code',inplace=True) # amodata['bigper']=amoperdata['bigD'] # amodata.sort_values('bigper',inplace=True,ascending=False) amosql = "select hq_code,amo from stocksystem.bigcashflow where datetime>='" + stime + "'and datetime <='" + etime + "'" print amosql amodata = pd.read_sql(amosql, con=self.engine, index_col='hq_code') amonet = amodata.groupby(level=0).sum() amodata['amo'] = np.abs(amodata['amo']) amodata = amodata.groupby(level=0).sum() stockdata = ts.get_today_all() stockdata['code'] = stockdata['code'].astype(int) stockdata.set_index('code', inplace=True) #得到流通股本 amodata['nmc'] = stockdata['nmc'] amodata['amoper'] = amodata['amo'] / np.abs(amodata['amo']).sum() amodata['nmcper'] = stockdata['nmc'] / (stockdata['nmc'].sum()) amodata['amopower'] = amodata['amoper'] / amodata['nmcper'] amodata = amodata.sort_values('amopower', ascending=False) amonet['nmc'] = stockdata['nmc'] amonet['amoper'] = amonet['amo'] / np.abs(amonet['amo']).sum() amonet['nmcper'] = stockdata['nmc'] / (stockdata['nmc'].sum()) amonet['amopower'] = amonet['amoper'] / amonet['nmcper'] amonet = amonet.sort_values('amopower', ascending=False) return amodata.loc[:, [ 'amo', 'amoper', 'amopower', 'nmcper' ]], amonet.loc[:, ['amo', 'amoper', 'amopower', 'nmcper']]
def __init__(self): self.today_stock=ts.get_today_all() now=datetime.datetime.now() self.today=now.strftime("%Y-%m-%d") #weekday=now+datetime.timedelta(days=-2) #weekday=weekday.strftime("%Y-%m-%d") #print weekday #today=now.strftime('%Y-%m-%d') self.path=os.path.join(os.getcwd(),'data') self.filename=os.path.join(self.path,'recordMyChoice.xls')
def update_stocks_data(state, all_stocks): if not state: try: print datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") all_stocks = ts.get_today_all() state = True except Exception, e: print e all_stocks = None state = False
def gettodaymarket(self, re_try=5): while re_try > 0: try: df = ts.get_today_all() if len(df) != 0: return df except Exception, e: print e re_try = re_try - 1 time.sleep(self.TIMEOUT)
def get_day_rise(self): if not os.path.isfile(self.appPath + '/' + self.lastTradeDate + '_Datas.csv'): try: codeList = ts.get_today_all() except Exception: return [] codeList.to_csv(self.appPath + '/' + self.lastTradeDate + '_Datas.csv', encoding='utf8') else: codeList = pd.read_csv(self.appPath + '/' + self.lastTradeDate + '_Datas.csv', encoding='utf8',dtype={'code': str}) return codeList
def download__today_alldata(): ALL_datas=ts.get_today_all()# 读取去当天数据 files_path= '../report/Daily_database' if os.path.exists(files_path) == False: # 判断文件是不是存在 os.mkdir(files_path) # 创建目录 ALL_datas.to_csv('../report/Daily_database/%s_full_stock_csv.csv'%todaytime,encoding='gbk') #存储到CSV #存储到xlsx文件中 with pd.ExcelWriter('../report/Daily_database/%s_full_stock_xlx.xlsx'%todaytime) as writer: ALL_datas.to_excel(writer, sheet_name='Sheet1') print('today data base to save %s_database.csv'%todaytime)
def update_today_all(): ''' [更新当日实时数据]###### 函数说明 乔晖 2018/4/23 一次性获取当前交易所有股票的行情数据(如果是节假日,即为上一交易日,结果显示速度取决于网速) 【行情不含基金和ETF】 结果保存在/data/today_all.csv ''' df = ts.get_today_all() df.to_csv('.\\data\\today_all.csv')
def get_today_and_putto_database(dbname): tl = time.localtime() if (tl.tm_hour < 15) and (tl.tm_hour > 8): print("\ Now trading time , Do not update by This method") return 0 df = ts.get_today_all() neardate = get_shangHaiIndexAndReturnNearestTradeDate() result = convertTodaydfTorows(df, neardate) testsqlite(dbname, result, 0)
def downloadToday(): df = ts.get_today_all() df.to_csv('today.csv', sep=',', encoding='utf-8') code_list = df['code'] name_list = df['name'] name_dict = {} for i in range(len(code_list)): name_dict[code_list[i]] = name_list[i] save_dict(name_dict, 'name_dict') pass
def build_db(self): import tushare as ts df = ts.get_today_all() rows, cols = df.shape self.names = dict() for i in range(rows): self.names[df.ix[i, 'code']] = df.ix[i, 'name'] with open('names.json', 'w') as f: json.dump(self.names, f)
def build_db(self): import tushare as ts df = ts.get_today_all() rows, cols = df.shape self.names = dict() for i in range(rows): self.names[df.ix[i,'code']] = df.ix[i,'name'] with open('names.json', 'w') as f: json.dump(self.names, f)
def stock_info_html(): data = ts.get_today_all() title = data.columns.values.tolist() re_array = data[[ 'code', 'name', 'changepercent', 'trade', 'open', 'high', 'low', 'settlement', 'volume', 'turnoverratio' ]] data_li = list(row.tolist() for index, row in re_array.iterrows())
def get_all_toplist(): # gold = {} # goldl = [] df = ts.get_today_all() top = df[df['changepercent'] > 6] top = top[top['changepercent'] < 10] # logging.info("top:", len(top['code'])) list = top['code'] print len(list) return list
def __init__(self): self.today_stock = ts.get_today_all() now = datetime.datetime.now() self.today = now.strftime("%Y-%m-%d") #weekday=now+datetime.timedelta(days=-2) #weekday=weekday.strftime("%Y-%m-%d") #print weekday #today=now.strftime('%Y-%m-%d') self.path = os.path.join(os.getcwd(), 'data') self.filename = os.path.join(self.path, 'recordMyChoice.xls')
def getCode(): try: print('开始获取股票代码!!!') #获取今日数据 pp = ts.get_today_all() #获取所有的股票代码 codeList = np.array(pp.code).tolist() return codeList except Exception as err: print(err)
def __init__(self, init=True): """ 初始化,筛除688,300,ST,退市股,新股,低价股,下跌股 """ if init: self.data = ts.get_today_all() #今日复盘 self.updateNMC(self.data) # data = ts.get_day_all(date='2021-02-18') #历史复盘 filt = self.data['code'].str.contains('^(?!688|605|300|301|8|43)') self.data = self.data[filt] filt = self.data['name'].str.contains('^(?!S|退市|\*ST|N)') self.data = self.data[filt] self.data = self.data.drop_duplicates() data = self.data[self.data['trade'] >= 2] data = data[data['changepercent'] > -3] data = data.to_json(orient='records') db.get_collection('today').remove() base = db.get_collection('base').find() industry = {i['code']: i['industry'] for i in base} self.intersect = {} for i in eval(data): db.get_collection('today').insert(i) res = db.get_collection('today').find() for i in res: try: db.get_collection('today').update_many( {'code': i['code']}, {'$set': { 'industry': industry[i['code']] }}) except: pass # 剔除新股 try: newStock = ts.new_stocks() if not newStock.empty: newStock = newStock[newStock.ipo_date > '2020-01-01'] for i in newStock['code'].tolist(): db.get_collection('today').remove({'code': i}, multi=True) except Exception as e: print('newStock Error', e) # 剔除停牌 db.get_collection('today').remove({'open': 0}) # 龙虎榜 if not (10 < time.localtime().tm_hour < 18): db.get_collection('topList').remove() longhu = ts.top_list() longhu = longhu.to_json(orient='index', ) longhu = json.loads(longhu) for k, v in longhu.items(): db.get_collection('topList').insert(v)
def stoplossNotification(bot): ''' 消息推送:持仓股票提醒 :return: null ''' print(strftime("%Y-%m-%d %H:%M:%S", localtime()) + ' - Start stoplossNotification thread ') #generic variables initialization working_folder = '/Users/yanghui/Documents/' while True: now = strftime("%H:%M", localtime()) today_ISO = datetime.today().date().isoformat() ## 2018 holiday calendar holiday_calendar = ['2018-04-05', '2018-04-06', '2018-04-30', \ '2018-05-01', '2018-06-18', '2018-09-24', \ '2018-10-01', '2018-10-02', '2018-10-03', '2018-10-04', '2018-10-05'] if datetime.today().weekday() >= 5 or (today_ISO in holiday_calendar): holiday = True else: holiday = False #now = '14:30' # for testing purpose, need to remove before use if (not holiday) and (now >= '09:30') and (now <= '15:05') : filename = 'portfolio' portfolio = pd.read_excel(io=working_folder + \ 'quantest/risk_management/' + filename + '.xlsx') portfolio.index = portfolio.index.map(lambda x: str(x).zfill(6)) portfolio_closed = portfolio[portfolio.price_close > 0] portfolio_open = portfolio[portfolio.isnull().price_close] try: today_all = ts.get_today_all() today_all['code'] = today_all['code'].map(lambda x: str(x).zfill(6)) for code in portfolio_open.index: today_all_stock = today_all[(today_all.code == code)] if (today_all_stock.iloc[0,3] <= portfolio_open.loc[code, 'price_stoploss']) and (portfolio_open.loc[code, 'notification_sent'] != 'Y'): #消息推送 msg = '==========================' + '\n' + \ today_ISO + ' ' + now + ' - \n' + \ '==========================' + '\n' + \ '提醒:' + portfolio_open.loc[code, 'name'] + '-跌破止损价' + str(portfolio_open.loc[code, 'price_stoploss']) + '\n' + \ '==========================' portfolio_open.loc[code, 'notification_sent'] = 'Y' #发送消息 bot.friends().search('Yang Hui')[0].send(msg) #bot.friends().search('欣')[0].send(msg) #save file portfolio = portfolio_closed.append(portfolio_open) filename = 'portfolio' portfolio.to_excel(working_folder + 'quantest/risk_management/' + filename + '.xlsx', encoding='GBK') except: pass time.sleep(300) print(strftime("%Y-%m-%d %H:%M:%S", localtime()) + ' - End stoplossNotification thread ') return
def filter_stock_by_average_pe(min, max): path = os.path.join(current_folder, '3年平均利润及其他财务指标%s.csv' % today) if not os.path.exists(path): # 没有就生成3年平均利润列表 calcu_all_stocks_3year_roe_and_average_profit( calcu_average_profit_end_year) gplb = pd.read_csv(path, index_col=0, encoding='utf-8') # 获取当前股票价格 price_path = os.path.join(current_folder, today + '股票价格.csv') if not os.path.exists(price_path): ts.get_today_all().set_index('code').to_csv(price_path, encoding="utf-8") current_price = pd.read_csv(price_path, encoding="utf-8", index_col=0) current_price = current_price[['trade']] current_price.columns = ['价格'] gplb = gplb[[ '名字', '行业', '地区', '流通股本', '总股本', '总资产(万)', '流动资产', '固定资产', '每股净资', '市净率', '上市日期', '平均利润' ]] data = pd.merge(gplb, current_price, left_index=True, right_index=True) # 因为这里的平均利润单位是万元,而总股本单位是亿,价格单位是元 data['平均市盈率'] = data['总股本'] * data['价格'] * 10000 / data['平均利润'] print('\n%s:' % today) print() print('%d个公司' % data.shape[0]) print('3年市盈率中位数%.1f' % round(data['平均市盈率'].median(), 1)) print('市净率中位数%.1f' % round(data['市净率'].median(), 1)) data = data[data['平均市盈率'] < max] data = data[data['平均市盈率'] > min] data['平均市盈率'] = data['平均市盈率'].round(1) data['平均利润'] = data['平均利润'].round() data['市净率'] = data['市净率'].round(1) data['固定资产'] = data['固定资产'].round() data['流动资产'] = data['流动资产'].round() data['总股本'] = data['总股本'].round() data['流通股本'] = data['流通股本'].round() average_pe_file = os.path.join( current_folder, today + '-3年平均市盈率在%s和%s之间的公司.xlsx' % (min, max)) data.to_excel(average_pe_file, encoding='utf-8')
def main(today): path=os.path.join(os.path.dirname(__file__),'data') filename=os.path.join(path,'each_day_profile.xls') org_filename=os.path.join(path,'2016-09-30_all_.xls') #df_filename=os.path.join(path,'each_day_profile.xls') #df=pd.read_excel(org_filename) df=ts.get_today_all() new_df=join_dataframe(filename,today) save_name=os.path.join(path,"each_day_profile.xls") #这样会不会把原来的覆盖掉? new_df.to_excel(save_name)
def getTodayAll(self): otherStyleTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S") fileName='%s/todayAll/%s.csv'%(dir,otherStyleTime) print(fileName) pp = ts.get_today_all() if not os.path.exists('%s/todayAll'%(dir)): os.makedirs('%s/todayAll'%(dir)) pp.to_csv(fileName,encoding='utf-8') with codecs.open("log.txt", 'w', "utf-8") as fileObj: fileObj.write("%s\n"%(fileName)) return pp
def main(today): path = os.path.join(os.path.dirname(__file__), 'data') filename = os.path.join(path, 'each_day_profile.xls') org_filename = os.path.join(path, '2016-09-30_all_.xls') #df_filename=os.path.join(path,'each_day_profile.xls') #df=pd.read_excel(org_filename) df = ts.get_today_all() new_df = join_dataframe(filename, today) save_name = os.path.join(path, "each_day_profile.xls") #这样会不会把原来的覆盖掉? new_df.to_excel(save_name)
def daily_market(self): ''' 保存每天收盘后的市场行情 :return: ''' df = ts.get_today_all() print df try: df.to_sql(self.today, daily_engine, if_exists='replace') except Exception, e: print e
def announcment_stastic_main(theday): # date=mydate = time.strftime('%Y-%m-%d',time.localtime(time.time())) # print date #date=datelist(2015,1,1,2018,2,4) date = theday b = ts.get_today_all() for j in range(len(b.index)): stock = b.loc[b.index[j]]['code'] name = b.loc[b.index[j]]['name'] time1 = datetime2ts(date) test(stock, time1, date, name)
def get_all_top(): gold = {} goldl = [] df = ts.get_today_all() top = df[df['changepercent'] > 6] # top = df[df['changepercent'] < -2] top = top[top['changepercent'] < 10] # logging.info("top:", len(top['code'])) list = top['code'].tolist() print len(list) return list
def get_today_all(): try: df = ts.get_today_all() ret = {} for idx, serie in df.iterrows(): ret[serie['code']] = serie['mktcap'] return ret except Exception as e: pass finally: session.close()
def GetTodayAllQuotesData(): fileName = 'D:/today_all_quotes.csv' allData = ts.get_today_all() #一次性获取当前交易所有的股票行情数据(如果是节假日,即为上一交易日) if os.path.exists(fileName): allData.to_csv(fileName, mode='a', index=True, header=None, encoding='utf_8_sig') else: allData.to_csv(fileName, index=True, encoding='utf_8_sig')
def gettodaymarket(self, re_try=5): while re_try > 0: try: df = ts.get_today_all() if len(df) != 0: return df except Exception as e: logger.error(e) re_try = re_try - 1 time.sleep(self.TIMEOUT) return None
def get_all(): try: df = pd.DataFrame(ts.get_today_all()) j_datas = json.loads(df.to_json(orient='records')) stocks = [] from models import Stock for j_data in j_datas: stocks.append(Stock(j_data)) return stocks except IOError: pass
def general_info(): t_all = ts.get_today_all() result = [] t1 = t_all[t_all['changepercent'] <= -9.0].count()['changepercent'] result.append(t1) for i in range(-9, 9, 1): temp = t_all[(i * 1.00 < t_all['changepercent']) & (t_all['changepercent'] <= (i + 1) * 1.00)].count()[ 'changepercent'] result.append(temp) t2 = t_all[t_all['changepercent'] > 9.0].count()['changepercent'] result.append(t2) return result
def daily_market(self): ''' 保存每天收盘后的市场行情 :return: ''' df = ts.get_today_all() print(df) try: df.to_sql(self.today, daily_engine, if_exists='replace') except Exception as e: print(e) print("Save {} data to MySQL".format(self.today))
def get_codes_names(filename): ''' Get the latest codes which includes stock and index ''' zs = ts.get_index() stock = ts.get_today_all() codes = np.concatenate( (zs['code'].unique(), stock['code'].unique())) names = np.concatenate( (zs['name'].unique(), stock['name'].unique())) out = (codes, names) if filename: write_pickle(out, filename) return out