mns-scheduler 1.3.0.9__tar.gz → 1.3.1.2__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.
Potentially problematic release.
This version of mns-scheduler might be problematic. Click here for more details.
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/PKG-INFO +1 -1
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/etf/etf_one_minute_sync_task.py +2 -2
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/index/main_index_sync_task.py +2 -2
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/kzz/kzz_one_minute_sync_task.py +2 -2
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/one_minute_sync_task.py +4 -4
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/stock/stock_one_minute_sync_task.py +2 -2
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome/us → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/daily}/us_stock_qfq_daily_k_line.py +8 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/api/alpha_vantage_api.py +34 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/api/y_finance_api.py +47 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/down_load_stock_his_2024_01.py +145 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/down_load_stock_his_2024_02.py +153 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/down_load_ETF_his_2024.py +152 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/handle_down_load_fail_ETF.py +67 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/his/us_stock_one_minute_his.py +199 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/his/us_stock_one_minute_his_2024.py +212 -0
- mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/us_stock_one_minute_task.py +26 -0
- mns-scheduler-1.3.1.2/mns_scheduler/open/__init__.py +7 -0
- mns-scheduler-1.3.1.2/mns_scheduler/risk/__init__.py +7 -0
- mns-scheduler-1.3.1.2/mns_scheduler/risk/test/__init__.py +7 -0
- mns-scheduler-1.3.1.2/mns_scheduler/self_choose/__init__.py +7 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/self_choose/ths_self_choose_service.py +13 -6
- mns-scheduler-1.3.1.2/mns_scheduler/trade/balance/__init__.py +7 -0
- mns-scheduler-1.3.1.2/mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
- mns-scheduler-1.3.1.2/mns_scheduler/trade/tfp/__init__.py +7 -0
- mns-scheduler-1.3.1.2/mns_scheduler/us/__init__.py +7 -0
- mns-scheduler-1.3.1.2/mns_scheduler/zt/script/__init__.py +7 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zz_task/data_sync_task.py +3 -3
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler.egg-info/PKG-INFO +1 -1
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler.egg-info/SOURCES.txt +34 -16
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/setup.py +1 -1
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/README.md +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/baidu/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/baidu/baidu_yun_pan_handle_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/big_deal/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/big_deal/ths_big_deal_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/announce/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/announce/company_announce_sync_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/base/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/base/sync_company_base_info_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/base/sync_company_hold_info_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/clean/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/clean/company_info_clean_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/constant/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/constant/company_constant_data.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/de_list_stock/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/em_stock_info/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/remark/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/clean/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/clean/kpl_concept_clean_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/clean/ths_concept_clean_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/common/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/detaill/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/sync_new_index/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/update_concept_info/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/col_move_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/db_status.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/col_move_script.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/db_move/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/db_move/col_move_one_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/local_mongo_util.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/remote_data_sync_to_local.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/remote_mongo_util.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/update/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/update/update_col_field.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/debt/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/debt/kzz_bond_info_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/dt/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/dt/stock_dt_pool_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/extraIncome/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome/hk → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/common/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/common/db_create_index.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/common/symbol_handle_util.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/etf/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/index/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/kzz/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/stock/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/upload/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/a_stock}/one_minute/upload/upload_to_baidu_task.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome/us → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/hk}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/extraIncome/hk/hk_stock_qfq_daily_k_line.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/finance → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/hk → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/daily}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/industry → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/industry/ths → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/api}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/irm → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/etf}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/irm/api → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/k_line/clean/daily → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/k_line/clean/week_month → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/k_line/hot_stocks → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/his}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/k_line/test → mns-scheduler-1.3.1.2/mns_scheduler/finance}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/finance/em_financial_profit_sync_service_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/finance/finance_common_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/finance/sync_financial_report_service_api.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/k_line/year_quarter → mns-scheduler-1.3.1.2/mns_scheduler/hk}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/hk/hk_company_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/hk/hk_industry_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/lhb → mns-scheduler-1.3.1.2/mns_scheduler/industry}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/open → mns-scheduler-1.3.1.2/mns_scheduler/industry/ths}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/industry/ths/ths_industry_index_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/industry/ths/ths_industry_sync_service.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/risk → mns-scheduler-1.3.1.2/mns_scheduler/irm}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/risk/test → mns-scheduler-1.3.1.2/mns_scheduler/irm/api}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/irm/stock_irm_cninfo_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/clean/__init__.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/self_choose → mns-scheduler-1.3.1.2/mns_scheduler/k_line/clean/daily}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/clean/daily/daily_k_line_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/clean/k_line_info_clean_impl.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/clean/k_line_info_clean_task.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/trade/balance → mns-scheduler-1.3.1.2/mns_scheduler/k_line/clean/week_month}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/trade/tfp → mns-scheduler-1.3.1.2/mns_scheduler/k_line/hot_stocks}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/month_week_daily/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/month_week_daily/daily_week_month_line_sync.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/us → mns-scheduler-1.3.1.2/mns_scheduler/k_line/test}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/test/k_line_info_clean_his_data.py +0 -0
- {mns-scheduler-1.3.0.9/mns_scheduler/zt/script → mns-scheduler-1.3.1.2/mns_scheduler/k_line/year_quarter}/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/index/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/index/sync_best_choose_his_index.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/index/sync_best_choose_index.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/symbol/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/total/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +0 -0
- /mns-scheduler-1.3.0.9/mns_scheduler/trade/balance/ths_account_balance_service.py → /mns-scheduler-1.3.1.2/mns_scheduler/lhb/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/lhb/stock_lhb_sync_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/open/sync_one_day_open_data_to_db_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/compliance/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/annual_report_audit_check_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/net_assets_check_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/profit_income_check_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial_report_risk_check_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/major_violations/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/self/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/self/wei_pan_stock_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/test/fix_blask_list.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/transactions/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/transactions/transactions_check_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/auto_ipo_buy_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/auto_login/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/auto_login/trader_auto_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/auto_sell_service_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/sync_position_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/task/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/task/trader_task_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/tfp/stock_tfp_info_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/us/baidu_yun_pan_handle_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/us/k_line.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/us/us_company_info_sync_service_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zb/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zb/stock_zb_pool_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/connected_boards/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/connected_boards/zt_five_boards_sync_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/export/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/export/export_kcx_high_chg_open_data_to_excel.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/high_chg/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/open_data/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/open_data/kcx_high_chg_open_data_sync.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/script/fix_error_deal_day.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/script/sync_now_higt_chg_zt.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/zt_pool/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zz_task/__init__.py +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler.egg-info/dependency_links.txt +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler.egg-info/top_level.txt +0 -0
- {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/setup.cfg +0 -0
|
@@ -11,9 +11,9 @@ from loguru import logger
|
|
|
11
11
|
import time
|
|
12
12
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
13
13
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
14
|
-
import mns_scheduler.extraIncome.one_minute.common.symbol_handle_util as symbol_handle_util
|
|
14
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.symbol_handle_util as symbol_handle_util
|
|
15
15
|
from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
|
|
16
|
-
import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
|
|
16
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.db_create_index as db_create_index
|
|
17
17
|
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
18
18
|
import mns_common.api.k_line.stock_minute_data_api as stock_minute_data_api
|
|
19
19
|
from datetime import datetime
|
|
@@ -10,11 +10,11 @@ from loguru import logger
|
|
|
10
10
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
11
11
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
12
12
|
from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
|
|
13
|
-
import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
|
|
13
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.db_create_index as db_create_index
|
|
14
14
|
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
15
15
|
from datetime import datetime
|
|
16
16
|
import mns_common.api.k_line.stock_minute_data_api as stock_minute_data_api
|
|
17
|
-
import mns_scheduler.extraIncome.one_minute.common.symbol_handle_util as symbol_handle_util
|
|
17
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.symbol_handle_util as symbol_handle_util
|
|
18
18
|
|
|
19
19
|
mongodb_util_27017 = MongodbUtil('27017')
|
|
20
20
|
mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
|
|
@@ -11,9 +11,9 @@ from loguru import logger
|
|
|
11
11
|
import time
|
|
12
12
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
13
13
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
14
|
-
import mns_scheduler.extraIncome.one_minute.common.symbol_handle_util as symbol_handle_util
|
|
14
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.symbol_handle_util as symbol_handle_util
|
|
15
15
|
from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
|
|
16
|
-
import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
|
|
16
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.db_create_index as db_create_index
|
|
17
17
|
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
18
18
|
import mns_common.api.k_line.stock_minute_data_api as stock_minute_data_api
|
|
19
19
|
from datetime import datetime
|
|
@@ -5,10 +5,10 @@ file_path = os.path.abspath(__file__)
|
|
|
5
5
|
end = file_path.index('mns') + 16
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
|
-
import mns_scheduler.extraIncome.one_minute.index.main_index_sync_task as main_index_sync_task
|
|
9
|
-
import mns_scheduler.extraIncome.one_minute.etf.etf_one_minute_sync_task as etf_one_minute_sync_task
|
|
10
|
-
import mns_scheduler.extraIncome.one_minute.kzz.kzz_one_minute_sync_task as kzz_one_minute_sync_task
|
|
11
|
-
import mns_scheduler.extraIncome.one_minute.stock.stock_one_minute_sync_task as stock_one_minute_sync_task
|
|
8
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.index.main_index_sync_task as main_index_sync_task
|
|
9
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.etf.etf_one_minute_sync_task as etf_one_minute_sync_task
|
|
10
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.kzz.kzz_one_minute_sync_task as kzz_one_minute_sync_task
|
|
11
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.stock.stock_one_minute_sync_task as stock_one_minute_sync_task
|
|
12
12
|
from datetime import datetime
|
|
13
13
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
14
14
|
|
|
@@ -11,9 +11,9 @@ from loguru import logger
|
|
|
11
11
|
import time
|
|
12
12
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
13
13
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
14
|
-
import mns_scheduler.extraIncome.one_minute.common.symbol_handle_util as symbol_handle_util
|
|
14
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.symbol_handle_util as symbol_handle_util
|
|
15
15
|
from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
|
|
16
|
-
import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
|
|
16
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.db_create_index as db_create_index
|
|
17
17
|
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
18
18
|
import mns_common.api.k_line.stock_minute_data_api as stock_minute_data_api
|
|
19
19
|
from datetime import datetime
|
|
@@ -20,12 +20,20 @@ mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
|
|
|
20
20
|
|
|
21
21
|
def us_stock_daily_qfq_sync():
|
|
22
22
|
us_stock_path = '/美股/qfq/'
|
|
23
|
+
|
|
24
|
+
us_stock_exist_df = baidu_yun_pan_handle_service.get_file_folder(us_stock_path)
|
|
25
|
+
us_stock_exist_df['name'] = us_stock_exist_df['name'].str.replace(r'\.csv$', '', regex=True)
|
|
26
|
+
|
|
23
27
|
em_us_stock_info_df = mongodb_util_27017.find_all_data(db_name_constant.EM_US_STOCK_INFO)
|
|
28
|
+
|
|
24
29
|
# 将列 A 转为字符串,并提取前三位
|
|
25
30
|
em_us_stock_info_df["simple_symbol"] = em_us_stock_info_df["simple_symbol"].astype(str).str[:3]
|
|
26
31
|
em_us_stock_info_df = em_us_stock_info_df.sort_values(by=['amount'], ascending=False)
|
|
27
32
|
# 上传列表
|
|
28
33
|
baidu_yun_pan_handle_service.upload_to_baidu('美股列表', us_stock_path, em_us_stock_info_df)
|
|
34
|
+
|
|
35
|
+
em_us_stock_info_df = em_us_stock_info_df.loc[~em_us_stock_info_df['symbol'].isin(us_stock_exist_df['name'])]
|
|
36
|
+
|
|
29
37
|
fail_list = []
|
|
30
38
|
for us_stock_one in em_us_stock_info_df.itertuples():
|
|
31
39
|
symbol = us_stock_one.symbol
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
from alpha_vantage.timeseries import TimeSeries
|
|
9
|
+
|
|
10
|
+
# 初始化TimeSeries对象
|
|
11
|
+
ts = TimeSeries(key='PP23H4H1059FTUK7', output_format='pandas')
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# 开始月份 2000-01
|
|
15
|
+
def sync_one_minute_data(symbol, month):
|
|
16
|
+
# 获取分钟数据(以苹果公司股票为例,60分钟间隔)
|
|
17
|
+
data, meta_data = ts.get_intraday(symbol=symbol, interval='1min', outputsize='full', month=month,
|
|
18
|
+
extended_hours='true', adjusted='false')
|
|
19
|
+
|
|
20
|
+
data['time'] = data.index
|
|
21
|
+
data.columns = [
|
|
22
|
+
"open",
|
|
23
|
+
"high",
|
|
24
|
+
"low",
|
|
25
|
+
"close",
|
|
26
|
+
"volume",
|
|
27
|
+
"time",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
return data
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == '__main__':
|
|
34
|
+
sync_one_minute_data('IBM', '2000-01')
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
|
|
9
|
+
proxy = 'http://127.0.0.1:7890'
|
|
10
|
+
|
|
11
|
+
os.environ['HTTP_PROXY'] = proxy
|
|
12
|
+
os.environ['HTTPS_PROXY'] = proxy
|
|
13
|
+
|
|
14
|
+
import yfinance as yf
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_us_one_minute(symbol, start_time, end_time):
|
|
18
|
+
yf_ticker = yf.Ticker(symbol)
|
|
19
|
+
df = yf_ticker.history(period='5d', interval='1m',
|
|
20
|
+
start=start_time, end=end_time, prepost=True)
|
|
21
|
+
df = df[[
|
|
22
|
+
"Open",
|
|
23
|
+
"High",
|
|
24
|
+
"Low",
|
|
25
|
+
"Close",
|
|
26
|
+
"Volume",
|
|
27
|
+
]]
|
|
28
|
+
df['time'] = df.index
|
|
29
|
+
df.columns = [
|
|
30
|
+
"open",
|
|
31
|
+
"high",
|
|
32
|
+
"low",
|
|
33
|
+
"close",
|
|
34
|
+
"volume",
|
|
35
|
+
"time",
|
|
36
|
+
]
|
|
37
|
+
df['time'] = df['time'].dt.strftime('%Y-%m-%d %H:%M:%S')
|
|
38
|
+
df['str_day'] = df['time'].str.slice(0, 10)
|
|
39
|
+
df['minute'] = df['time'].str.slice(11, 19)
|
|
40
|
+
return df
|
|
41
|
+
# df_test = df.loc[df['str_day'] == '2025-04-30']
|
|
42
|
+
# print(sum(df_test['volume']))
|
|
43
|
+
# sum(df.loc[(df['str_day'] == '2025-04-30') & (df['time'] > '16:00:00')]['volume'])
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
if __name__ == '__main__':
|
|
47
|
+
get_us_one_minute('QQQ', '2025-05-01', '2025-05-07')
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
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
|
+
from loguru import logger
|
|
10
|
+
import time
|
|
11
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
|
+
from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
|
|
14
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.db_create_index as db_create_index
|
|
15
|
+
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
16
|
+
import mns_scheduler.extraIncome.us.one_minute.api.alpha_vantage_api as alpha_vantage_api
|
|
17
|
+
import pandas as pd
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from functools import lru_cache
|
|
20
|
+
|
|
21
|
+
mongodb_util_27017 = MongodbUtil('27017')
|
|
22
|
+
mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
|
|
23
|
+
from datetime import datetime
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def sync_us_stock_one_minute(now_year, now_month):
|
|
27
|
+
real_time_quotes_all_us = em_stock_info_api.get_us_stock_info()
|
|
28
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us.loc[real_time_quotes_all_us['flow_mv'] != 0]
|
|
29
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us_stocks.sort_values(by=['amount'], ascending=False)
|
|
30
|
+
|
|
31
|
+
path = r'F:\us_stock\one_minute\{}'.format(now_year)
|
|
32
|
+
if not os.path.exists(path):
|
|
33
|
+
os.makedirs(path)
|
|
34
|
+
|
|
35
|
+
path = path + '\{}'.format(now_month)
|
|
36
|
+
if not os.path.exists(path):
|
|
37
|
+
os.makedirs(path)
|
|
38
|
+
stock_name_list = find_exist_file(path)
|
|
39
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us_stocks.loc[
|
|
40
|
+
~(real_time_quotes_all_us_stocks['symbol'].isin(stock_name_list))]
|
|
41
|
+
real_time_quotes_all_us_stocks.dropna(subset=['list_date'], inplace=True)
|
|
42
|
+
for stock_one in real_time_quotes_all_us_stocks.itertuples():
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
|
|
46
|
+
symbol = stock_one.symbol
|
|
47
|
+
# simple_symbol = int(stock_one.simple_symbol)
|
|
48
|
+
# code = str(simple_symbol) + '.' + symbol
|
|
49
|
+
list_date = str(stock_one.list_date)
|
|
50
|
+
list_date_year = int(list_date[0:4])
|
|
51
|
+
list_month = int(list_date[4:6])
|
|
52
|
+
now_month_int = int(now_month[5:7])
|
|
53
|
+
if (list_date_year > now_year) or ((list_date_year == now_year) and (list_month > now_month_int)):
|
|
54
|
+
continue
|
|
55
|
+
now_date = datetime.now()
|
|
56
|
+
if net_work_check(now_date):
|
|
57
|
+
# 休眠 6分钟
|
|
58
|
+
time.sleep(5 * 60)
|
|
59
|
+
|
|
60
|
+
df = alpha_vantage_api.sync_one_minute_data(symbol, now_month)
|
|
61
|
+
df['time'] = df['time'].dt.strftime('%Y-%m-%d %H:%M:%S')
|
|
62
|
+
df['str_day'] = df['time'].str.slice(0, 10)
|
|
63
|
+
df['minute'] = df['time'].str.slice(11, 19)
|
|
64
|
+
df['_id'] = symbol + "_" + df['time']
|
|
65
|
+
df['symbol'] = symbol
|
|
66
|
+
df_export_df = df.copy()
|
|
67
|
+
export_original_data(df_export_df, symbol, path)
|
|
68
|
+
except BaseException as e:
|
|
69
|
+
time.sleep(1)
|
|
70
|
+
fail_dict = {
|
|
71
|
+
'_id': symbol + '_' + now_month,
|
|
72
|
+
'type': "stock",
|
|
73
|
+
'path': path,
|
|
74
|
+
'symbol': symbol,
|
|
75
|
+
'now_year': now_year,
|
|
76
|
+
'now_month': now_month
|
|
77
|
+
}
|
|
78
|
+
fail_df = pd.DataFrame(fail_dict, index=[1])
|
|
79
|
+
|
|
80
|
+
mongodb_util_27017.save_mongo(fail_df, 'us_stock_one_minute_down_load_fail')
|
|
81
|
+
logger.error("同步股票分钟数据出现异常:,{},{},{}", e, symbol, now_month)
|
|
82
|
+
logger.info("同步股票分钟票数据完成:{},{}", stock_one.symbol, stock_one.name)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def export_original_data(df, symbol, path):
|
|
86
|
+
file_name = path + '\{}.csv'.format(symbol)
|
|
87
|
+
if data_frame_util.is_not_empty(df):
|
|
88
|
+
df = df.dropna(subset=['_id'])
|
|
89
|
+
del df['str_day']
|
|
90
|
+
del df['minute']
|
|
91
|
+
del df['_id']
|
|
92
|
+
del df['symbol']
|
|
93
|
+
df.to_csv(file_name, index=False, encoding='utf-8')
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def net_work_check(now_date):
|
|
97
|
+
hour = now_date.hour
|
|
98
|
+
minute = now_date.minute
|
|
99
|
+
if hour == 7 and minute == 34:
|
|
100
|
+
return True
|
|
101
|
+
elif hour == 9 and minute == 59:
|
|
102
|
+
return True
|
|
103
|
+
elif hour == 10 and minute == 29:
|
|
104
|
+
return True
|
|
105
|
+
elif hour == 10 and minute == 59:
|
|
106
|
+
return True
|
|
107
|
+
elif hour == 12 and minute == 49:
|
|
108
|
+
return True
|
|
109
|
+
elif hour == 13 and minute == 28:
|
|
110
|
+
return True
|
|
111
|
+
elif hour == 13 and minute == 58:
|
|
112
|
+
return True
|
|
113
|
+
elif hour == 14 and minute == 28:
|
|
114
|
+
return True
|
|
115
|
+
elif hour == 15 and minute == 1:
|
|
116
|
+
return True
|
|
117
|
+
else:
|
|
118
|
+
return False
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def sync_by_year(begin_year):
|
|
122
|
+
begin_month = 6
|
|
123
|
+
while begin_month > 0:
|
|
124
|
+
if begin_month < 10:
|
|
125
|
+
str_month = '0' + str(begin_month)
|
|
126
|
+
else:
|
|
127
|
+
str_month = str(begin_month)
|
|
128
|
+
str_month = str(begin_year) + '-' + str_month
|
|
129
|
+
sync_us_stock_one_minute(begin_year, str_month)
|
|
130
|
+
begin_month = begin_month - 1
|
|
131
|
+
logger.error("同步完成月份:{}", str_month)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def find_exist_file(folder_path):
|
|
135
|
+
if not os.path.exists(folder_path):
|
|
136
|
+
logger.error("错误:目录不存在:{}", folder_path)
|
|
137
|
+
else:
|
|
138
|
+
folder_path = Path(folder_path)
|
|
139
|
+
stock_names = [f.stem for f in folder_path.glob("*.csv")]
|
|
140
|
+
return stock_names
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
if __name__ == '__main__':
|
|
144
|
+
# k_line_df = query_k_line('TSLA')
|
|
145
|
+
sync_by_year(2024)
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
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
|
+
from loguru import logger
|
|
10
|
+
import time
|
|
11
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
|
+
from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
|
|
14
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.db_create_index as db_create_index
|
|
15
|
+
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
16
|
+
import mns_scheduler.extraIncome.us.one_minute.api.alpha_vantage_api as alpha_vantage_api
|
|
17
|
+
import pandas as pd
|
|
18
|
+
from functools import lru_cache
|
|
19
|
+
import glob
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
mongodb_util_27017 = MongodbUtil('27017')
|
|
22
|
+
mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
|
|
23
|
+
from datetime import datetime
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def sync_us_stock_one_minute(now_year, now_month):
|
|
27
|
+
real_time_quotes_all_us = em_stock_info_api.get_us_stock_info()
|
|
28
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us.loc[real_time_quotes_all_us['flow_mv'] != 0]
|
|
29
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us_stocks.sort_values(by=['amount'], ascending=False)
|
|
30
|
+
|
|
31
|
+
path = r'F:\us_stock\one_minute\{}'.format(now_year)
|
|
32
|
+
if not os.path.exists(path):
|
|
33
|
+
os.makedirs(path)
|
|
34
|
+
|
|
35
|
+
path = path + '\{}'.format(now_month)
|
|
36
|
+
if not os.path.exists(path):
|
|
37
|
+
os.makedirs(path)
|
|
38
|
+
stock_name_list = find_exist_file(path)
|
|
39
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us_stocks.loc[
|
|
40
|
+
~(real_time_quotes_all_us_stocks['symbol'].isin(stock_name_list))]
|
|
41
|
+
real_time_quotes_all_us_stocks.dropna(subset=['list_date'], inplace=True)
|
|
42
|
+
for stock_one in real_time_quotes_all_us_stocks.itertuples():
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
symbol = stock_one.symbol
|
|
46
|
+
# simple_symbol = int(stock_one.simple_symbol)
|
|
47
|
+
# code = str(simple_symbol) + '.' + symbol
|
|
48
|
+
list_date = str(stock_one.list_date)
|
|
49
|
+
list_date_year = int(list_date[0:4])
|
|
50
|
+
list_month = int(list_date[4:6])
|
|
51
|
+
now_month_int = int(now_month[5:7])
|
|
52
|
+
if (list_date_year > now_year) or ((list_date_year == now_year) and (list_month > now_month_int)):
|
|
53
|
+
continue
|
|
54
|
+
now_date = datetime.now()
|
|
55
|
+
if net_work_check(now_date):
|
|
56
|
+
# 休眠 6分钟
|
|
57
|
+
time.sleep(5 * 60)
|
|
58
|
+
|
|
59
|
+
df = alpha_vantage_api.sync_one_minute_data(symbol, now_month)
|
|
60
|
+
df['time'] = df['time'].dt.strftime('%Y-%m-%d %H:%M:%S')
|
|
61
|
+
df['str_day'] = df['time'].str.slice(0, 10)
|
|
62
|
+
df['minute'] = df['time'].str.slice(11, 19)
|
|
63
|
+
df['_id'] = symbol + "_" + df['time']
|
|
64
|
+
df['symbol'] = symbol
|
|
65
|
+
df_export_df = df.copy()
|
|
66
|
+
export_original_data(df_export_df, symbol, now_year, now_month)
|
|
67
|
+
except BaseException as e:
|
|
68
|
+
time.sleep(1)
|
|
69
|
+
fail_dict = {
|
|
70
|
+
'_id': symbol + '_' + now_month,
|
|
71
|
+
'type': "stock",
|
|
72
|
+
'path': path,
|
|
73
|
+
'symbol': symbol,
|
|
74
|
+
'now_year': now_year,
|
|
75
|
+
'now_month': now_month
|
|
76
|
+
}
|
|
77
|
+
fail_df = pd.DataFrame(fail_dict, index=[1])
|
|
78
|
+
|
|
79
|
+
mongodb_util_27017.save_mongo(fail_df, 'us_stock_one_minute_down_load_fail')
|
|
80
|
+
logger.error("同步股票分钟数据出现异常:,{},{},{}", e, symbol, now_month)
|
|
81
|
+
logger.info("同步股票分钟票数据完成:{},{}", stock_one.symbol, stock_one.name)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def export_original_data(df, symbol, year, now_month):
|
|
85
|
+
path = r'F:\us_stock\one_minute\{}'.format(year)
|
|
86
|
+
if not os.path.exists(path):
|
|
87
|
+
os.makedirs(path)
|
|
88
|
+
|
|
89
|
+
path = path + '\{}'.format(now_month)
|
|
90
|
+
if not os.path.exists(path):
|
|
91
|
+
os.makedirs(path)
|
|
92
|
+
|
|
93
|
+
file_name = path + '\{}.csv'.format(symbol)
|
|
94
|
+
if data_frame_util.is_not_empty(df):
|
|
95
|
+
df = df.dropna(subset=['_id'])
|
|
96
|
+
del df['str_day']
|
|
97
|
+
del df['minute']
|
|
98
|
+
del df['_id']
|
|
99
|
+
del df['symbol']
|
|
100
|
+
df.to_csv(file_name, index=False, encoding='utf-8')
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def net_work_check(now_date):
|
|
104
|
+
hour = now_date.hour
|
|
105
|
+
minute = now_date.minute
|
|
106
|
+
if hour == 7 and minute == 34:
|
|
107
|
+
return True
|
|
108
|
+
elif hour == 9 and minute == 59:
|
|
109
|
+
return True
|
|
110
|
+
elif hour == 10 and minute == 29:
|
|
111
|
+
return True
|
|
112
|
+
elif hour == 10 and minute == 59:
|
|
113
|
+
return True
|
|
114
|
+
elif hour == 12 and minute == 49:
|
|
115
|
+
return True
|
|
116
|
+
elif hour == 13 and minute == 28:
|
|
117
|
+
return True
|
|
118
|
+
elif hour == 13 and minute == 58:
|
|
119
|
+
return True
|
|
120
|
+
elif hour == 14 and minute == 28:
|
|
121
|
+
return True
|
|
122
|
+
elif hour == 15 and minute == 1:
|
|
123
|
+
return True
|
|
124
|
+
else:
|
|
125
|
+
return False
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def sync_by_year(begin_year):
|
|
129
|
+
begin_month = 11
|
|
130
|
+
while begin_month > 6:
|
|
131
|
+
if begin_month < 10:
|
|
132
|
+
str_month = '0' + str(begin_month)
|
|
133
|
+
else:
|
|
134
|
+
str_month = str(begin_month)
|
|
135
|
+
str_month = str(begin_year) + '-' + str_month
|
|
136
|
+
sync_us_stock_one_minute(begin_year, str_month)
|
|
137
|
+
begin_month = begin_month - 1
|
|
138
|
+
logger.error("同步完成月份:{}", str_month)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def find_exist_file(folder_path):
|
|
142
|
+
if not os.path.exists(folder_path):
|
|
143
|
+
logger.error("错误:目录不存在:{}", folder_path)
|
|
144
|
+
else:
|
|
145
|
+
folder_path = Path(folder_path)
|
|
146
|
+
stock_names = [f.stem for f in folder_path.glob("*.csv")]
|
|
147
|
+
return stock_names
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
if __name__ == '__main__':
|
|
152
|
+
# k_line_df = query_k_line('TSLA')
|
|
153
|
+
sync_by_year(2024)
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
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
|
+
from loguru import logger
|
|
10
|
+
import time
|
|
11
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
|
+
from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
|
|
14
|
+
import mns_scheduler.extraIncome.a_stock.one_minute.common.db_create_index as db_create_index
|
|
15
|
+
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
16
|
+
import mns_scheduler.extraIncome.us.one_minute.api.alpha_vantage_api as alpha_vantage_api
|
|
17
|
+
import pandas as pd
|
|
18
|
+
import math
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
mongodb_util_27017 = MongodbUtil('27017')
|
|
22
|
+
mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
|
|
23
|
+
from datetime import datetime
|
|
24
|
+
|
|
25
|
+
no_choose_symbol = ['FNGA', 'MSTU', 'SPYU']
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def sync_us_stock_one_minute(now_year, now_month):
|
|
29
|
+
real_time_quotes_all_us = em_stock_info_api.get_us_stock_info()
|
|
30
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us.loc[real_time_quotes_all_us['flow_mv'] == 0]
|
|
31
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us_stocks.sort_values(by=['amount'], ascending=False)
|
|
32
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us_stocks.loc[~real_time_quotes_all_us_stocks['symbol'].isin(no_choose_symbol)]
|
|
33
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us_stocks.loc[
|
|
34
|
+
real_time_quotes_all_us_stocks['amount'] >= 50000000]
|
|
35
|
+
|
|
36
|
+
path = r'F:\us_etf\one_minute\{}'.format(now_year)
|
|
37
|
+
if not os.path.exists(path):
|
|
38
|
+
os.makedirs(path)
|
|
39
|
+
|
|
40
|
+
path = path + '\{}'.format(now_month)
|
|
41
|
+
if not os.path.exists(path):
|
|
42
|
+
os.makedirs(path)
|
|
43
|
+
stock_name_list = find_exist_file(path)
|
|
44
|
+
real_time_quotes_all_us_stocks = real_time_quotes_all_us_stocks.loc[
|
|
45
|
+
~(real_time_quotes_all_us_stocks['symbol'].isin(stock_name_list))]
|
|
46
|
+
for stock_one in real_time_quotes_all_us_stocks.itertuples():
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
symbol = stock_one.symbol
|
|
50
|
+
# simple_symbol = int(stock_one.simple_symbol)
|
|
51
|
+
# code = str(simple_symbol) + '.' + symbol
|
|
52
|
+
list_date = stock_one.list_date
|
|
53
|
+
|
|
54
|
+
if not math.isnan(list_date):
|
|
55
|
+
list_date = str(stock_one.list_date)
|
|
56
|
+
list_date_year = int(list_date[0:4])
|
|
57
|
+
list_month = int(list_date[4:6])
|
|
58
|
+
now_month_int = int(now_month[5:7])
|
|
59
|
+
if (list_date_year > now_year) or ((list_date_year == now_year) and (list_month > now_month_int)):
|
|
60
|
+
continue
|
|
61
|
+
now_date = datetime.now()
|
|
62
|
+
if net_work_check(now_date):
|
|
63
|
+
# 休眠 6分钟
|
|
64
|
+
time.sleep(5 * 60)
|
|
65
|
+
|
|
66
|
+
df = alpha_vantage_api.sync_one_minute_data(symbol, now_month)
|
|
67
|
+
df = df.fillna(0)
|
|
68
|
+
df['time'] = df['time'].dt.strftime('%Y-%m-%d %H:%M:%S')
|
|
69
|
+
df['str_day'] = df['time'].str.slice(0, 10)
|
|
70
|
+
df['minute'] = df['time'].str.slice(11, 19)
|
|
71
|
+
df['_id'] = symbol + "_" + df['time']
|
|
72
|
+
df['symbol'] = symbol
|
|
73
|
+
df_export_df = df.copy()
|
|
74
|
+
export_original_data(df_export_df, symbol, path)
|
|
75
|
+
except BaseException as e:
|
|
76
|
+
time.sleep(1)
|
|
77
|
+
fail_dict = {
|
|
78
|
+
'_id': symbol + '_' + now_month,
|
|
79
|
+
'type': "ETF",
|
|
80
|
+
'path': path,
|
|
81
|
+
'symbol': symbol,
|
|
82
|
+
'now_year': now_year,
|
|
83
|
+
'now_month': now_month
|
|
84
|
+
}
|
|
85
|
+
fail_df = pd.DataFrame(fail_dict, index=[1])
|
|
86
|
+
|
|
87
|
+
mongodb_util_27017.save_mongo(fail_df, 'us_stock_one_minute_down_load_fail')
|
|
88
|
+
logger.error("同步股票分钟数据出现异常:,{},{},{}", e, symbol, now_month)
|
|
89
|
+
logger.info("同步股票分钟票数据完成:{},{}", stock_one.symbol, stock_one.name)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def export_original_data(df, symbol, path):
|
|
93
|
+
file_name = path + '\{}.csv'.format(symbol)
|
|
94
|
+
if data_frame_util.is_not_empty(df):
|
|
95
|
+
df = df.dropna(subset=['_id'])
|
|
96
|
+
del df['str_day']
|
|
97
|
+
del df['minute']
|
|
98
|
+
del df['_id']
|
|
99
|
+
del df['symbol']
|
|
100
|
+
df.to_csv(file_name, index=False, encoding='utf-8')
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def net_work_check(now_date):
|
|
104
|
+
hour = now_date.hour
|
|
105
|
+
minute = now_date.minute
|
|
106
|
+
if hour == 7 and minute == 34:
|
|
107
|
+
return True
|
|
108
|
+
elif hour == 9 and minute == 59:
|
|
109
|
+
return True
|
|
110
|
+
elif hour == 10 and minute == 29:
|
|
111
|
+
return True
|
|
112
|
+
elif hour == 10 and minute == 59:
|
|
113
|
+
return True
|
|
114
|
+
elif hour == 12 and minute == 49:
|
|
115
|
+
return True
|
|
116
|
+
elif hour == 13 and minute == 28:
|
|
117
|
+
return True
|
|
118
|
+
elif hour == 13 and minute == 58:
|
|
119
|
+
return True
|
|
120
|
+
elif hour == 14 and minute == 28:
|
|
121
|
+
return True
|
|
122
|
+
elif hour == 15 and minute == 1:
|
|
123
|
+
return True
|
|
124
|
+
else:
|
|
125
|
+
return False
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def sync_by_year(begin_year):
|
|
129
|
+
begin_month = 12
|
|
130
|
+
while begin_month > 0:
|
|
131
|
+
if begin_month < 10:
|
|
132
|
+
str_month = '0' + str(begin_month)
|
|
133
|
+
else:
|
|
134
|
+
str_month = str(begin_month)
|
|
135
|
+
str_month = str(begin_year) + '-' + str_month
|
|
136
|
+
sync_us_stock_one_minute(begin_year, str_month)
|
|
137
|
+
begin_month = begin_month - 1
|
|
138
|
+
logger.error("同步完成月份:{}", str_month)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def find_exist_file(folder_path):
|
|
142
|
+
if not os.path.exists(folder_path):
|
|
143
|
+
logger.error("错误:目录不存在:{}", folder_path)
|
|
144
|
+
else:
|
|
145
|
+
folder_path = Path(folder_path)
|
|
146
|
+
stock_names = [f.stem for f in folder_path.glob("*.csv")]
|
|
147
|
+
return stock_names
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
if __name__ == '__main__':
|
|
151
|
+
# k_line_df = query_k_line('TSLA')
|
|
152
|
+
sync_by_year(2024)
|