Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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))
Exemplo n.º 7
0
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))
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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))
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
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)
                )
Exemplo n.º 12
0
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)
Exemplo n.º 13
0
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))
Exemplo n.º 14
0
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))
Exemplo n.º 15
0
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)
Exemplo n.º 16
0
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)
Exemplo n.º 17
0
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))
Exemplo n.º 18
0
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)
Exemplo n.º 19
0
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)
Exemplo n.º 20
0
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)
Exemplo n.º 21
0
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)
Exemplo n.º 22
0
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)
Exemplo n.º 23
0
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)
Exemplo n.º 24
0
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)
Exemplo n.º 25
0
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)
Exemplo n.º 26
0
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)
Exemplo n.º 27
0
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)
Exemplo n.º 28
0
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)
Exemplo n.º 29
0
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)
Exemplo n.º 30
0
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)