mns-scheduler 1.3.6.0__tar.gz → 1.4.1.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mns_scheduler-1.4.1.5/PKG-INFO +3 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/base/sync_company_base_info_api.py +82 -8
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/base/sync_company_hold_info_api.py +2 -5
- mns_scheduler-1.4.1.5/mns_scheduler/company_info/base/sync_company_product_area_industry.py +161 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/constant/company_constant_data.py +3 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +27 -27
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +4 -5
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/irm/stock_irm_cninfo_service.py +3 -2
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +3 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +4 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +17 -4
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zz_task/data_sync_task.py +14 -4
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5/mns_scheduler.egg-info}/PKG-INFO +1 -1
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler.egg-info/SOURCES.txt +0 -2
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/setup.py +2 -2
- mns-scheduler-1.3.6.0/mns_scheduler/company_info/base/sync_company_product_area_industry.py +0 -62
- mns-scheduler-1.3.6.0/mns_scheduler/debt/kzz_bond_info_sync.py +0 -33
- mns-scheduler-1.3.6.0/mns_scheduler/zz_task/__init__.py +0 -7
- mns-scheduler-1.3.6.0/mns_scheduler.egg-info/PKG-INFO +0 -3
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/README.md +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/announce/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/announce/company_announce_sync_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/base/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/clean/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/clean/company_info_clean_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/constant/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/de_list_stock/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/em_stock_info/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/remark/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/clean/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/clean/kpl_concept_clean_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/clean/ths_concept_clean_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/common/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/detaill/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/sync_new_index/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/update_concept_info/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/col_move_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/db_status.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/col_move_script.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/db_move/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/db_move/col_move_one_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/local_mongo_util.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/remote_data_sync_to_local.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/remote_mongo_util.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/update/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/update/update_col_field.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/debt → mns_scheduler-1.4.1.5/mns_scheduler/dt}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/dt/stock_dt_pool_sync.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/dt → mns_scheduler-1.4.1.5/mns_scheduler/finance}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/finance/em/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/finance/em/em_financial_asset_liability_sync_service_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/finance/em/em_financial_profit_sync_service_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/finance/em/finance_common_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/finance/sync_financial_report_service_task.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/finance/xue_qiu/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/finance → mns_scheduler-1.4.1.5/mns_scheduler/hk}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/hk/hk_company_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/hk/hk_industry_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/hk → mns_scheduler-1.4.1.5/mns_scheduler/industry}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/industry → mns_scheduler-1.4.1.5/mns_scheduler/industry/ths}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/industry/ths/ths_industry_index_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/industry/ths/ths_industry_sync_service.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/industry/ths → mns_scheduler-1.4.1.5/mns_scheduler/irm}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/irm → mns_scheduler-1.4.1.5/mns_scheduler/irm/api}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/__init__.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/irm/api → mns_scheduler-1.4.1.5/mns_scheduler/k_line/clean}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/k_line/clean → mns_scheduler-1.4.1.5/mns_scheduler/k_line/clean/daily}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/daily/daily_k_line_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/k_line_info_clean_impl.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/k_line_info_clean_task.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/k_line/clean/daily → mns_scheduler-1.4.1.5/mns_scheduler/k_line/clean/week_month}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/common/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/common/k_line_common_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/k_line/clean/week_month → mns_scheduler-1.4.1.5/mns_scheduler/k_line/hot_stocks}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/month_week_daily/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/month_week_daily/daily_week_month_line_sync.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/sync_status/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/k_line/hot_stocks → mns_scheduler-1.4.1.5/mns_scheduler/k_line/test}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/test/k_line_info_clean_his_data.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/k_line/test → mns_scheduler-1.4.1.5/mns_scheduler/k_line/year_quarter}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/k_line/year_quarter → mns_scheduler-1.4.1.5/mns_scheduler/kpl}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/kpl → mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/kpl/selection → mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection/index}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/index/sync_best_choose_his_index.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/index/sync_best_choose_index.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/kpl/selection/index → mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection/symbol}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/kpl/selection/symbol → mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection/total}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/kpl/selection/total → mns_scheduler-1.4.1.5/mns_scheduler/lhb}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/lhb/stock_lhb_sync_service.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/lhb → mns_scheduler-1.4.1.5/mns_scheduler/open}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/open/sync_one_day_open_data_to_db_service.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/open → mns_scheduler-1.4.1.5/mns_scheduler/risk}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/compliance/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/annual_report_audit_check_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/net_assets_check_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/profit_income_check_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial_report_risk_check_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/major_violations/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/self/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/self/wei_pan_stock_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/risk → mns_scheduler-1.4.1.5/mns_scheduler/risk/test}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/test/fix_blask_list.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/transactions/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/transactions/transactions_check_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/risk/test → mns_scheduler-1.4.1.5/mns_scheduler/self_choose}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/self_choose/ths_self_choose_service.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/self_choose → mns_scheduler-1.4.1.5/mns_scheduler/trade}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/auto_ipo_buy_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/trade → mns_scheduler-1.4.1.5/mns_scheduler/trade/auto_login}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/auto_login/trader_auto_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/auto_sell_service_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/trade/auto_login → mns_scheduler-1.4.1.5/mns_scheduler/trade/balance}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/balance/ths_account_balance_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/sync_position_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/trade/balance → mns_scheduler-1.4.1.5/mns_scheduler/trade/task}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/task/trader_task_service.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/trade/task → mns_scheduler-1.4.1.5/mns_scheduler/trade/tfp}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/tfp/stock_tfp_info_sync.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zb/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zb/stock_zb_pool_sync.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/connected_boards/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/connected_boards/zt_five_boards_sync_api.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/export/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/export/export_kcx_high_chg_open_data_to_excel.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/trade/tfp → mns_scheduler-1.4.1.5/mns_scheduler/zt/high_chg}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/open_data/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/open_data/kcx_high_chg_open_data_sync.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/zt/high_chg → mns_scheduler-1.4.1.5/mns_scheduler/zt/script}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/script/fix_error_deal_day.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/script/sync_now_higt_chg_zt.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +0 -0
- {mns-scheduler-1.3.6.0/mns_scheduler/zt/script → mns_scheduler-1.4.1.5/mns_scheduler/zz_task}/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zz_task/compensation/__init__.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zz_task/compensation/compensate_task.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zz_task/compensation/compensate_task_one_day.py +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler.egg-info/dependency_links.txt +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler.egg-info/top_level.txt +0 -0
- {mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/setup.cfg +0 -0
|
@@ -37,25 +37,92 @@ result = []
|
|
|
37
37
|
# 计算实际流通比例
|
|
38
38
|
def calculate_circulation_ratio(symbol):
|
|
39
39
|
query = {"symbol": symbol}
|
|
40
|
-
|
|
41
|
-
if
|
|
40
|
+
stock_gdfx_free_top_1 = mongodb_util.descend_query(query, 'stock_gdfx_free_top_10', "period", 1)
|
|
41
|
+
if stock_gdfx_free_top_1.shape[0] == 0:
|
|
42
42
|
mv_circulation_ratio = 1
|
|
43
43
|
else:
|
|
44
|
+
period_time = list(stock_gdfx_free_top_1['period'])[0]
|
|
45
|
+
|
|
46
|
+
query_free = {'symbol': symbol, 'period': period_time}
|
|
47
|
+
stock_gdfx_free_top_10 = mongodb_util.find_query_data('stock_gdfx_free_top_10', query_free)
|
|
48
|
+
|
|
49
|
+
stock_gdfx_free_top_10['shares_number_str'] = stock_gdfx_free_top_10['shares_number'].astype(str)
|
|
50
|
+
|
|
51
|
+
stock_gdfx_free_top_10['id_key'] = stock_gdfx_free_top_10['symbol'] + '_' + stock_gdfx_free_top_10[
|
|
52
|
+
'period'] + '_' + stock_gdfx_free_top_10.shares_number_str
|
|
53
|
+
|
|
54
|
+
stock_gdfx_free_top_10.drop_duplicates('id_key', keep='last', inplace=True)
|
|
55
|
+
|
|
44
56
|
# 排除香港结算公司 大于5%减持不用发公告 香港中央结算 HKSCC
|
|
45
57
|
stock_gdfx_free_top_10['is_hk'] = stock_gdfx_free_top_10['shareholder_name'].apply(
|
|
46
58
|
lambda shareholder_name: "HK" if shareholder_name.startswith('香港中央结算') or shareholder_name.startswith(
|
|
47
59
|
'HKSCC') else "A")
|
|
48
60
|
|
|
49
|
-
# 持股大于5%
|
|
50
|
-
|
|
61
|
+
# 持股大于5% 减持需要发公告
|
|
62
|
+
# 排除香港结算公司不发公共 小于5%减持不用发公告
|
|
63
|
+
# 香港中央结算 HKSCC
|
|
64
|
+
stock_free_top_greater_than_5 = stock_gdfx_free_top_10.loc[
|
|
51
65
|
(stock_gdfx_free_top_10['circulation_ratio'] >= 5) & (stock_gdfx_free_top_10['is_hk'] == 'A')]
|
|
52
66
|
|
|
53
|
-
|
|
67
|
+
stock_free_qfii = stock_gdfx_free_top_10.loc[stock_gdfx_free_top_10['shareholder_nature'] == 'QFII']
|
|
68
|
+
|
|
69
|
+
share_holder_sync_day = list(stock_gdfx_free_top_10['create_day'])[0]
|
|
70
|
+
|
|
71
|
+
# qfii 数量
|
|
72
|
+
qfii_number = stock_free_qfii.shape[0]
|
|
73
|
+
# qfii 类型
|
|
74
|
+
qfii_type = set_qfii_type(qfii_number, stock_free_qfii.copy())
|
|
75
|
+
|
|
76
|
+
circulation_ratio = sum(stock_free_top_greater_than_5['circulation_ratio'])
|
|
54
77
|
mv_circulation_ratio = round((100 - circulation_ratio) / 100, 2)
|
|
55
78
|
# 防止错误数据
|
|
56
79
|
if mv_circulation_ratio < 0:
|
|
57
80
|
mv_circulation_ratio = 1
|
|
58
|
-
|
|
81
|
+
|
|
82
|
+
result_dict = {
|
|
83
|
+
'mv_circulation_ratio': mv_circulation_ratio,
|
|
84
|
+
'qfii_type': qfii_type,
|
|
85
|
+
'qfii_number': qfii_number,
|
|
86
|
+
'share_holder_sync_day': share_holder_sync_day
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
return result_dict
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def set_qfii_type(qfii_number, stock_free_qfii):
|
|
93
|
+
if qfii_number > 0:
|
|
94
|
+
stock_free_qfii['new_change'] = stock_free_qfii['change']
|
|
95
|
+
stock_free_qfii.loc[stock_free_qfii['change_ratio'] == 0, 'new_change'] = 0
|
|
96
|
+
stock_free_qfii.loc[stock_free_qfii['change'] == '新进', 'new_change'] = \
|
|
97
|
+
stock_free_qfii['shares_number']
|
|
98
|
+
stock_free_qfii['new_change'] = stock_free_qfii['new_change'].astype(float)
|
|
99
|
+
|
|
100
|
+
stock_free_qfii_new_in = stock_free_qfii.loc[stock_free_qfii['change'] == '新进']
|
|
101
|
+
if data_frame_util.is_not_empty(stock_free_qfii_new_in):
|
|
102
|
+
qfii_type = 1
|
|
103
|
+
return qfii_type
|
|
104
|
+
|
|
105
|
+
stock_free_qfii_add = stock_free_qfii.loc[
|
|
106
|
+
(~stock_free_qfii['change'].isin(['不变', '新进'])) & (stock_free_qfii['new_change'] > 0)]
|
|
107
|
+
|
|
108
|
+
if data_frame_util.is_not_empty(stock_free_qfii_add):
|
|
109
|
+
qfii_type = 2
|
|
110
|
+
return qfii_type
|
|
111
|
+
|
|
112
|
+
stock_free_qfii_not_change = stock_free_qfii.loc[stock_free_qfii['change'] == '不变']
|
|
113
|
+
|
|
114
|
+
if data_frame_util.is_not_empty(stock_free_qfii_not_change):
|
|
115
|
+
qfii_type = 3
|
|
116
|
+
return qfii_type
|
|
117
|
+
|
|
118
|
+
stock_free_qfii_reduce = stock_free_qfii.loc[
|
|
119
|
+
(~stock_free_qfii['change'].isin(['不变', '新进'])) & (stock_free_qfii['new_change'] < 0)]
|
|
120
|
+
|
|
121
|
+
if data_frame_util.is_not_empty(stock_free_qfii_reduce):
|
|
122
|
+
qfii_type = 4
|
|
123
|
+
return qfii_type
|
|
124
|
+
else:
|
|
125
|
+
return 0
|
|
59
126
|
|
|
60
127
|
|
|
61
128
|
def get_east_money_stock_info():
|
|
@@ -201,7 +268,13 @@ def single_thread_sync_company_info(east_money_stock_info,
|
|
|
201
268
|
company_info_type['total_mv_sp'] = company_one.total_mv_sp
|
|
202
269
|
company_info_type['flow_mv_level'] = company_one.flow_mv_level
|
|
203
270
|
company_info_type['classification'] = company_one.classification
|
|
204
|
-
|
|
271
|
+
|
|
272
|
+
result_dict = calculate_circulation_ratio(company_one.symbol)
|
|
273
|
+
company_info_type['mv_circulation_ratio'] = result_dict['mv_circulation_ratio']
|
|
274
|
+
company_info_type['qfii_type'] = result_dict['qfii_type']
|
|
275
|
+
company_info_type['qfii_number'] = result_dict['qfii_number']
|
|
276
|
+
company_info_type['share_holder_sync_day'] = result_dict['share_holder_sync_day']
|
|
277
|
+
|
|
205
278
|
# 获取同花顺最新概念
|
|
206
279
|
company_info_type = ths_concept_common_service_api.set_ths_concept(company_one.symbol, company_info_type)
|
|
207
280
|
now_date = datetime.now()
|
|
@@ -445,4 +518,5 @@ if __name__ == '__main__':
|
|
|
445
518
|
# un_report_company_info = mongodb_util.find_query_data(db_name_constant.COMPANY_INFO, query)
|
|
446
519
|
# symbol_list = list(un_report_company_info['symbol'])
|
|
447
520
|
sync_company_base_info(None)
|
|
448
|
-
|
|
521
|
+
sync_company_base_info(['688211', '601600', '920821', '920579', '688371', '920367'])
|
|
522
|
+
|
|
@@ -27,11 +27,8 @@ def sync_company_hold_info(symbol):
|
|
|
27
27
|
now_date = datetime.now()
|
|
28
28
|
sync_str_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
29
29
|
if data_frame_util.is_not_empty(company_hold_info_df):
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if result.acknowledged:
|
|
33
|
-
company_hold_info_df['sync_str_date'] = sync_str_date
|
|
34
|
-
mongodb_util.insert_mongo(company_hold_info_df, db_name_constant.COMPANY_HOLDING_INFO)
|
|
30
|
+
company_hold_info_df['sync_str_date'] = sync_str_date
|
|
31
|
+
mongodb_util.insert_mongo(company_hold_info_df, db_name_constant.COMPANY_HOLDING_INFO)
|
|
35
32
|
except BaseException as e:
|
|
36
33
|
logger.error("同步公司控股子公司信息:{},{}", symbol, e)
|
|
37
34
|
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
9
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
10
|
+
import mns_common.api.ths.company.company_product_area_industry_index_query as company_product_area_industry_index_query
|
|
11
|
+
from loguru import logger
|
|
12
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
14
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
15
|
+
import pandas as pd
|
|
16
|
+
from datetime import datetime
|
|
17
|
+
|
|
18
|
+
mongodb_util = MongodbUtil('27017')
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def sync_company_product_area_industry_task(symbol):
|
|
22
|
+
now_date = datetime.now()
|
|
23
|
+
now_year = now_date.year
|
|
24
|
+
now_month = now_date.month
|
|
25
|
+
|
|
26
|
+
if now_month in [1, 2, 3, 4]:
|
|
27
|
+
period_time_year = str(now_year - 1) + "-12-31"
|
|
28
|
+
sync_company_product_area_industry(symbol, period_time_year)
|
|
29
|
+
|
|
30
|
+
if now_month in [4, 5, 6]:
|
|
31
|
+
period_time_one = str(now_year) + "-03-31"
|
|
32
|
+
sync_company_product_area_industry(symbol, period_time_one)
|
|
33
|
+
|
|
34
|
+
elif now_month in [7, 8, 9]:
|
|
35
|
+
period_time_two = str(now_year) + "-06-30"
|
|
36
|
+
sync_company_product_area_industry(symbol, period_time_two)
|
|
37
|
+
|
|
38
|
+
elif now_month in [10, 11, 12]:
|
|
39
|
+
period_time_three = str(now_year) + "-09-30"
|
|
40
|
+
sync_company_product_area_industry(symbol, period_time_three)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def sync_company_product_area_industry(symbol, date):
|
|
44
|
+
real_time_quotes_all_stocks = em_stock_info_api.get_a_stock_info()
|
|
45
|
+
real_time_quotes_all_stocks = common_service_fun_api.classify_symbol(real_time_quotes_all_stocks)
|
|
46
|
+
if symbol is not None:
|
|
47
|
+
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[real_time_quotes_all_stocks['symbol'] == symbol]
|
|
48
|
+
for stock_one in real_time_quotes_all_stocks.itertuples():
|
|
49
|
+
try:
|
|
50
|
+
symbol = stock_one.symbol
|
|
51
|
+
|
|
52
|
+
classification = stock_one.classification
|
|
53
|
+
if classification in ['H', 'K']:
|
|
54
|
+
market = '17'
|
|
55
|
+
elif classification in ['S', 'C']:
|
|
56
|
+
market = '33'
|
|
57
|
+
elif classification in ['X']:
|
|
58
|
+
market = '151'
|
|
59
|
+
|
|
60
|
+
company_product_area_industry_list = company_product_area_industry_index_query.company_product_area_industry(
|
|
61
|
+
symbol, market, date)
|
|
62
|
+
for company_one in company_product_area_industry_list:
|
|
63
|
+
try:
|
|
64
|
+
analysis_type = company_one['analysis_type']
|
|
65
|
+
time_operate_index_item_list = company_one['time_operate_index_item_list']
|
|
66
|
+
time_operate_index_item_df = pd.DataFrame(time_operate_index_item_list)
|
|
67
|
+
if data_frame_util.is_empty(time_operate_index_item_df):
|
|
68
|
+
continue
|
|
69
|
+
time_operate_index_item_df['symbol'] = symbol
|
|
70
|
+
time_operate_index_item_df['analysis_type'] = analysis_type
|
|
71
|
+
|
|
72
|
+
time_operate_index_item_df['_id'] = symbol + '_' + time_operate_index_item_df[
|
|
73
|
+
'time'] + '_' + analysis_type
|
|
74
|
+
handle_industry_area_product(time_operate_index_item_df, symbol)
|
|
75
|
+
except BaseException as e:
|
|
76
|
+
logger.error("同步经营数据异常:{},{}", symbol, e)
|
|
77
|
+
|
|
78
|
+
logger.info("同步经营数据完成:{}", stock_one.symbol)
|
|
79
|
+
except BaseException as e:
|
|
80
|
+
logger.error("同步经营数据:{},{}", stock_one.symbol, e)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def handle_industry_area_product(time_operate_index_item_df, symbol):
|
|
84
|
+
if data_frame_util.is_empty(time_operate_index_item_df):
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
for business_one in time_operate_index_item_df.itertuples():
|
|
88
|
+
time = business_one.time
|
|
89
|
+
analysis_type = business_one.analysis_type
|
|
90
|
+
|
|
91
|
+
product_index_item_list = business_one.product_index_item_list
|
|
92
|
+
for product_one in product_index_item_list:
|
|
93
|
+
try:
|
|
94
|
+
# 初始化数据
|
|
95
|
+
income_amount = 0
|
|
96
|
+
income_percent = 0
|
|
97
|
+
cost_amount = 0
|
|
98
|
+
cost_percent = 0
|
|
99
|
+
gross_profit_amount = 0
|
|
100
|
+
gross_profit_percent = 0
|
|
101
|
+
gross_profit_rate_amount = 0
|
|
102
|
+
gross_profit_rate_percent = 0
|
|
103
|
+
|
|
104
|
+
product_name = product_one['product_name']
|
|
105
|
+
index_analysis_list = product_one['index_analysis_list']
|
|
106
|
+
for index_one in index_analysis_list:
|
|
107
|
+
try:
|
|
108
|
+
index_id = index_one['index_id']
|
|
109
|
+
if index_id == 'income':
|
|
110
|
+
income_amount = index_one['index_value']
|
|
111
|
+
income_percent = index_one['account']
|
|
112
|
+
elif index_id == 'cost':
|
|
113
|
+
cost_amount = index_one['index_value']
|
|
114
|
+
cost_percent = index_one['account']
|
|
115
|
+
elif index_id == 'gross_profit':
|
|
116
|
+
gross_profit_amount = index_one['index_value']
|
|
117
|
+
gross_profit_percent = index_one['account']
|
|
118
|
+
|
|
119
|
+
elif index_id == 'gross_profit_rate':
|
|
120
|
+
gross_profit_rate_amount = index_one['index_value']
|
|
121
|
+
gross_profit_rate_percent = index_one['account']
|
|
122
|
+
except BaseException as e:
|
|
123
|
+
logger.error("同步经营数据异常:{},{}", symbol, e)
|
|
124
|
+
|
|
125
|
+
id_key = symbol + '_' + time + '_' + analysis_type + '_' + product_name
|
|
126
|
+
result_dict = {
|
|
127
|
+
'_id': id_key,
|
|
128
|
+
'symbol': symbol,
|
|
129
|
+
'time': time,
|
|
130
|
+
'analysis_type': analysis_type,
|
|
131
|
+
'product_name': product_name,
|
|
132
|
+
|
|
133
|
+
'income_amount': income_amount,
|
|
134
|
+
'income_percent': income_percent,
|
|
135
|
+
|
|
136
|
+
'cost_amount': cost_amount,
|
|
137
|
+
'cost_percent': cost_percent,
|
|
138
|
+
|
|
139
|
+
'gross_profit_amount': gross_profit_amount,
|
|
140
|
+
'gross_profit_percent': gross_profit_percent,
|
|
141
|
+
|
|
142
|
+
'gross_profit_rate_amount': gross_profit_rate_amount,
|
|
143
|
+
'gross_profit_rate_percent': gross_profit_rate_percent,
|
|
144
|
+
}
|
|
145
|
+
result_dict_df = pd.DataFrame(result_dict, index=[1])
|
|
146
|
+
mongodb_util.save_mongo(result_dict_df, db_name_constant.COMPANY_BUSINESS_INFO)
|
|
147
|
+
except BaseException as e:
|
|
148
|
+
logger.error("同步经营数据异常:{},{}", symbol, e)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
if __name__ == '__main__':
|
|
152
|
+
sync_company_product_area_industry('300211', '2025-09-30')
|
|
153
|
+
# sync_company_product_area_industry('002323')
|
|
154
|
+
# sync_company_product_area_industry('300901')
|
|
155
|
+
# sync_company_product_area_industry('603225')
|
|
156
|
+
# sync_company_product_area_industry('688039')
|
|
157
|
+
# sync_company_product_area_industry('600849')
|
|
158
|
+
# sync_company_product_area_industry('000508')
|
|
159
|
+
# sync_company_product_area_industry('810011')
|
|
160
|
+
|
|
161
|
+
sync_company_product_area_industry(None, None)
|
|
@@ -6,12 +6,14 @@ end = file_path.index('mns') + 17
|
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
|
|
9
|
-
import mns_common.
|
|
9
|
+
import mns_common.api.akshare.stock_zb_pool as stock_zb_pool
|
|
10
10
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
11
11
|
from loguru import logger
|
|
12
|
-
import mns_common.api.em.real_time.
|
|
12
|
+
import mns_common.api.em.real_time.real_time_quotes_repeat_api as real_time_quotes_repeat_api
|
|
13
13
|
import mns_common.api.em.real_time.east_money_debt_api as east_money_debt_api
|
|
14
14
|
import mns_common.api.em.real_time.east_money_etf_api as east_money_etf_api
|
|
15
|
+
import mns_common.api.em.real_time.east_money_stock_a_v2_api as east_money_stock_a_v2_api
|
|
16
|
+
|
|
15
17
|
import mns_common.api.em.real_time.east_money_stock_hk_api as east_money_stock_hk_api
|
|
16
18
|
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
17
19
|
import mns_common.component.cookie.cookie_info_service as cookie_info_service
|
|
@@ -23,49 +25,47 @@ mongodb_util = MongodbUtil('27017')
|
|
|
23
25
|
|
|
24
26
|
def sync_all_em_stock_info():
|
|
25
27
|
logger.info("同步东方财富a,etf,kzz,us,hk,信息开始")
|
|
26
|
-
|
|
27
|
-
proxies = {"https": proxy_ip}
|
|
28
|
+
|
|
28
29
|
try:
|
|
29
30
|
# 这里需要使用详情接口 获取全量数据
|
|
30
|
-
em_a_stock_info_df = east_money_stock_a_v2_api.
|
|
31
|
+
em_a_stock_info_df = east_money_stock_a_v2_api.get_stock_real_time_quotes(10, 10)
|
|
31
32
|
em_a_stock_info_df['_id'] = em_a_stock_info_df['symbol']
|
|
32
33
|
mongodb_util.save_mongo(em_a_stock_info_df, extra_income_db_name.EM_A_STOCK_INFO)
|
|
33
34
|
except BaseException as e:
|
|
34
35
|
logger.error("同步东方财富A股信息异常:{}", e)
|
|
35
36
|
try:
|
|
36
|
-
em_etf_info = east_money_etf_api.get_etf_real_time_quotes(
|
|
37
|
-
em_etf_info['_id'] = em_etf_info['symbol']
|
|
37
|
+
em_etf_info = east_money_etf_api.get_etf_real_time_quotes(30, 6)
|
|
38
38
|
mongodb_util.save_mongo(em_etf_info, extra_income_db_name.EM_ETF_INFO)
|
|
39
39
|
except BaseException as e:
|
|
40
40
|
logger.error("同步东方财富ETF信息异常:{}", e)
|
|
41
41
|
|
|
42
42
|
try:
|
|
43
|
-
em_kzz_info = east_money_debt_api.
|
|
43
|
+
em_kzz_info = east_money_debt_api.get_kzz_real_time_quotes(30, 6)
|
|
44
44
|
|
|
45
45
|
em_kzz_info['_id'] = em_kzz_info['symbol']
|
|
46
46
|
mongodb_util.save_mongo(em_kzz_info, extra_income_db_name.EM_KZZ_INFO)
|
|
47
47
|
except BaseException as e:
|
|
48
48
|
logger.error("同步东方财富可转债信息异常:{}", e)
|
|
49
49
|
|
|
50
|
-
em_cookie = cookie_info_service.get_em_cookie()
|
|
51
|
-
try:
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
except BaseException as e:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
try:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
except BaseException as e:
|
|
68
|
-
|
|
50
|
+
# em_cookie = cookie_info_service.get_em_cookie()
|
|
51
|
+
# try:
|
|
52
|
+
# em_hk_stock_info = east_money_stock_hk_api.get_hk_real_time_quotes(em_cookie, proxies)
|
|
53
|
+
# em_hk_stock_info['_id'] = em_hk_stock_info['symbol']
|
|
54
|
+
# mongodb_util.save_mongo(em_hk_stock_info, extra_income_db_name.EM_HK_STOCK_INFO)
|
|
55
|
+
# except BaseException as e:
|
|
56
|
+
# logger.error("同步东方财富港股信息异常:{}", e)
|
|
57
|
+
#
|
|
58
|
+
# try:
|
|
59
|
+
# em_cookie = cookie_info_service.get_em_cookie()
|
|
60
|
+
# em_us_stock_info = east_money_stock_us_api.get_us_stock_real_time_quotes(em_cookie, proxies)
|
|
61
|
+
# em_us_stock_info['_id'] = em_us_stock_info['symbol']
|
|
62
|
+
# mongodb_util.save_mongo(em_us_stock_info, extra_income_db_name.EM_US_STOCK_INFO)
|
|
63
|
+
# em_us_etf_info = em_us_stock_info.loc[(em_us_stock_info['amount'] != 0) & (em_us_stock_info['total_mv'] == 0)]
|
|
64
|
+
# em_us_etf_info = em_us_etf_info.sort_values(by=['amount'], ascending=False)
|
|
65
|
+
# mongodb_util.save_mongo(em_us_etf_info, extra_income_db_name.EM_US_ETF_INFO)
|
|
66
|
+
#
|
|
67
|
+
# except BaseException as e:
|
|
68
|
+
# logger.error("同步东方财富美股信息异常:{}", e)
|
|
69
69
|
logger.info("同步东方财富a,etf,kzz,us,hk,信息完成")
|
|
70
70
|
|
|
71
71
|
|
|
@@ -16,6 +16,7 @@ import time
|
|
|
16
16
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
17
17
|
import mns_common.component.cookie.cookie_info_service as cookie_info_service
|
|
18
18
|
from datetime import datetime
|
|
19
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
19
20
|
|
|
20
21
|
mongodb_util_27017 = MongodbUtil('27017')
|
|
21
22
|
|
|
@@ -25,9 +26,7 @@ mongodb_util_27017 = MongodbUtil('27017')
|
|
|
25
26
|
# balance 资产负债
|
|
26
27
|
# 同步所有股票 报表
|
|
27
28
|
def sync_all_stocks_report():
|
|
28
|
-
em_a_stock_info_df =
|
|
29
|
-
em_a_stock_info_df = em_a_stock_info_df[~em_a_stock_info_df['symbol'].astype(str).str.startswith(('8', '4'))]
|
|
30
|
-
|
|
29
|
+
em_a_stock_info_df = em_stock_info_api.get_a_stock_info()
|
|
31
30
|
em_a_stock_info_df = common_service_fun_api.add_pre_prefix(em_a_stock_info_df)
|
|
32
31
|
# 或等效写法 df['A'].str[0:6]
|
|
33
32
|
|
|
@@ -124,7 +123,7 @@ def save_one_symbol_data(stock_one, report_type_list, xue_qiu_cookie, save_tag,
|
|
|
124
123
|
|
|
125
124
|
if symbol in fail_list:
|
|
126
125
|
fail_list.remove(symbol)
|
|
127
|
-
logger.info("
|
|
126
|
+
logger.info("同步财务数据完成:{}:{}", symbol, name, report_name)
|
|
128
127
|
except BaseException as e:
|
|
129
128
|
logger.error("同步错误:{},异常信息:{}", symbol, e)
|
|
130
129
|
fail_list.append(symbol)
|
|
@@ -132,7 +131,7 @@ def save_one_symbol_data(stock_one, report_type_list, xue_qiu_cookie, save_tag,
|
|
|
132
131
|
|
|
133
132
|
|
|
134
133
|
def sync_xue_qiu_very_period_report(report_name, symbol):
|
|
135
|
-
em_a_stock_info_df =
|
|
134
|
+
em_a_stock_info_df = em_stock_info_api.get_a_stock_info()
|
|
136
135
|
if symbol is not None:
|
|
137
136
|
em_a_stock_info_df = em_a_stock_info_df.loc[em_a_stock_info_df['symbol'] == symbol]
|
|
138
137
|
em_a_stock_info_df = common_service_fun_api.add_pre_prefix(em_a_stock_info_df)
|
{mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/irm/stock_irm_cninfo_service.py
RENAMED
|
@@ -130,7 +130,7 @@ def sync_symbols_interactive_questions(symbol_list):
|
|
|
130
130
|
real_time_quotes_all_stocks = common_service_fun_api.classify_symbol(real_time_quotes_all_stocks)
|
|
131
131
|
real_time_quotes_all_stocks = real_time_quotes_all_stocks.sort_values(by=['chg'], ascending=False)
|
|
132
132
|
fail_symbol_list = []
|
|
133
|
-
if symbol_list
|
|
133
|
+
if len(symbol_list) != 0:
|
|
134
134
|
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
|
|
135
135
|
real_time_quotes_all_stocks['symbol'].isin(symbol_list)]
|
|
136
136
|
for stock_one in real_time_quotes_all_stocks.itertuples():
|
|
@@ -193,7 +193,8 @@ def save_new_data(stock_irm_cninfo_df):
|
|
|
193
193
|
|
|
194
194
|
|
|
195
195
|
if __name__ == '__main__':
|
|
196
|
+
sync_symbols_interactive_questions([])
|
|
196
197
|
get_stock_irm_cninfo_sh_api('688778')
|
|
197
198
|
fail_symbol_list_01 = ['000638', '002886', '688778', '688766', '688733', '688778', '688793', '688787']
|
|
198
199
|
# get_stock_irm_cninfo_sh_api('603633')
|
|
199
|
-
sync_symbols_interactive_questions(
|
|
200
|
+
# sync_symbols_interactive_questions(None)
|
|
@@ -63,6 +63,9 @@ def update_symbol_new_concept_reason(plate_code, kpl_symbol_list):
|
|
|
63
63
|
new_values = {"$set": {"long": choose_reason}}
|
|
64
64
|
mongodb_util.update_many(update_query, new_values,
|
|
65
65
|
db_name_constant.KPL_BEST_CHOOSE_INDEX_DETAIL)
|
|
66
|
+
# 更新今日新增概念列表 入选原因
|
|
67
|
+
mongodb_util.update_many(update_query, new_values,
|
|
68
|
+
db_name_constant.TODAY_NEW_CONCEPT_LIST)
|
|
66
69
|
except BaseException as e:
|
|
67
70
|
logger.error("更新开票啦入选原因异常:{},{},{}", symbol, plate_code, e)
|
|
68
71
|
|
{mns-scheduler-1.3.6.0 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py
RENAMED
|
@@ -20,6 +20,7 @@ import mns_common.component.em.em_real_time_quotes_api as em_real_time_quotes_ap
|
|
|
20
20
|
from datetime import datetime
|
|
21
21
|
import mns_common.api.ths.company.ths_company_info_api as ths_company_info_api
|
|
22
22
|
import mns_common.component.cookie.cookie_info_service as cookie_info_service
|
|
23
|
+
import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
|
|
23
24
|
|
|
24
25
|
'''
|
|
25
26
|
东方财富涨停池
|
|
@@ -97,6 +98,9 @@ def save_zt_info(str_day):
|
|
|
97
98
|
|
|
98
99
|
zt_analysis = ths_company_info_api.get_company_hot_info(stock_one.symbol,
|
|
99
100
|
cookie_info_service.get_ths_cookie())
|
|
101
|
+
if zt_analysis == '':
|
|
102
|
+
zt_analysis = ths_stock_zt_pool_api.zt_analyse(stock_one.symbol)
|
|
103
|
+
|
|
100
104
|
stock_em_zt_pool_df_data.loc[
|
|
101
105
|
stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_analysis'] = zt_analysis
|
|
102
106
|
|
|
@@ -14,9 +14,15 @@ from loguru import logger
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def update_null_zt_reason(str_day):
|
|
17
|
-
query = {"str_day": str_day, "$or": [{"zt_reason": "0"
|
|
17
|
+
query = {"str_day": str_day, "$or": [{"zt_reason": "0"},
|
|
18
18
|
{"zt_reason": ""},
|
|
19
|
-
{"zt_reason": float('nan')}
|
|
19
|
+
{"zt_reason": float('nan')},
|
|
20
|
+
|
|
21
|
+
{"zt_analysis": "0"},
|
|
22
|
+
{"zt_analysis": ""},
|
|
23
|
+
{"zt_analysis": float('nan')},
|
|
24
|
+
|
|
25
|
+
]}
|
|
20
26
|
stock_zt_pool_df_null_zt_reason = mongodb_util.find_query_data('stock_zt_pool', query)
|
|
21
27
|
if data_frame_util.is_empty(stock_zt_pool_df_null_zt_reason):
|
|
22
28
|
return None
|
|
@@ -30,11 +36,18 @@ def update_null_zt_reason(str_day):
|
|
|
30
36
|
ths_pool_zt_reason_one_df = ths_zt_pool_df_data.loc[
|
|
31
37
|
ths_zt_pool_df_data['symbol'] == stock_zt_one.symbol]
|
|
32
38
|
if data_frame_util.is_not_empty(ths_pool_zt_reason_one_df):
|
|
39
|
+
# 涨停原因
|
|
33
40
|
stock_zt_pool_df_one_df = stock_zt_pool_df_null_zt_reason.loc[
|
|
34
41
|
stock_zt_pool_df_null_zt_reason['symbol'] == stock_zt_one.symbol]
|
|
35
42
|
stock_zt_pool_df_one_df['zt_reason'] = list(ths_pool_zt_reason_one_df['zt_reason'])[0]
|
|
43
|
+
|
|
44
|
+
# 涨停分析
|
|
45
|
+
zt_analysis = ths_stock_zt_pool_api.zt_analyse(stock_zt_one.symbol)
|
|
46
|
+
stock_zt_pool_df_one_df['zt_analysis'] = zt_analysis
|
|
47
|
+
|
|
36
48
|
mongodb_util.save_mongo(stock_zt_pool_df_one_df, 'stock_zt_pool')
|
|
37
|
-
|
|
49
|
+
if stock_zt_one.symbol in no_reason_list:
|
|
50
|
+
no_reason_list.remove(stock_zt_one.symbol)
|
|
38
51
|
except BaseException as e:
|
|
39
52
|
logger.error("出现异常:{},{}", stock_zt_one.symbol, e)
|
|
40
53
|
continue
|
|
@@ -44,4 +57,4 @@ def update_null_zt_reason(str_day):
|
|
|
44
57
|
|
|
45
58
|
|
|
46
59
|
if __name__ == '__main__':
|
|
47
|
-
update_null_zt_reason('
|
|
60
|
+
update_null_zt_reason('2025-11-03')
|
|
@@ -61,6 +61,7 @@ import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
|
|
|
61
61
|
import mns_scheduler.industry.ths.ths_industry_sync_service as ths_industry_sync_service
|
|
62
62
|
import mns_scheduler.k_line.year_quarter.year_quarter_line_sync as year_quarter_line_sync
|
|
63
63
|
import mns_scheduler.k_line.sync_status.k_line_sync_status_check as k_line_sync_status_check
|
|
64
|
+
import mns_scheduler.company_info.base.sync_company_product_area_industry as sync_company_product_area_industry_api
|
|
64
65
|
|
|
65
66
|
|
|
66
67
|
# 同步交易日期任务完成
|
|
@@ -353,7 +354,7 @@ def sync_all_interactive_questions():
|
|
|
353
354
|
tag = bool(1 - trade_date_common_service_api.is_trade_day(str_day))
|
|
354
355
|
if tag:
|
|
355
356
|
logger.info('同步互动回答')
|
|
356
|
-
stock_irm_cninfo_service.
|
|
357
|
+
stock_irm_cninfo_service.sync_symbols_interactive_questions([])
|
|
357
358
|
|
|
358
359
|
|
|
359
360
|
# # 重开定时任务同步
|
|
@@ -445,6 +446,11 @@ def check_k_line_sync_count():
|
|
|
445
446
|
k_line_sync_status_check.check_k_line_sync_count()
|
|
446
447
|
|
|
447
448
|
|
|
449
|
+
# 同步公司产品区域信息
|
|
450
|
+
def sync_company_product_area_industry():
|
|
451
|
+
sync_company_product_area_industry_api.sync_company_product_area_industry_task(None)
|
|
452
|
+
|
|
453
|
+
|
|
448
454
|
# # 定义BlockingScheduler
|
|
449
455
|
blockingScheduler = BlockingScheduler()
|
|
450
456
|
|
|
@@ -468,10 +474,10 @@ blockingScheduler.add_job(sync_position, 'cron', hour='0,08,09', minute='14')
|
|
|
468
474
|
blockingScheduler.add_job(update_company_base_info, 'cron', hour='08,18', minute='05')
|
|
469
475
|
|
|
470
476
|
# 同步互动回答
|
|
471
|
-
blockingScheduler.add_job(sync_all_interactive_questions, 'cron', hour='
|
|
477
|
+
blockingScheduler.add_job(sync_all_interactive_questions, 'cron', hour='06,17', minute='30')
|
|
472
478
|
|
|
473
479
|
# 同步十大流通股东信息
|
|
474
|
-
blockingScheduler.add_job(sync_stock_gdfx_free_top_10_one_day, 'cron', hour='
|
|
480
|
+
blockingScheduler.add_job(sync_stock_gdfx_free_top_10_one_day, 'cron', hour='06,18', minute='05')
|
|
475
481
|
|
|
476
482
|
# 同步港股公司和行业信息
|
|
477
483
|
blockingScheduler.add_job(sync_hk_company_industry_info, 'cron', hour='08,15', minute='10')
|
|
@@ -562,8 +568,12 @@ blockingScheduler.add_job(sync_all_kpl_plate_info, 'interval', minutes=5, max_in
|
|
|
562
568
|
# check 前复权k线和下一个交易日策略k线数据同步状态
|
|
563
569
|
blockingScheduler.add_job(check_k_line_sync_count, 'cron', hour='0,23', minute='10')
|
|
564
570
|
|
|
571
|
+
# 同步公司产品区域信息
|
|
572
|
+
blockingScheduler.add_job(sync_company_product_area_industry, 'cron', day_of_week='sat,sun', hour='10,20',
|
|
573
|
+
minute='10')
|
|
574
|
+
|
|
565
575
|
print('定时任务启动成功')
|
|
566
576
|
blockingScheduler.start()
|
|
567
577
|
#
|
|
568
578
|
# if __name__ == '__main__':
|
|
569
|
-
#
|
|
579
|
+
# sync_company_product_area_industry()
|
|
@@ -52,8 +52,6 @@ mns_scheduler/db/script/sync/sync_hui_ce_test_data.py
|
|
|
52
52
|
mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py
|
|
53
53
|
mns_scheduler/db/script/update/__init__.py
|
|
54
54
|
mns_scheduler/db/script/update/update_col_field.py
|
|
55
|
-
mns_scheduler/debt/__init__.py
|
|
56
|
-
mns_scheduler/debt/kzz_bond_info_sync.py
|
|
57
55
|
mns_scheduler/dt/__init__.py
|
|
58
56
|
mns_scheduler/dt/stock_dt_pool_sync.py
|
|
59
57
|
mns_scheduler/finance/__init__.py
|