def run(): while True: email_action = EmailInformer() try: # DividendDetail.record_data(provider='emquantapi') # DividendFinancing.record_data(provider='joinquant') # HolderTrading.record_data(codes=['600276'],provider='eastmoney') # RightsIssueDetail.record_data(provider='emquantapi') # HoldTradeDetail.record_data(codes=['300628'],provider='emquantapi') # IncomeStatementQtr.record_data(codes=['300628'],provider='emquantapi') # CashFlowStatementQtr.record_data(codes=['300628'],provider='emquantapi') # CashFlowStatement.record_data(codes=['300628'],provider='emquantapi') # IncomeStatement.record_data(codes=['300628'],provider='emquantapi') FinanceDerivative.record_data(codes=['300628'], provider='emquantapi') # BalanceSheet.record_data(codes=['300628'],provider='emquantapi') # { # None: zvt.recorders.emquantapi.finance_qtr.china_stock_income_statement_qtr_recorder.ChinaStockIncomeStatementQtrRecorder} # ManagerTrading.record_data(provider='eastmoney') # TopTenHolder.record_data(provider='eastmoney') # TopTenTradableHolder.record_data(provider='eastmoney') # email_action.send_message("*****@*****.**", 'eastmoney runner2 finished', '') break except Exception as e: msg = f'eastmoney runner2 error:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'eastmoney runner2 error', msg) time.sleep(60)
def record_others(): while True: email_action = EmailInformer() try: HolderTrading.record_data(provider='joinquant', sleeping_time=1) # Etf.record_data(provider='joinquant', sleeping_time=1) # Fund.record_data(provider='joinquant', sleeping_time=1) # EtfStock.record_data(provider='joinquant', sleeping_time=1) # Stock.record_data(provider='joinquant', sleeping_time=0.5) # FundDetail.record_data(provider='joinquant', sleeping_time=0.5) # EtfStock.record_data(provider='joinquant', sleeping_time=1) # FundStock.record_data(provider='joinquant', sleeping_time=1) # FundNetValue.record_data(codes=['150008'],provider='joinquant', sleeping_time=1) # EtfNetValue.record_data(provider='joinquant', sleeping_time=1) # EtfStock.record_data(codes=['159803'],provider='joinquant', sleeping_time=1) # Etf1dKdata.record_data(codes=['050002'],provider='joinquant', sleeping_time=1) # Etf1dBfqKdata.record_data(codes=['512290'],provider='joinquant', sleeping_time=1) # Etf1dHfqKdata.record_data(codes=['512290'],provider='joinquant', sleeping_time=1) # email_action.send_message("*****@*****.**", 'joinquant record etf finished', '') break except Exception as e: msg = f'joinquant record etf error:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'joinquant record etf error', msg) time.sleep(60)
def every_day_report(): while True: try: today = now_pd_timestamp() long_targets = select_by_finance(today) logger.info(f'selected:{len(long_targets)}') if long_targets: long_targets = list(set(long_targets)) df = get_entities(provider='eastmoney', entity_schema=Stock, entity_ids=long_targets, columns=['code', 'name']) info = [df.loc[i, 'code'] + ' ' + df.loc[i, 'name'] for i in df.index] msg = ' '.join(info) else: msg = 'no targets' logger.info(msg) email_action = EmailInformer() email_action.send_message("*****@*****.**", f'{today} 基本面选股结果', msg) break except Exception as e: logger.exception('report2 sched error:{}'.format(e)) time.sleep(60 * 3)
def every_day_report(): while True: try: t = now_pd_timestamp() if t.dayofweek in (5, 6): logger.info(f'today:{t} is {t.day_name()},just ignore') today = to_time_str(t) # 抓取k线数据 JqChinaStockKdataRecorder(level=IntervalLevel.LEVEL_1DAY).run() JqChinaStockKdataRecorder(level=IntervalLevel.LEVEL_1WEEK).run() JqChinaStockKdataRecorder(level=IntervalLevel.LEVEL_1MON).run() # 计算均线 my_selector = TargetSelector(start_timestamp='2016-01-01', end_timestamp=today) # add the factors # 设置dry_run为True,因为我们只需要最近的数据,不需要加载全量数据进行回测 ma_factor = CrossMaFactor(start_timestamp='2016-01-01', end_timestamp=today, dry_run=True) my_selector.add_filter_factor(ma_factor) my_selector.run() long_targets = my_selector.get_open_long_targets(timestamp=today) if long_targets: df = get_entities(provider='eastmoney', entity_schema=Stock, entity_ids=long_targets, columns=['code', 'name']) info = [ df.loc[i, 'code'] + ' ' + df.loc[i, 'name'] for i in df.index ] msg = ' '.join(info) else: msg = 'no targets' logger.info(msg) email_action = EmailInformer() email_action.send_message("*****@*****.**", f'{today} 均线选股结果', msg) break except Exception as e: logger.exception('report1 sched error:{}'.format(e)) time.sleep(60 * 3)
def every_day_report(): while True: try: today = now_pd_timestamp() long_targets = select_by_finance(today) logger.info(f'selected:{len(long_targets)}') if long_targets: ma_factor = CrossMaFactor(start_timestamp='2015-01-01', end_timestamp=today, dry_run=True, persist_factor=False, entity_ids=long_targets, windows=[5, 30, 120]) my_selector = TargetSelector(start_timestamp='2015-01-01', end_timestamp=today, entity_ids=long_targets) my_selector.add_filter_factor(ma_factor) my_selector.run() final_targets = my_selector.get_open_long_targets(today) final_targets = list(set(final_targets)) logger.info(f'final selected:{len(final_targets)}') if final_targets: df = get_entities(provider='eastmoney', entity_schema=Stock, entity_ids=final_targets, columns=['code', 'name']) info = [ df.loc[i, 'code'] + ' ' + df.loc[i, 'name'] for i in df.index ] msg = ' '.join(info) else: msg = 'no targets' logger.info(msg) email_action = EmailInformer() email_action.send_message("*****@*****.**", f'{today} 基本面 + 技术面选股结果', msg) break except Exception as e: logger.exception('report3 sched error:{}'.format(e)) time.sleep(60 * 3)
def report_bull(): while True: error_count = 0 email_action = EmailInformer() try: latest_day: Stock1dHfqKdata = Stock1dHfqKdata.query_data(order=Stock1dHfqKdata.timestamp.desc(), limit=1, return_type='domain') target_date = latest_day[0].timestamp # 计算均线 start = '2019-01-01' my_selector = TargetSelector(start_timestamp=start, end_timestamp=target_date) # add the factors factor1 = BullFactor(start_timestamp=start, end_timestamp=target_date) factor2 = CrossMaVolumeFactor(start_timestamp=start, end_timestamp=target_date, windows=[5, 120, 250]) my_selector.add_factor(factor1) my_selector.add_factor(factor2) my_selector.run() long_stocks = my_selector.get_open_long_targets(timestamp=target_date) msg = 'no targets' if long_stocks: stocks = get_entities(provider='joinquant', entity_schema=Stock, entity_ids=long_stocks, return_type='domain') # add them to eastmoney try: try: eastmoneypy.del_group('bull') except: pass eastmoneypy.create_group('bull') for stock in stocks: eastmoneypy.add_to_group(stock.code, group_name='bull') except Exception as e: email_action.send_message(zvt_config['email_username'], f'report_bull error', 'report_bull error:{}'.format(e)) infos = stocks_with_info(stocks) msg = '\n'.join(infos) + '\n' logger.info(msg) email_action.send_message(zvt_config['email_username'], f'{target_date} bull选股结果', msg) break except Exception as e: logger.exception('report_bull error:{}'.format(e)) time.sleep(60 * 3) error_count = error_count + 1 if error_count == 10: email_action.send_message(zvt_config['email_username'], f'report_bull error', 'report_bull error:{}'.format(e))
def report_core_company(): while True: error_count = 0 email_action = EmailInformer() try: # StockTradeDay.record_data(provider='joinquant') # Stock.record_data(provider='joinquant') # FinanceFactor.record_data(provider='eastmoney') # BalanceSheet.record_data(provider='eastmoney') target_date = to_time_str(now_pd_timestamp()) my_selector: TargetSelector = FundamentalSelector( start_timestamp='2015-01-01', end_timestamp=target_date) my_selector.run() long_targets = my_selector.get_open_long_targets( timestamp=target_date) if long_targets: stocks = get_entities(provider='joinquant', entity_schema=Stock, entity_ids=long_targets, return_type='domain') # add them to eastmoney try: try: eastmoneypy.del_group('core') except: pass eastmoneypy.create_group('core') for stock in stocks: eastmoneypy.add_to_group(stock.code, group_name='core') except Exception as e: email_action.send_message( "*****@*****.**", f'report_core_company error', 'report_core_company error:{}'.format(e)) info = [f'{stock.name}({stock.code})' for stock in stocks] msg = ' '.join(info) else: msg = 'no targets' logger.info(msg) email_action.send_message(get_subscriber_emails(), f'{to_time_str(target_date)} 核心资产选股结果', msg) break except Exception as e: logger.exception('report_core_company error:{}'.format(e)) time.sleep(60 * 3) error_count = error_count + 1 if error_count == 10: email_action.send_message( "*****@*****.**", f'report_core_company error', 'report_core_company error:{}'.format(e))
def record_stock(): while True: email_action = EmailInformer() try: Stock.record_data(provider='joinquant', sleeping_time=1) StockTradeDay.record_data(provider='joinquant', sleeping_time=1) # email_action.send_message("*****@*****.**", 'joinquant record stock finished', '') break except Exception as e: msg = f'joinquant record stock:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'joinquant record stock error', msg) time.sleep(60)
def report_vol_up_250(): while True: error_count = 0 email_action = EmailInformer() try: # 抓取k线数据 # StockTradeDay.record_data(provider='joinquant') # Stock1dKdata.record_data(provider='joinquant') latest_day: Stock1dKdata = Stock1dKdata.query_data(order=Stock1dKdata.timestamp.desc(), limit=1, return_type='domain') target_date = latest_day[0].timestamp # 计算均线 my_selector = TargetSelector(start_timestamp='2018-01-01', end_timestamp=target_date) # add the factors factor1 = VolumeUpMa250Factor(start_timestamp='2018-01-01', end_timestamp=target_date) my_selector.add_filter_factor(factor1) my_selector.run() long_targets = my_selector.get_open_long_targets(timestamp=target_date) if long_targets: stocks = get_entities(provider='joinquant', entity_schema=Stock, entity_ids=long_targets, return_type='domain') # add them to eastmoney try: try: eastmoneypy.del_group('tech') except: pass eastmoneypy.create_group('tech') for stock in stocks: eastmoneypy.add_to_group(stock.code, group_name='tech') except Exception as e: email_action.send_message("*****@*****.**", f'report_vol_up_250 error', 'report_vol_up_250 error:{}'.format(e)) info = [f'{stock.name}({stock.code})' for stock in stocks] msg = ' '.join(info) else: msg = 'no targets' logger.info(msg) email_action.send_message(get_subscriber_emails(), f'{target_date} 放量突破年线选股结果', msg) break except Exception as e: logger.exception('report_vol_up_250 error:{}'.format(e)) time.sleep(60 * 3) error_count = error_count + 1 if error_count == 10: email_action.send_message("*****@*****.**", f'report_vol_up_250 error', 'report_vol_up_250 error:{}'.format(e))
def on_trading_signals(self, trading_signals: List[TradingSignal]): # 发送交易信号 target_date = trading_signals[0].happen_timestamp # 发送最近20天的交易信号 if target_date + datetime.timedelta(20) > now_pd_timestamp(): email_action = EmailInformer() msg = '' # 目前持仓情况 positions = self.get_current_positions() if positions: current_stocks = [position.entity_id for position in positions] msg = msg + '目前持仓: ' + entity_ids_to_msg(current_stocks) + '\n' # 多空信号 long_stocks = [] short_stocks = [] for trading_signal in trading_signals: if trading_signal.trading_signal_type == TradingSignalType.open_long: long_stocks.append(trading_signal.entity_id) elif trading_signal.trading_signal_type == TradingSignalType.close_long: short_stocks.append(trading_signal.entity_id) if long_stocks: msg = msg + '买入: ' + entity_ids_to_msg(long_stocks) + '\n' if short_stocks: msg = msg + '卖出: ' + entity_ids_to_msg(short_stocks) + '\n' # 账户情况 account = self.get_current_account() pct = round((account.all_value - account.input_money) / account.input_money * 100, 4) msg = msg + f'投入金额:{account.input_money},目前总市值:{account.all_value},收益率:{pct}%' email_action.send_message("*****@*****.**", f'{target_date} 交易信号', msg) super().on_trading_signals(trading_signals)
def report_core_company(): while True: error_count = 0 email_action = EmailInformer() try: # StockTradeDay.record_data(provider='joinquant') # Stock.record_data(provider='joinquant') # FinanceFactor.record_data(provider='eastmoney') # BalanceSheet.record_data(provider='eastmoney') target_date = to_time_str(now_pd_timestamp()) my_selector: TargetSelector = FundamentalSelector(start_timestamp="2016-01-01", end_timestamp=target_date) my_selector.run() long_targets = my_selector.get_open_long_targets(timestamp=target_date) if long_targets: stocks = get_entities( provider="joinquant", entity_schema=Stock, entity_ids=long_targets, return_type="domain" ) # add them to eastmoney try: codes = [stock.code for stock in stocks] add_to_eastmoney(codes=codes, entity_type="stock", group="core") except Exception as e: email_action.send_message( zvt_config["email_username"], f"report_core_company error", "report_core_company error:{}".format(e), ) infos = stocks_with_info(stocks) msg = "\n".join(infos) else: msg = "no targets" logger.info(msg) email_action.send_message(get_subscriber_emails(), f"{to_time_str(target_date)} 核心资产选股结果", msg) break except Exception as e: logger.exception("report_core_company error:{}".format(e)) time.sleep(60 * 3) error_count = error_count + 1 if error_count == 10: email_action.send_message( zvt_config["email_username"], f"report_core_company error", "report_core_company error:{}".format(e) )
def record_kdata(): while True: email_action = EmailInformer() try: Stock.record_data(provider='tonglian', sleeping_time=1) StockTradeDay.record_data(provider='tonglian', sleeping_time=1) # 日线前复权和后复权数据 Stock1dKdata.record_data(provider='tonglian', sleeping_time=1) Stock1dHfqKdata.record_data(provider='tonglian', sleeping_time=1) # 周线前复权和后复权数据 Stock1wkKdata.record_data(provider='tonglian', sleeping_time=1) Stock1wkHfqKdata.record_data(provider='tonglian', sleeping_time=1) # 个股估值数据 StockValuation.record_data(provider='tonglian', sleeping_time=1) email_action.send_message("*****@*****.**", 'tonglian record kdata finished', '') break except Exception as e: msg = f'tonglian record kdata:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'tonglian record kdata error', msg) time.sleep(60)
def report_block(): while True: error_count = 0 email_action = EmailInformer(ssl=True) try: latest_day: BlockMoneyFlow = BlockMoneyFlow.query_data( order=BlockMoneyFlow.timestamp.desc(), limit=1, return_type='domain') target_date = latest_day[0].timestamp msg = '' # 行业板块 industry_block_selector = IndustryBlockSelector( start_timestamp='2020-01-01', long_threshold=0.8) industry_block_selector.run() industry_long_blocks = industry_block_selector.get_open_long_targets( timestamp=target_date) if industry_long_blocks: blocks: List[Block] = Block.query_data( provider='sina', entity_ids=industry_long_blocks, return_type='domain') info = [f'{block.name}({block.code})' for block in blocks] msg = msg + '行业板块:' + ' '.join(info) + '\n' # 概念板块 concept_block_selector = ConceptBlockSelector( start_timestamp='2020-01-01', long_threshold=0.85) concept_block_selector.run() concept_long_blocks = concept_block_selector.get_open_long_targets( timestamp=target_date) if concept_long_blocks: blocks: List[Block] = Block.query_data( provider='sina', entity_ids=concept_long_blocks, return_type='domain') info = [f'{block.name}({block.code})' for block in blocks] msg = msg + '概念板块' + ' '.join(info) + '\n' logger.info(msg) email_action.send_message('*****@*****.**', f'{target_date} 资金流入板块评分结果', msg) break except Exception as e: logger.exception('report_block error:{}'.format(e)) time.sleep(60 * 3) error_count = error_count + 1 if error_count == 10: email_action.send_message("*****@*****.**", f'report_block error', 'report_block error:{}'.format(e))
def report_cross_ma(): while True: error_count = 0 email_action = EmailInformer() try: # 抓取k线数据 # StockTradeDay.record_data(provider='joinquant') # Stock1dKdata.record_data(provider='joinquant') latest_day: StockTradeDay = StockTradeDay.query_data( order=StockTradeDay.timestamp.desc(), limit=1, return_type='domain') if latest_day: target_date = latest_day[0].timestamp else: target_date = now_pd_timestamp() # 计算均线 my_selector = TargetSelector(start_timestamp='2018-01-01', end_timestamp=target_date) # add the factors ma_factor = CrossMaFactor(start_timestamp='2018-01-01', end_timestamp=target_date) my_selector.add_filter_factor(ma_factor) my_selector.run() long_targets = my_selector.get_open_long_targets( timestamp=target_date) if long_targets: stocks = get_entities(provider='joinquant', entity_schema=Stock, entity_ids=long_targets, return_type='domain') info = [f'{stock.name}({stock.code})' for stock in stocks] msg = ' '.join(info) else: msg = 'no targets' logger.info(msg) email_action.send_message("*****@*****.**", f'{target_date} 均线选股结果', msg) break except Exception as e: logger.exception('report_cross_ma error:{}'.format(e)) time.sleep(60 * 3) error_count = error_count + 1 if error_count == 10: email_action.send_message("*****@*****.**", f'report_cross_ma error', 'report_cross_ma error:{}'.format(e))
def record_kdata(): while True: email_action = EmailInformer() try: # Stock.record_data(provider='joinquant', sleeping_time=1) # StockDetail.record_data(provider='eastmoney',sleeping_time=1) # Stock1dKdata.record_data(provider='joinquant', sleeping_time=1) # 前复权 BalanceSheet.record_data(provider='joinquant', sleeping_time=1) # Index1dKdata.record_data(provider='joinquant',sleeping_time=1) # Index1monKdata.record_data(codes=['000001'],provider='joinquant' ,sleeping_time=1,real_time=True) # 前复权 # Index1wkKdata.record_data(codes=['000001'],provider='joinquant' ,sleeping_time=1) # 前复权 # Stock1dBfqKdata.record_data(codes=['000852'],provider='joinquant' ,sleeping_time=1) # 不复权 # Stock1monBfqKdata.record_data(codes=['000852'],provider='joinquant' ,sleeping_time=1) # 不复权 # StockValuation.record_data(provider='joinquant', sleeping_time=1) # Stock1dHfqKdata.record_data(codes=['000852'],provider='joinquant', sleeping_time=1) # 后复权 # IncomeStatement.record_data(codes=['000852'],provider='joinquant',sleeping_time=1) # CashFlowStatement.record_data(codes=['000852'],provider='joinquant',sleeping_time=1) # StockTradeDay.record_data(provider='joinquant', sleeping_time=1) # Stock1wkKdata.record_data(codes=['000852'],provider='joinquant', sleeping_time=1) # Stock1wkHfqKdata.record_data(codes=['000852'],provider='joinquant', sleeping_time=1) # Stock1wkBfqKdata.record_data(codes=['000852'],provider='joinquant', sleeping_time=1) # 不复权 # HolderTrading.record_data(codes=['000852'],provider='joinquant', sleeping_time=1) # email_action.send_message("*****@*****.**", 'joinquant record kdata finished', '') # Etf.record_data(provider='joinquant', sleeping_time=1) # Fund.record_data(provider='joinquant', sleeping_time=1) # EtfStock.record_data(provider='joinquant', sleeping_time=1) # FundDetail.record_data(provider='joinquant', sleeping_time=0.5) # FundStock.record_data(provider='joinquant', sleeping_time=1) # FundNetValue.record_data(codes=['150008'],provider='joinquant', sleeping_time=1) # Etf1dKdata.record_data(codes=['050002'],provider='joinquant', sleeping_time=1) # Etf1dBfqKdata.record_data(codes=['512290'],provider='joinquant', sleeping_time=1) # Etf1dHfqKdata.record_data(codes=['512290'],provider='joinquant', sleeping_time=1) # DividendDetail.record_data(codes=['000852'],provider='emquantapi', sleeping_time=1) # RightsIssueDetail.record_data(codes=['000852'],provider='emquantapi', sleeping_time=1) break except Exception as e: msg = f'joinquant record kdata:{e}' logger.exception(msg) # email_action.send_message("*****@*****.**", 'joinquant record kdata error', msg) time.sleep(60)
def record_dkdata(): while True: email_action = EmailInformer() try: # 日线前复权和后复权数据 Stock1dKdata.record_data(provider='joinquant', sleeping_time=1) # Stock1dHfqKdata.record_data(provider='joinquant', sleeping_time=1) # email_action.send_message("*****@*****.**", 'joinquant record kdata finished', '') break except Exception as e: msg = f'joinquant record kdata:{e}' logger.exception(msg) # email_action.send_message("*****@*****.**", 'joinquant record kdata error', msg) time.sleep(60)
def report_core_company(): while True: error_count = 0 email_action = EmailInformer() try: StockTradeDay.record_data(provider='joinquant') Stock.record_data(provider='joinquant') FinanceFactor.record_data(provider='eastmoney') BalanceSheet.record_data(provider='eastmoney') latest_day: StockTradeDay = StockTradeDay.query_data( order=StockTradeDay.timestamp.desc(), limit=1, return_type='domain') if latest_day: target_date = latest_day[0].timestamp else: target_date = now_pd_timestamp() my_selector: TargetSelector = FundamentalSelector( start_timestamp='2015-01-01', end_timestamp=target_date) my_selector.run() long_targets = my_selector.get_open_long_targets( timestamp=target_date) if long_targets: stocks = get_entities(provider='joinquant', entity_schema=Stock, entity_ids=long_targets, return_type='domain') info = [f'{stock.name}({stock.code})' for stock in stocks] msg = ' '.join(info) else: msg = 'no targets' logger.info(msg) email_action.send_message([ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ], f'{to_time_str(target_date)} 核心资产选股结果', msg) break except Exception as e: logger.exception('report_core_company error:{}'.format(e)) time.sleep(60 * 3) error_count = error_count + 1 if error_count == 10: email_action.send_message( "*****@*****.**", f'report_core_company error', 'report_core_company error:{}'.format(e))
def record_margin_trading(): email_action = EmailInformer() try: MarginTrading.record_data(provider='joinquant', sleeping_time=1) email_action.send_message("*****@*****.**", 'joinquant record margin trading finished', '') except Exception as e: msg = f'joinquant record margin trading:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'joinquant record week kdata error', msg) time.sleep(60)
def record_margin_trading(): email_action = EmailInformer() try: MarginTrading.record_data(provider='joinquant', sleeping_time=1) email_action.send_message(zvt_config['email_username'], 'joinquant record margin trading finished', '') except Exception as e: msg = f'joinquant record margin trading:{e}' logger.exception(msg) email_action.send_message(zvt_config['email_username'], 'joinquant record margin trading error', msg) time.sleep(60)
def record_valuation(): while True: email_action = EmailInformer() try: StockValuation.record_data(provider='joinquant', sleeping_time=0, day_data=True) email_action.send_message(zvt_config['email_username'], 'joinquant record valuation finished', '') break except Exception as e: msg = f'joinquant record valuation error:{e}' logger.exception(msg) email_action.send_message(zvt_config['email_username'], 'joinquant record valuation error', msg) time.sleep(60)
def record_others(): while True: email_action = EmailInformer() try: Etf.record_data(provider='joinquant', sleeping_time=1) EtfStock.record_data(provider='joinquant', sleeping_time=1) email_action.send_message("*****@*****.**", 'joinquant record etf finished', '') break except Exception as e: msg = f'joinquant record etf error:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'joinquant record etf error', msg) time.sleep(60)
def record_block(): while True: email_action = EmailInformer() try: Block.record_data(provider='eastmoney', force_update=False) # 只抓取概念行情 df = Block.query_data(filters=[Block.category == BlockCategory.concept.value], index='entity_id') entity_ids = df.index.tolist() Block1dKdata.record_data(provider='em', entity_ids=entity_ids) # 报告新概念 list_date = next_date(current_date(), -90) df = Block.query_data(filters=[Block.category == BlockCategory.concept.value, Block.list_date >= list_date], index='entity_id') # add them to eastmoney try: try: eastmoneypy.create_group('概念') except: pass for code in df['code']: eastmoneypy.add_to_group(code, group_name='概念', entity_type='block') except Exception as e: email_action.send_message(zvt_config['email_username'], f'report_concept error', 'report_concept error:{}'.format(e)) email_action.send_message(zvt_config['email_username'], 'record block finished', '') break except Exception as e: msg = f'record block error:{e}' logger.exception(msg) email_action.send_message(zvt_config['email_username'], 'record block error', msg) time.sleep(60)
def record_index_kdata(): while True: email_action = EmailInformer() try: # 指数k线 Index1dKdata.record_data(provider='em', codes=IMPORTANT_INDEX) email_action.send_message(zvt_config['email_username'], 'record index kdata finished', '') break except Exception as e: msg = f'record index kdata error:{e}' logger.exception(msg) email_action.send_message(zvt_config['email_username'], 'record index kdata error', msg) time.sleep(60)
def record_money_flow(): while True: email_action = EmailInformer() try: BlockMoneyFlow.record_data(provider='sina') email_action.send_message(zvt_config['email_username'], 'sina money flow finished', '') break except Exception as e: msg = f'sina money flow error:{e}' logger.exception(msg) email_action.send_message(zvt_config['email_username'], 'sina money flow error', msg) time.sleep(60)
def run(): while True: email_action = EmailInformer() try: StockInstitutionalInvestorHolder.record_data(provider='em') StockTopTenFreeHolder.record_data(provider='em') email_action.send_message("*****@*****.**", 'em runner finished', '') break except Exception as e: msg = f'eastmoney runner1 error:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'em runner error', msg) time.sleep(60)
def run(): while True: email_action = EmailInformer() try: Block.record_data(provider='sina') BlockStock.record_data(provider='sina') BlockMoneyFlow.record_data(provider='sina') email_action.send_message("*****@*****.**", 'sina runner finished', '') break except Exception as e: msg = f'sina runner error:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'sina runner error', msg) time.sleep(60)
def run(): while True: email_action = EmailInformer() try: Stock.record_data(provider='eastmoney') FinanceFactor.record_data(provider='eastmoney') BalanceSheet.record_data(provider='eastmoney') IncomeStatement.record_data(provider='eastmoney') CashFlowStatement.record_data(provider='eastmoney') email_action.send_message("*****@*****.**", 'eastmoney recorder1 finished', '') break except Exception as e: msg = f'eastmoney recorder error:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'eastmoney recorder1 error', msg) time.sleep(60)
def record_fund(): while True: email_action = EmailInformer() try: # 基金和基金持仓数据 Fund.record_data(provider='joinquant', sleeping_time=1) FundStock.record_data(provider='joinquant', sleeping_time=1) # 股票周线后复权数据 Stock1wkHfqKdata.record_data(provider='joinquant', sleeping_time=0) email_action.send_message(zvt_config['email_username'], 'joinquant record fund finished', '') break except Exception as e: msg = f'joinquant record fund error:{e}' logger.exception(msg) email_action.send_message(zvt_config['email_username'], 'joinquant record fund error', msg) time.sleep(60)
def record_valuation(): while True: email_action = EmailInformer() try: # 个股估值数据 StockValuation.record_data(provider='joinquant', sleeping_time=1) email_action.send_message("*****@*****.**", 'joinquant record valuation finished', '') break except Exception as e: msg = f'joinquant record kdata:{e}' logger.exception(msg) email_action.send_message("*****@*****.**", 'joinquant record valuation error', msg) time.sleep(60)
def run(): while True: email_action = EmailInformer() try: # DividendFinancing.record_data(provider='eastmoney') # HolderTrading.record_data(provider='eastmoney') # ManagerTrading.record_data(provider='eastmoney') TopTenHolder.record_data(provider='eastmoney') TopTenTradableHolder.record_data(provider='eastmoney') email_action.send_message(zvt_config['email_username'], 'eastmoney runner2 finished', '') break except Exception as e: msg = f'eastmoney runner2 error:{e}' logger.exception(msg) email_action.send_message(zvt_config['email_username'], 'eastmoney runner2 error', msg) time.sleep(60)