mns-scheduler 1.3.3.5__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.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/announce/company_announce_sync_service.py +10 -5
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/base/sync_company_base_info_api.py +97 -20
- {mns-scheduler-1.3.3.5 → 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.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/constant/company_constant_data.py +3 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +27 -28
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/clean/ths_concept_clean_api.py +3 -6
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/remote_data_sync_to_local.py +33 -4
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +15 -3
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +3 -2
- mns_scheduler-1.4.1.5/mns_scheduler/finance/em/__init__.py +7 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/finance → mns_scheduler-1.4.1.5/mns_scheduler/finance/em}/em_financial_asset_liability_sync_service_api.py +1 -1
- {mns-scheduler-1.3.3.5/mns_scheduler/finance → mns_scheduler-1.4.1.5/mns_scheduler/finance/em}/em_financial_profit_sync_service_api.py +5 -3
- mns-scheduler-1.3.3.5/mns_scheduler/finance/sync_financial_report_service_api.py → mns_scheduler-1.4.1.5/mns_scheduler/finance/sync_financial_report_service_task.py +79 -26
- mns_scheduler-1.4.1.5/mns_scheduler/finance/xue_qiu/__init__.py +7 -0
- mns_scheduler-1.4.1.5/mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
- mns_scheduler-1.4.1.5/mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/irm/stock_irm_cninfo_service.py +9 -5
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/common/k_line_common_api.py +1 -1
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/month_week_daily/daily_week_month_line_sync.py +2 -2
- mns_scheduler-1.4.1.5/mns_scheduler/k_line/sync_status/__init__.py +7 -0
- mns_scheduler-1.4.1.5/mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +1 -2
- mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +5 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +1 -1
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/self_choose/ths_self_choose_service.py +7 -13
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/auto_login/trader_auto_service.py +5 -3
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/task/trader_task_service.py +25 -8
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/tfp/stock_tfp_info_sync.py +4 -1
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +1 -1
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +1 -1
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +4 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +1 -1
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +17 -4
- mns_scheduler-1.4.1.5/mns_scheduler/zz_task/compensation/__init__.py +0 -0
- mns_scheduler-1.4.1.5/mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
- mns_scheduler-1.4.1.5/mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zz_task/data_sync_task.py +40 -32
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5/mns_scheduler.egg-info}/PKG-INFO +1 -1
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler.egg-info/SOURCES.txt +16 -9
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/setup.py +2 -2
- mns-scheduler-1.3.3.5/mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
- mns-scheduler-1.3.3.5/mns_scheduler/debt/kzz_bond_info_sync.py +0 -33
- mns-scheduler-1.3.3.5/mns_scheduler/zt/script/__init__.py +0 -7
- mns-scheduler-1.3.3.5/mns_scheduler/zz_task/__init__.py +0 -7
- mns-scheduler-1.3.3.5/mns_scheduler.egg-info/PKG-INFO +0 -3
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/README.md +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/big_deal → mns_scheduler-1.4.1.5/mns_scheduler/company_info}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/company_info → mns_scheduler-1.4.1.5/mns_scheduler/company_info/announce}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/company_info/announce → mns_scheduler-1.4.1.5/mns_scheduler/company_info/base}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/company_info/base → mns_scheduler-1.4.1.5/mns_scheduler/company_info/clean}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/clean/company_info_clean_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/company_info/clean → mns_scheduler-1.4.1.5/mns_scheduler/company_info/constant}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/company_info/constant → mns_scheduler-1.4.1.5/mns_scheduler/company_info/de_list_stock}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/company_info/de_list_stock → mns_scheduler-1.4.1.5/mns_scheduler/company_info/em_stock_info}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/company_info/em_stock_info → mns_scheduler-1.4.1.5/mns_scheduler/company_info/remark}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/company_info/remark → mns_scheduler-1.4.1.5/mns_scheduler/concept}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/concept → mns_scheduler-1.4.1.5/mns_scheduler/concept/clean}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/clean/kpl_concept_clean_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/concept/clean → mns_scheduler-1.4.1.5/mns_scheduler/concept/ths}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/concept/ths → mns_scheduler-1.4.1.5/mns_scheduler/concept/ths/common}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/detaill/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/concept/ths/common → mns_scheduler-1.4.1.5/mns_scheduler/concept/ths/sync_new_index}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → 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.3.5/mns_scheduler/concept/ths/sync_new_index → mns_scheduler-1.4.1.5/mns_scheduler/concept/ths/update_concept_info}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → 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.3.5 → 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.3.5/mns_scheduler/concept/ths/update_concept_info → mns_scheduler-1.4.1.5/mns_scheduler/db}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/col_move_service.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/db_status.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/db → mns_scheduler-1.4.1.5/mns_scheduler/db/script}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/col_move_script.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/db/script → mns_scheduler-1.4.1.5/mns_scheduler/db/script/db_move}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/db_move/col_move_one_service.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/db/script/db_move → mns_scheduler-1.4.1.5/mns_scheduler/db/script/sync}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/local_mongo_util.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/sync/remote_mongo_util.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/db/script/sync → mns_scheduler-1.4.1.5/mns_scheduler/db/script/update}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/db/script/update/update_col_field.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/db/script/update → mns_scheduler-1.4.1.5/mns_scheduler/dt}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/dt/stock_dt_pool_sync.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/debt → mns_scheduler-1.4.1.5/mns_scheduler/finance}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/finance → mns_scheduler-1.4.1.5/mns_scheduler/finance/em}/finance_common_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/dt → mns_scheduler-1.4.1.5/mns_scheduler/hk}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/hk/hk_company_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/hk/hk_industry_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/finance → mns_scheduler-1.4.1.5/mns_scheduler/industry}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/hk → mns_scheduler-1.4.1.5/mns_scheduler/industry/ths}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/industry/ths/ths_industry_index_service.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/industry/ths/ths_industry_sync_service.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/industry → mns_scheduler-1.4.1.5/mns_scheduler/irm}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/industry/ths → mns_scheduler-1.4.1.5/mns_scheduler/irm/api}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/irm → mns_scheduler-1.4.1.5/mns_scheduler/k_line/clean}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/irm/api → mns_scheduler-1.4.1.5/mns_scheduler/k_line/clean/daily}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → 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.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/daily/daily_k_line_service.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/k_line_info_clean_impl.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/clean/k_line_info_clean_task.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/k_line/clean → mns_scheduler-1.4.1.5/mns_scheduler/k_line/clean/week_month}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → 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.3.5 → 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.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/common/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/k_line/clean/daily → mns_scheduler-1.4.1.5/mns_scheduler/k_line/hot_stocks}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/month_week_daily/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/k_line/clean/week_month → mns_scheduler-1.4.1.5/mns_scheduler/k_line/test}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/test/k_line_info_clean_his_data.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/k_line/hot_stocks → mns_scheduler-1.4.1.5/mns_scheduler/k_line/year_quarter}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/k_line/test → mns_scheduler-1.4.1.5/mns_scheduler/kpl}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/k_line/year_quarter → mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/kpl → mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection/index}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/index/sync_best_choose_his_index.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/kpl/selection/index/sync_best_choose_index.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/kpl/selection → mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection/symbol}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/kpl/selection/index → mns_scheduler-1.4.1.5/mns_scheduler/kpl/selection/total}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/kpl/selection/symbol → mns_scheduler-1.4.1.5/mns_scheduler/lhb}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/lhb/stock_lhb_sync_service.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/kpl/selection/total → mns_scheduler-1.4.1.5/mns_scheduler/open}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/open/sync_one_day_open_data_to_db_service.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/lhb → mns_scheduler-1.4.1.5/mns_scheduler/risk}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/compliance/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/annual_report_audit_check_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/net_assets_check_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/profit_income_check_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/financial_report_risk_check_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/major_violations/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/self/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/self/wei_pan_stock_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/open → mns_scheduler-1.4.1.5/mns_scheduler/risk/test}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/test/fix_blask_list.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/transactions/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/risk/transactions/transactions_check_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/risk → mns_scheduler-1.4.1.5/mns_scheduler/self_choose}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/risk/test → mns_scheduler-1.4.1.5/mns_scheduler/trade}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/auto_ipo_buy_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/self_choose → mns_scheduler-1.4.1.5/mns_scheduler/trade/auto_login}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/auto_sell_service_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/trade → mns_scheduler-1.4.1.5/mns_scheduler/trade/balance}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/balance/ths_account_balance_service.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/trade/sync_position_api.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/trade/auto_login → mns_scheduler-1.4.1.5/mns_scheduler/trade/task}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/trade/balance → mns_scheduler-1.4.1.5/mns_scheduler/trade/tfp}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zb/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zb/stock_zb_pool_sync.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/connected_boards/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/connected_boards/zt_five_boards_sync_api.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/export/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → 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.3.5/mns_scheduler/trade/task → mns_scheduler-1.4.1.5/mns_scheduler/zt/high_chg}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +0 -0
- {mns-scheduler-1.3.3.5 → 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.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/open_data/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/open_data/kcx_high_chg_open_data_sync.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/trade/tfp → mns_scheduler-1.4.1.5/mns_scheduler/zt/script}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/script/fix_error_deal_day.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/script/sync_now_higt_chg_zt.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/zt/zt_pool/__init__.py +0 -0
- {mns-scheduler-1.3.3.5/mns_scheduler/zt/high_chg → mns_scheduler-1.4.1.5/mns_scheduler/zz_task}/__init__.py +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler.egg-info/dependency_links.txt +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler.egg-info/top_level.txt +0 -0
- {mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/setup.cfg +0 -0
|
@@ -17,21 +17,25 @@ mongodb_util = MongodbUtil('27017')
|
|
|
17
17
|
# 同步最新公告
|
|
18
18
|
# eq-f1001 业绩预告 eq-f1002 重大事项 eq-f1003 股份变动公告
|
|
19
19
|
|
|
20
|
-
def sync_company_announce():
|
|
21
|
-
page_size =
|
|
20
|
+
def sync_company_announce(symbol_list):
|
|
21
|
+
page_size = 100
|
|
22
22
|
announce_type_list = ['all', 'eq-f1003', 'eq-f1001', 'eq-f1002']
|
|
23
23
|
for announce_type_one in announce_type_list:
|
|
24
24
|
try:
|
|
25
|
-
get_company_announce(announce_type_one, page_size)
|
|
25
|
+
get_company_announce(announce_type_one, page_size, symbol_list)
|
|
26
26
|
except BaseException as e:
|
|
27
27
|
logger.error("更新公告出现异常:{}", e)
|
|
28
28
|
logger.info("同步到公告信息完成")
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
def get_company_announce(announce_type, page_size):
|
|
31
|
+
def get_company_announce(announce_type, page_size, symbol_list):
|
|
32
32
|
company_all_df = company_common_service_new_api.get_company_all_info_info()
|
|
33
33
|
de_list_company = company_common_service_new_api.get_de_list_company()
|
|
34
34
|
company_all_df = company_all_df.loc[~(company_all_df['symbol'].isin(de_list_company))]
|
|
35
|
+
|
|
36
|
+
if symbol_list is not None:
|
|
37
|
+
company_all_df = company_all_df.loc[(company_all_df['symbol'].isin(symbol_list))]
|
|
38
|
+
|
|
35
39
|
for stock_one in company_all_df.itertuples():
|
|
36
40
|
try:
|
|
37
41
|
symbol = stock_one.symbol
|
|
@@ -51,10 +55,11 @@ def get_company_announce(announce_type, page_size):
|
|
|
51
55
|
ths_company_announce_result['_id'] = ths_company_announce_result['guid'] + '_' + \
|
|
52
56
|
ths_company_announce_result['seq'] + "_" + announce_type
|
|
53
57
|
mongodb_util.save_mongo(ths_company_announce_result, db_name_constant.COMPANY_ANNOUNCE_INFO)
|
|
58
|
+
logger.info("更新公告完成:{},{}", symbol, stock_one.name)
|
|
54
59
|
|
|
55
60
|
except BaseException as e:
|
|
56
61
|
logger.error("更新公告出现异常:{}", e)
|
|
57
62
|
|
|
58
63
|
|
|
59
64
|
if __name__ == '__main__':
|
|
60
|
-
sync_company_announce()
|
|
65
|
+
sync_company_announce(None)
|
|
@@ -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()
|
|
@@ -395,17 +468,20 @@ def save_sw_data(company_info_type):
|
|
|
395
468
|
def get_recent_year_income(symbol, company_info_type, exist_company_df):
|
|
396
469
|
now_date = datetime.now()
|
|
397
470
|
hour = now_date.hour
|
|
398
|
-
if hour <= 15:
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
471
|
+
# if hour <= 15:
|
|
472
|
+
# exist_company_one_df = exist_company_df.loc[exist_company_df['_id'] == symbol]
|
|
473
|
+
# if data_frame_util.is_not_empty(exist_company_one_df):
|
|
474
|
+
# company_info_type['operate_profit'] = list(exist_company_one_df['operate_profit'])[0]
|
|
475
|
+
# company_info_type['total_operate_income'] = list(exist_company_one_df['total_operate_income'])[0]
|
|
476
|
+
# if 'operate_date_name' in exist_company_one_df:
|
|
477
|
+
# company_info_type['operate_date_name'] = list(exist_company_one_df['total_operate_income'])[0]
|
|
478
|
+
# else:
|
|
479
|
+
# company_info_type['operate_date_name'] = '暂无年报'
|
|
480
|
+
# else:
|
|
481
|
+
# company_info_type['operate_profit'] = 0
|
|
482
|
+
# company_info_type['total_operate_income'] = 0
|
|
483
|
+
# company_info_type['operate_date_name'] = '暂无年报'
|
|
484
|
+
# return company_info_type
|
|
409
485
|
query = {'symbol': symbol, "REPORT_TYPE": "年报"}
|
|
410
486
|
em_stock_profit = mongodb_util.descend_query(query, db_name_constant.EM_STOCK_PROFIT, 'REPORT_DATE', 1)
|
|
411
487
|
if data_frame_util.is_not_empty(em_stock_profit):
|
|
@@ -420,7 +496,7 @@ def get_recent_year_income(symbol, company_info_type, exist_company_df):
|
|
|
420
496
|
else:
|
|
421
497
|
company_info_type['operate_profit'] = 0
|
|
422
498
|
company_info_type['total_operate_income'] = 0
|
|
423
|
-
company_info_type['operate_date_name'] = ''
|
|
499
|
+
company_info_type['operate_date_name'] = '暂无年报'
|
|
424
500
|
company_info_type['operate_profit'] = round(
|
|
425
501
|
company_info_type['operate_profit'] / common_service_fun_api.HUNDRED_MILLION, 2)
|
|
426
502
|
company_info_type['total_operate_income'] = round(
|
|
@@ -442,4 +518,5 @@ if __name__ == '__main__':
|
|
|
442
518
|
# un_report_company_info = mongodb_util.find_query_data(db_name_constant.COMPANY_INFO, query)
|
|
443
519
|
# symbol_list = list(un_report_company_info['symbol'])
|
|
444
520
|
sync_company_base_info(None)
|
|
445
|
-
|
|
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,50 +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
|
-
|
|
68
|
-
|
|
69
|
-
logger.error("同步东方财富美股信息异常:{}", e)
|
|
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)
|
|
70
69
|
logger.info("同步东方财富a,etf,kzz,us,hk,信息完成")
|
|
71
70
|
|
|
72
71
|
|
{mns-scheduler-1.3.3.5 → mns_scheduler-1.4.1.5}/mns_scheduler/concept/clean/ths_concept_clean_api.py
RENAMED
|
@@ -7,7 +7,7 @@ project_path = file_path[0:end]
|
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
9
9
|
import pandas as pd
|
|
10
|
-
import mns_common.
|
|
10
|
+
import mns_common.api.ths.concept.web.ths_concept_index_web as ths_concept_index_web
|
|
11
11
|
import time
|
|
12
12
|
from loguru import logger
|
|
13
13
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
@@ -107,10 +107,7 @@ def update_null_name():
|
|
|
107
107
|
exist_url = concept_one.url
|
|
108
108
|
|
|
109
109
|
if name == '':
|
|
110
|
-
|
|
111
|
-
if data_frame_util.is_empty(concept_name_df):
|
|
112
|
-
continue
|
|
113
|
-
concept_name = list(concept_name_df['concept_name'])[0]
|
|
110
|
+
concept_name = ths_concept_index_web.get_concept_name(concept_code)
|
|
114
111
|
query_concept = {"symbol": concept_code}
|
|
115
112
|
new_values = {'$set': {"name": concept_name}}
|
|
116
113
|
mongodb_util.update_one_query(query_concept, new_values, 'ths_concept_list')
|
|
@@ -131,7 +128,7 @@ def update_null_name():
|
|
|
131
128
|
|
|
132
129
|
|
|
133
130
|
if __name__ == '__main__':
|
|
134
|
-
update_one_concept_relevance_industry(886095)
|
|
131
|
+
# update_one_concept_relevance_industry(886095)
|
|
135
132
|
update_null_name()
|
|
136
133
|
logger.info("开始")
|
|
137
134
|
update_ths_concept_info()
|
|
@@ -15,12 +15,15 @@ remote_mongodb_util = RemoteMongodbUtil('27017')
|
|
|
15
15
|
local_mongodb_util = LocalMongodbUtil('27017')
|
|
16
16
|
|
|
17
17
|
col_list = [
|
|
18
|
+
'em_a_stock_info',
|
|
19
|
+
'em_etf_info',
|
|
20
|
+
'em_kzz_info',
|
|
21
|
+
'em_hk_stock_info',
|
|
18
22
|
'company_info',
|
|
19
23
|
'company_remark_info',
|
|
20
24
|
'company_holding_info',
|
|
21
25
|
'industry_concept_remark',
|
|
22
26
|
'trade_date_list',
|
|
23
|
-
'company_info',
|
|
24
27
|
'de_list_stock',
|
|
25
28
|
'kpl_best_choose_index',
|
|
26
29
|
'kpl_best_choose_index_detail',
|
|
@@ -31,9 +34,11 @@ col_list = [
|
|
|
31
34
|
'self_choose_stock',
|
|
32
35
|
'stock_account_info',
|
|
33
36
|
'ths_concept_list',
|
|
34
|
-
'
|
|
37
|
+
'stock_zt_pool_five',
|
|
35
38
|
'ths_stock_concept_detail',
|
|
36
|
-
'stock_high_chg_pool'
|
|
39
|
+
'stock_high_chg_pool',
|
|
40
|
+
'today_new_concept_list',
|
|
41
|
+
'ths_stock_concept_detail_app'
|
|
37
42
|
]
|
|
38
43
|
|
|
39
44
|
|
|
@@ -53,6 +58,20 @@ def remote_data():
|
|
|
53
58
|
logger.error("同步失败:{},{}", e, col)
|
|
54
59
|
|
|
55
60
|
|
|
61
|
+
def sync_zt_data(str_day):
|
|
62
|
+
col = 'stock_zt_pool'
|
|
63
|
+
try:
|
|
64
|
+
query = {'str_day': str_day}
|
|
65
|
+
col_df = remote_mongodb_util.find_query_data(col, query)
|
|
66
|
+
if data_frame_util.is_not_empty(col_df):
|
|
67
|
+
col_df.replace([np.inf, -np.inf], 0, inplace=True)
|
|
68
|
+
local_mongodb_util.save_mongo(col_df, col)
|
|
69
|
+
|
|
70
|
+
logger.info("同步集合完成:{}", col)
|
|
71
|
+
except BaseException as e:
|
|
72
|
+
logger.error("同步失败:{},{}", e, col)
|
|
73
|
+
|
|
74
|
+
|
|
56
75
|
def sync_open_data():
|
|
57
76
|
query = {"$and": [{'trade_date': {"$gte": "2025-03-21"}}, {'trade_date': {"$lte": "2025-04-02"}}]}
|
|
58
77
|
trade_date_list_df = remote_mongodb_util.find_query_data('trade_date_list', query)
|
|
@@ -72,5 +91,15 @@ def sync_open_data():
|
|
|
72
91
|
|
|
73
92
|
|
|
74
93
|
if __name__ == '__main__':
|
|
75
|
-
|
|
94
|
+
sync_zt_data('2025-09-17')
|
|
95
|
+
# sync_zt_data('2025-09-02')
|
|
96
|
+
remote_data()
|
|
97
|
+
# sync_zt_data('2025-08-26')
|
|
98
|
+
# sync_zt_data('2025-08-25')
|
|
99
|
+
# sync_zt_data('2025-08-26')
|
|
100
|
+
# remote_data()
|
|
101
|
+
# sync_zt_data('2025-07-23')
|
|
102
|
+
# sync_zt_data('2025-07-24')
|
|
103
|
+
# sync_zt_data('2025-07-25')
|
|
104
|
+
# sync_open_data()
|
|
76
105
|
# remote_data()
|
|
@@ -14,8 +14,18 @@ remote_mongodb_util = RemoteMongodbUtil('27017')
|
|
|
14
14
|
local_mongodb_util = LocalMongodbUtil('27017')
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
def create_index(db_name):
|
|
18
|
+
local_mongodb_util.create_index(db_name, [("symbol", 1)])
|
|
19
|
+
|
|
20
|
+
local_mongodb_util.create_index(db_name, [("str_now_date", 1)])
|
|
21
|
+
|
|
22
|
+
local_mongodb_util.create_index(db_name, [("symbol", 1), ("number", 1)])
|
|
23
|
+
|
|
24
|
+
|
|
17
25
|
def sync_real_time_data(str_day, min_number, max_number):
|
|
18
26
|
db_name = 'realtime_quotes_now_' + str_day
|
|
27
|
+
# 创建索引
|
|
28
|
+
create_index(db_name)
|
|
19
29
|
while min_number <= max_number:
|
|
20
30
|
query = {'number': min_number}
|
|
21
31
|
data_df = remote_mongodb_util.find_query_data(db_name, query)
|
|
@@ -29,16 +39,18 @@ def sync_k_line(str_day):
|
|
|
29
39
|
db_name = 'k_line_info'
|
|
30
40
|
data_df = remote_mongodb_util.find_query_data(db_name, query)
|
|
31
41
|
try:
|
|
32
|
-
local_mongodb_util.
|
|
42
|
+
local_mongodb_util.insert_mongo(data_df, db_name)
|
|
33
43
|
except BaseException as e:
|
|
34
44
|
logger.error("出现异常:{}", e)
|
|
35
45
|
pass
|
|
36
46
|
|
|
37
47
|
|
|
38
48
|
if __name__ == '__main__':
|
|
39
|
-
|
|
40
|
-
str_day_01 = '2025-06-25'
|
|
49
|
+
str_day_01 = '2025-09-10'
|
|
41
50
|
sync_k_line(str_day_01)
|
|
51
|
+
|
|
52
|
+
# sync_real_time_data(str_day_01, 1, 2500)
|
|
53
|
+
|
|
42
54
|
# sync_k_line(str_day_01)
|
|
43
55
|
# sync_k_line('2024-11-13')
|
|
44
56
|
# sync_k_line('2024-11-12')
|
|
@@ -37,8 +37,9 @@ def sync_k_line(str_day):
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
if __name__ == '__main__':
|
|
40
|
-
|
|
41
|
-
sync_k_line(
|
|
40
|
+
sync_k_line('2025-08-27')
|
|
41
|
+
# sync_k_line('2025-07-24')
|
|
42
|
+
# sync_k_line('2025-07-25')
|
|
42
43
|
# sync_k_line(str_day_01)
|
|
43
44
|
# sync_k_line('2024-11-13')
|
|
44
45
|
# sync_k_line('2024-11-12')
|
|
@@ -7,7 +7,7 @@ project_path = file_path[0:end]
|
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import akshare as ak
|
|
9
9
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
|
-
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
10
|
+
import mns_scheduler.finance.em.finance_common_api as finance_common_api
|
|
11
11
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
12
|
|
|
13
13
|
mongodb_util = MongodbUtil('27017')
|