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.

Files changed (208) hide show
  1. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/PKG-INFO +1 -1
  2. {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
  3. {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
  4. {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
  5. {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
  6. {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
  7. {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
  8. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/api/alpha_vantage_api.py +34 -0
  9. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/api/y_finance_api.py +47 -0
  10. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/down_load_stock_his_2024_01.py +145 -0
  11. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/down_load_stock_his_2024_02.py +153 -0
  12. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/down_load_ETF_his_2024.py +152 -0
  13. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/handle_down_load_fail_ETF.py +67 -0
  14. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/his/us_stock_one_minute_his.py +199 -0
  15. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/his/us_stock_one_minute_his_2024.py +212 -0
  16. mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/one_minute/stock/us_stock_one_minute_task.py +26 -0
  17. mns-scheduler-1.3.1.2/mns_scheduler/open/__init__.py +7 -0
  18. mns-scheduler-1.3.1.2/mns_scheduler/risk/__init__.py +7 -0
  19. mns-scheduler-1.3.1.2/mns_scheduler/risk/test/__init__.py +7 -0
  20. mns-scheduler-1.3.1.2/mns_scheduler/self_choose/__init__.py +7 -0
  21. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/self_choose/ths_self_choose_service.py +13 -6
  22. mns-scheduler-1.3.1.2/mns_scheduler/trade/balance/__init__.py +7 -0
  23. mns-scheduler-1.3.1.2/mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
  24. mns-scheduler-1.3.1.2/mns_scheduler/trade/tfp/__init__.py +7 -0
  25. mns-scheduler-1.3.1.2/mns_scheduler/us/__init__.py +7 -0
  26. mns-scheduler-1.3.1.2/mns_scheduler/zt/script/__init__.py +7 -0
  27. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zz_task/data_sync_task.py +3 -3
  28. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler.egg-info/PKG-INFO +1 -1
  29. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler.egg-info/SOURCES.txt +34 -16
  30. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/setup.py +1 -1
  31. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/README.md +0 -0
  32. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/__init__.py +0 -0
  33. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/baidu/__init__.py +0 -0
  34. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/baidu/baidu_yun_pan_handle_service.py +0 -0
  35. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/big_deal/__init__.py +0 -0
  36. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/big_deal/ths_big_deal_sync.py +0 -0
  37. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/__init__.py +0 -0
  38. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/announce/__init__.py +0 -0
  39. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/announce/company_announce_sync_service.py +0 -0
  40. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/base/__init__.py +0 -0
  41. {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
  42. {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
  43. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/clean/__init__.py +0 -0
  44. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/clean/company_info_clean_api.py +0 -0
  45. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/constant/__init__.py +0 -0
  46. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/constant/company_constant_data.py +0 -0
  47. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/de_list_stock/__init__.py +0 -0
  48. {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
  49. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/em_stock_info/__init__.py +0 -0
  50. {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
  51. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/remark/__init__.py +0 -0
  52. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -0
  53. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/__init__.py +0 -0
  54. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/clean/__init__.py +0 -0
  55. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/clean/kpl_concept_clean_api.py +0 -0
  56. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/clean/ths_concept_clean_api.py +0 -0
  57. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/__init__.py +0 -0
  58. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/common/__init__.py +0 -0
  59. {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
  60. {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
  61. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/detaill/__init__.py +0 -0
  62. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +0 -0
  63. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/sync_new_index/__init__.py +0 -0
  64. {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
  65. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/concept/ths/update_concept_info/__init__.py +0 -0
  66. {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
  67. {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
  68. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/__init__.py +0 -0
  69. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/col_move_service.py +0 -0
  70. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/db_status.py +0 -0
  71. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/__init__.py +0 -0
  72. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/col_move_script.py +0 -0
  73. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/db_move/__init__.py +0 -0
  74. {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
  75. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/__init__.py +0 -0
  76. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/local_mongo_util.py +0 -0
  77. {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
  78. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/sync/remote_mongo_util.py +0 -0
  79. {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
  80. {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
  81. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/update/__init__.py +0 -0
  82. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/db/script/update/update_col_field.py +0 -0
  83. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/debt/__init__.py +0 -0
  84. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/debt/kzz_bond_info_sync.py +0 -0
  85. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/dt/__init__.py +0 -0
  86. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/dt/stock_dt_pool_sync.py +0 -0
  87. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/extraIncome/__init__.py +0 -0
  88. {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
  89. {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
  90. {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
  91. {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
  92. {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
  93. {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
  94. {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
  95. {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
  96. {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
  97. {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
  98. {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
  99. {mns-scheduler-1.3.0.9/mns_scheduler/extraIncome/us → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/hk}/__init__.py +0 -0
  100. {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
  101. {mns-scheduler-1.3.0.9/mns_scheduler/finance → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us}/__init__.py +0 -0
  102. {mns-scheduler-1.3.0.9/mns_scheduler/hk → mns-scheduler-1.3.1.2/mns_scheduler/extraIncome/us/daily}/__init__.py +0 -0
  103. {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
  104. {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
  105. {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
  106. {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
  107. {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
  108. {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
  109. {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
  110. {mns-scheduler-1.3.0.9/mns_scheduler/k_line/test → mns-scheduler-1.3.1.2/mns_scheduler/finance}/__init__.py +0 -0
  111. {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
  112. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/finance/em_financial_profit_sync_service_api.py +0 -0
  113. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/finance/finance_common_api.py +0 -0
  114. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/finance/sync_financial_report_service_api.py +0 -0
  115. {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
  116. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/hk/hk_company_info_sync_service_api.py +0 -0
  117. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/hk/hk_industry_info_sync_service_api.py +0 -0
  118. {mns-scheduler-1.3.0.9/mns_scheduler/lhb → mns-scheduler-1.3.1.2/mns_scheduler/industry}/__init__.py +0 -0
  119. {mns-scheduler-1.3.0.9/mns_scheduler/open → mns-scheduler-1.3.1.2/mns_scheduler/industry/ths}/__init__.py +0 -0
  120. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/industry/ths/ths_industry_index_service.py +0 -0
  121. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/industry/ths/ths_industry_sync_service.py +0 -0
  122. {mns-scheduler-1.3.0.9/mns_scheduler/risk → mns-scheduler-1.3.1.2/mns_scheduler/irm}/__init__.py +0 -0
  123. {mns-scheduler-1.3.0.9/mns_scheduler/risk/test → mns-scheduler-1.3.1.2/mns_scheduler/irm/api}/__init__.py +0 -0
  124. {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
  125. {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
  126. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/irm/stock_irm_cninfo_service.py +0 -0
  127. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/__init__.py +0 -0
  128. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/clean/__init__.py +0 -0
  129. {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
  130. {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
  131. {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
  132. {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
  133. {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
  134. {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
  135. {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
  136. {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
  137. {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
  138. {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
  139. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/k_line/month_week_daily/__init__.py +0 -0
  140. {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
  141. {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
  142. {mns-scheduler-1.3.0.9/mns_scheduler/us → mns-scheduler-1.3.1.2/mns_scheduler/k_line/test}/__init__.py +0 -0
  143. {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
  144. {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
  145. {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
  146. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/__init__.py +0 -0
  147. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/__init__.py +0 -0
  148. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/index/__init__.py +0 -0
  149. {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
  150. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/index/sync_best_choose_index.py +0 -0
  151. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/symbol/__init__.py +0 -0
  152. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +0 -0
  153. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/kpl/selection/total/__init__.py +0 -0
  154. {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
  155. /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
  156. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/lhb/stock_lhb_sync_service.py +0 -0
  157. {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
  158. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/compliance/__init__.py +0 -0
  159. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +0 -0
  160. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/__init__.py +0 -0
  161. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/annual_report_audit_check_api.py +0 -0
  162. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/net_assets_check_api.py +0 -0
  163. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/profit_income_check_api.py +0 -0
  164. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +0 -0
  165. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/financial_report_risk_check_api.py +0 -0
  166. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/major_violations/__init__.py +0 -0
  167. {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
  168. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/self/__init__.py +0 -0
  169. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/self/wei_pan_stock_api.py +0 -0
  170. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/test/fix_blask_list.py +0 -0
  171. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/transactions/__init__.py +0 -0
  172. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/risk/transactions/transactions_check_api.py +0 -0
  173. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/__init__.py +0 -0
  174. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/auto_ipo_buy_api.py +0 -0
  175. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/auto_login/__init__.py +0 -0
  176. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/auto_login/trader_auto_service.py +0 -0
  177. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/auto_sell_service_api.py +0 -0
  178. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/sync_position_api.py +0 -0
  179. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/task/__init__.py +0 -0
  180. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/task/trader_task_service.py +0 -0
  181. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/trade/tfp/stock_tfp_info_sync.py +0 -0
  182. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/us/baidu_yun_pan_handle_service.py +0 -0
  183. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/us/k_line.py +0 -0
  184. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/us/us_company_info_sync_service_api.py +0 -0
  185. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zb/__init__.py +0 -0
  186. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zb/stock_zb_pool_sync.py +0 -0
  187. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/__init__.py +0 -0
  188. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/connected_boards/__init__.py +0 -0
  189. {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
  190. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/export/__init__.py +0 -0
  191. {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
  192. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/high_chg/__init__.py +0 -0
  193. {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
  194. {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
  195. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/open_data/__init__.py +0 -0
  196. {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
  197. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/script/fix_error_deal_day.py +0 -0
  198. {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
  199. {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
  200. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/script/sync_now_higt_chg_zt.py +0 -0
  201. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zt/zt_pool/__init__.py +0 -0
  202. {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
  203. {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
  204. {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
  205. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler/zz_task/__init__.py +0 -0
  206. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler.egg-info/dependency_links.txt +0 -0
  207. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/mns_scheduler.egg-info/top_level.txt +0 -0
  208. {mns-scheduler-1.3.0.9 → mns-scheduler-1.3.1.2}/setup.cfg +0 -0
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.3.0.9
3
+ Version: 1.3.1.2
@@ -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)