def main(offset=0): daily001 = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == '000001.SZ').order_by( models.DailyPro.trade_date.desc()).all() LAST_MARKET_DATE = daily001[offset].trade_date data_frame = DataFrame() for i, stock_basic in enumerate( main_session.query(models.StockBasicPro).all()): try: for key in models.StockBasicPro.keys: data_frame.loc[i, key] = getattr(stock_basic, key) data_frame.loc[i, COL_IS_MEDICAL] = api.is_medical( stock_basic.industry) daily = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == stock_basic.ts_code, models.DailyPro.trade_date <= LAST_MARKET_DATE).order_by( models.DailyPro.trade_date.desc()).limit( sampling_count).all() data_frame.loc[i, COL_LASTPRICE] = daily[0].close data_frame.loc[i, COL_DAILY_BREAK] = api.daily_break(daily, local_scale=30) data_frame.loc[i, COL_RECENT_AGGRESSIVE] = api.recent_limit(daily) daily_local_min = api.daily_local_min(sequence=daily, local_scale=30) data_frame.loc[i, COL_UP_RANGE] = round( (daily[0].close / daily_local_min) - 1, 2) holders = main_session.query(models.FloatHolderPro).filter( models.FloatHolderPro.ts_code == stock_basic.ts_code).all() h_set = set() for item in holders: h_set.add(item.holder_name) data_frame.loc[i, COL_FLOAT_HOLDERS] = '\n'.join(h_set) data_frame.loc[i, COL_HOLDERS_COUNT] = len(h_set) except Exception as e: print('exception in index:{index} {code} {name}'.format( index=i, code=stock_basic.ts_code, name=stock_basic.name)) continue print('##### medical aggressive {i} #####'.format(i=i)) data_frame = data_frame[(data_frame[COL_DAILY_BREAK] == True) # & (data_frame[COL_RECENT_AGGRESSIVE] == True) & (data_frame[COL_IS_MEDICAL] == True)] data_frame = data_frame.sort_values(by=COL_UP_RANGE, ascending=True).reset_index(drop=True) # data_frame = data_frame.loc[:, ['ts_code', 'name', 'industry', COL_LASTPRICE, COL_FLOAT_HOLDERS]] file_name = '{logs_path}/{date}@Medical_Aggressive.csv'.format( date=LAST_MARKET_DATE, logs_path=env.logs_path) with open(file_name, 'w', encoding='utf8') as file: data_frame.to_csv(file) plot_candle_gather(data_frame=data_frame, last_date=LAST_MARKET_DATE)
def main(offset=0): daily001 = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == '000001.SZ').order_by( models.DailyPro.trade_date.desc()).all() LAST_MARKET_DATE = daily001[offset].trade_date data_frame = DataFrame() for i, stock_basic in enumerate( main_session.query(models.StockBasicPro).all()): try: if 'ST' in stock_basic.name \ or stock_basic.symbol.startswith('688'): continue for key in models.StockBasicPro.keys: data_frame.loc[i, key] = getattr(stock_basic, key) daily = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == stock_basic.ts_code, models.DailyPro.trade_date <= LAST_MARKET_DATE).order_by( models.DailyPro.trade_date.desc()).limit( sampling_count).all() data_frame.loc[i, COL_LASTPRICE] = daily[0].close data_frame.loc[i, COL_VOL] = daily[0].vol aggressive_rate = get_aggressive_rate(stock_basic.symbol) limit_rate = get_limit_rate(stock_basic.symbol) data_frame.loc[ i, COL_ADJACENT_AGGRESSIVE_INDEX] = get_adjacent_aggressive_index( daily, local_scale=5, aggressive_rate=aggressive_rate, limit_rate=limit_rate) # data_frame.loc[i, COL_DAILY_LOCAL_MAX] = api.daily_local_max(daily, local_scale=10) except Exception as e: print('exception in index:{index} {code} {name}'.format( index=i, code=stock_basic.ts_code, name=stock_basic.name)) continue print('##### relimit ones {i} #####'.format(i=i)) data_frame = data_frame[ (data_frame[COL_ADJACENT_AGGRESSIVE_INDEX] > 0) # & (data_frame[COL_DAILY_LOCAL_MAX] < data_frame[COL_LASTPRICE] * 1.1) ] data_frame = data_frame.reset_index(drop=True) # data_frame = data_frame.loc[:, ['ts_code', 'name', 'industry', COL_LASTPRICE, COL_FLOAT_HOLDERS]] file_name = '{data_path}/relimit_ones.csv'.format(date=LAST_MARKET_DATE, data_path=env.data_path) with open(file_name, 'w', encoding='utf8') as file: data_frame.to_csv(file) file_name = '{logs_path}/{date}@Relimit_Ones.csv'.format( date=LAST_MARKET_DATE, logs_path=env.logs_path) with open(file_name, 'w', encoding='utf8') as file: data_frame.to_csv(file)
def main(offset=0): limit_up = 0 limit_down = 0 positive = 0 negative = 0 more_than_5 = 0 less_than_minus_5 = 0 total = 0 daily001 = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == '000001.SZ').order_by( models.DailyPro.trade_date.desc()).all() LAST_MARKET_DATE = daily001[offset].trade_date data_frame = DataFrame() for i, stock_basic in enumerate( main_session.query(models.StockBasicPro).all()): try: daily = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == stock_basic.ts_code, models.DailyPro.trade_date <= LAST_MARKET_DATE).order_by( models.DailyPro.trade_date.desc()).limit( sampling_count).first() if daily: if daily.pct_chg > 9.9: limit_up = limit_up + 1 if daily.pct_chg < -9.9: limit_down = limit_down + 1 if daily.pct_chg >= 0: positive = positive + 1 if daily.pct_chg < 0: negative = negative + 1 if daily.pct_chg > 5: more_than_5 = more_than_5 + 1 if daily.pct_chg < -5: less_than_minus_5 = less_than_minus_5 + 1 total = total + 1 except Exception as e: print('excetion in index:{index} {code} {name}'.format( index=i, code=stock_basic.ts_code, name=stock_basic.name)) continue print('##### {i} #####'.format(i=i)) data_frame.loc[0, '涨停'] = limit_up data_frame.loc[0, '跌停'] = limit_down data_frame.loc[0, '涨'] = round(positive / total, 2) data_frame.loc[0, '跌'] = round(negative / total, 2) data_frame.loc[0, '> 5%'] = round(more_than_5 / total, 2) data_frame.loc[0, '< -5%'] = round(less_than_minus_5 / total, 2) file_name = '../../logs/{date}@Atmosphere.csv'.format( date=LAST_MARKET_DATE) # print(fileName) with open(file_name, 'w', encoding='utf8') as file: data_frame.to_csv(file)
def main(offset=0): daily001 = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == '000001.SZ').order_by( models.DailyPro.trade_date.desc()).all() LAST_MARKET_DATE = daily001[offset].trade_date data_frame = DataFrame() for i, stock_basic in enumerate( main_session.query(models.StockBasicPro).all()): try: for key in models.StockBasicPro.keys: data_frame.loc[i, key] = getattr(stock_basic, key) daily = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == stock_basic.ts_code, models.DailyPro.trade_date <= LAST_MARKET_DATE).order_by( models.DailyPro.trade_date.desc()).limit( sampling_count).all() (data_frame.loc[i, COL_WEIGHT_RISE_EFFICIENCY], data_frame.loc[i, COL_WEIGHT_MIN_INDEX], data_frame.loc[i, COL_WEIGHT_MAX_INDEX] ) = api.daily_weight_rise_efficiency(daily=daily, begin=0, end=10) data_frame.loc[i, COL_LASTPRICE] = daily[0].close cons = main_session.query(models.ConceptPro).join( models.ConceptDetailPro, models.ConceptPro.code == models.ConceptDetailPro.code).filter( models.ConceptDetailPro.ts_code == stock_basic.ts_code).all() concept_value = '' for con in cons: concept_value = concept_value + '{c}, '.format(c=con.name) data_frame.loc[i, 'concept'] = concept_value except Exception as e: print('excetion in index:{index} {code} {name}'.format( index=i, code=stock_basic.ts_code, name=stock_basic.name)) continue print('##### {i} #####'.format(i=i)) data_frame = data_frame[(data_frame[COL_WEIGHT_RISE_EFFICIENCY] > 2) & (data_frame[COL_WEIGHT_MAX_INDEX] < 2)] sorted_frame = data_frame.sort_values( by=COL_WEIGHT_RISE_EFFICIENCY, ascending=False).reset_index(drop=True) file_name = '../../logs/{date}@RiseTempo.csv'.format(date=LAST_MARKET_DATE) # print(fileName) with open(file_name, 'w', encoding='utf8') as file: sorted_frame.to_csv(file) return sorted_frame
def main(offset=0): daily001 = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == '000001.SZ').order_by( models.DailyPro.trade_date.desc()).all() LAST_MARKET_DATE = daily001[offset].trade_date data_frame = DataFrame() for i, stock_basic in enumerate( main_session.query(models.StockBasicPro).all()): try: for key in models.StockBasicPro.keys: data_frame.loc[i, key] = getattr(stock_basic, key) daily = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == stock_basic.ts_code, models.DailyPro.trade_date <= LAST_MARKET_DATE).order_by( models.DailyPro.trade_date.desc()).limit( sampling_count).all() data_frame.loc[i, COL_RECENT_LIMIT_COUNT] = api.local_limit_count( daily, local_scale=10) except Exception as e: print('exception in index:{index} {code} {name}'.format( index=i, code=stock_basic.ts_code, name=stock_basic.name)) continue print('##### ergodic_graph {i} #####'.format(i=i)) data_frame = data_frame[ # (data_frame[COL_RECENT_LIMIT_COUNT_15] > 1) # | ((data_frame[COL_RECENT_LIMIT_COUNT_15] == 1) & (data_frame[COL_RECENT_LIMIT_COUNT_3] > 0)) (data_frame[COL_RECENT_LIMIT_COUNT] > 0)] data_frame = data_frame.sort_values(by=COL_RECENT_LIMIT_COUNT, ascending=False).reset_index(drop=True) # data_frame = data_frame.loc[:, ['ts_code', 'name', 'industry', COL_LASTPRICE, COL_FLOAT_HOLDERS]] file_name = '{logs_path}/{date}@Ergodic_Graph.csv'.format( date=LAST_MARKET_DATE, logs_path=env.logs_path) with open(file_name, 'w', encoding='utf8') as file: data_frame.to_csv(file) batch_size = 200 sub = 0 for i in range(0, len(data_frame), batch_size): sub_df = data_frame.iloc[i:i + batch_size, :] sub_df = sub_df.reset_index(drop=True) plot_candle_gather(data_frame=sub_df, last_date=LAST_MARKET_DATE, sub=sub) sub += 1
def main(offset=0): daily001 = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == '000001.SZ').order_by( models.DailyPro.trade_date.desc()).all() LAST_MARKET_DATE = daily001[offset].trade_date outputs = [] data_frame = DataFrame() for i, stock_basic in enumerate( main_session.query(models.StockBasicPro).all()): try: if 'ST' in stock_basic.name or stock_basic.symbol.startswith( '688'): continue for key in models.StockBasicPro.keys: data_frame.loc[i, key] = getattr(stock_basic, key) daily = main_session.query(models.DailyPro).filter( models.DailyPro.ts_code == stock_basic.ts_code, models.DailyPro.trade_date <= LAST_MARKET_DATE).order_by( models.DailyPro.trade_date.desc()).limit( sampling_count).all() aggressive_rate = get_aggressive_rate(stock_basic.symbol) res = parse(daily, aggressive_rate) if res: daily_basic = main_session.query(models.DailyBasic).filter( models.DailyBasic.ts_code == stock_basic.ts_code).one() outputs.append('{name} {symbol} {cir_mv}亿\n{res}'.format( name=stock_basic.name, symbol=stock_basic.ts_code, cir_mv=int(daily_basic.circ_mv), res=res)) except Exception as e: print('exception in index:{index} {code} {name}'.format( index=i, code=stock_basic.ts_code, name=stock_basic.name)) continue print('##### continuous_2_limits {i} #####'.format(i=i)) file_name = '{logs_path}/{date}@9_continuous_2_limits.txt'.format( date=LAST_MARKET_DATE, logs_path=env.logs_path) with open(file_name, 'w', encoding='utf8') as file: for item in outputs: file.write(item) file.write('\n\n')