hikyuu 2.6.2__py3-none-win_amd64.whl → 2.6.5__py3-none-win_amd64.whl

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.
Files changed (136) hide show
  1. hikyuu/__init__.py +1 -1
  2. hikyuu/__init__.pyi +28 -13
  3. hikyuu/analysis/__init__.pyi +20 -0
  4. hikyuu/analysis/analysis.pyi +21 -1
  5. hikyuu/core.pyi +22 -2
  6. hikyuu/cpp/core310.pyd +0 -0
  7. hikyuu/cpp/core310.pyi +499 -50
  8. hikyuu/cpp/core311.pyd +0 -0
  9. hikyuu/cpp/core311.pyi +499 -50
  10. hikyuu/cpp/core312.pyd +0 -0
  11. hikyuu/cpp/core312.pyi +499 -50
  12. hikyuu/cpp/core313.pyd +0 -0
  13. hikyuu/cpp/core313.pyi +499 -50
  14. hikyuu/cpp/core39.pyd +0 -0
  15. hikyuu/cpp/core39.pyi +499 -50
  16. hikyuu/cpp/hikyuu.dll +0 -0
  17. hikyuu/cpp/hikyuu.lib +0 -0
  18. hikyuu/data/common.py +1 -1
  19. hikyuu/data/common_mysql.py +19 -0
  20. hikyuu/data/common_pytdx.py +2 -0
  21. hikyuu/data/common_sqlite3.py +1 -0
  22. hikyuu/data/hku_config_template.py +14 -0
  23. hikyuu/data/mysql_upgrade/0028.sql +95 -0
  24. hikyuu/data/pytdx_to_h5.py +53 -13
  25. hikyuu/data/pytdx_to_mysql.py +42 -9
  26. hikyuu/data/pytdx_to_taos.py +736 -0
  27. hikyuu/data/sqlite_upgrade/0028.sql +97 -0
  28. hikyuu/draw/__init__.pyi +1 -1
  29. hikyuu/draw/drawplot/__init__.pyi +1 -1
  30. hikyuu/draw/drawplot/bokeh_draw.pyi +24 -9
  31. hikyuu/draw/drawplot/echarts_draw.pyi +24 -9
  32. hikyuu/draw/drawplot/matplotlib_draw.py +26 -4
  33. hikyuu/draw/drawplot/matplotlib_draw.pyi +24 -9
  34. hikyuu/draw/kaufman.py +2 -2
  35. hikyuu/draw/kaufman.pyi +2 -2
  36. hikyuu/examples/notebook/001-overview.ipynb +65 -100
  37. hikyuu/examples/notebook/004-IndicatorOverview.ipynb +34 -32
  38. hikyuu/examples/notebook/007-SystemDetails.ipynb +64 -50
  39. hikyuu/examples/notebook/010-Portfolio.ipynb +120 -124
  40. hikyuu/extend.py +1 -1
  41. hikyuu/extend.pyi +24 -9
  42. hikyuu/fetcher/stock/zh_block_em.py +349 -5
  43. hikyuu/fetcher/stock/zh_stock_a_pytdx.py +2 -1
  44. hikyuu/gui/HikyuuTDX.py +47 -24
  45. hikyuu/gui/data/ImportBlockInfoTask.py +1 -1
  46. hikyuu/gui/data/ImportHistoryFinanceTask.py +48 -44
  47. hikyuu/gui/data/ImportPytdxTimeToH5Task.py +3 -1
  48. hikyuu/gui/data/ImportPytdxToH5Task.py +4 -2
  49. hikyuu/gui/data/ImportPytdxTransToH5Task.py +3 -1
  50. hikyuu/gui/data/ImportWeightToSqliteTask.py +2 -1
  51. hikyuu/gui/data/ImportZhBond10Task.py +1 -1
  52. hikyuu/gui/data/MainWindow.py +123 -106
  53. hikyuu/gui/data/UsePytdxImportToH5Thread.py +7 -3
  54. hikyuu/gui/data/UseQmtImportToH5Thread.py +1 -0
  55. hikyuu/gui/data/UseTdxImportToH5Thread.py +2 -1
  56. hikyuu/hub.pyi +6 -6
  57. hikyuu/include/hikyuu/Block.h +20 -0
  58. hikyuu/include/hikyuu/KQuery.h +8 -0
  59. hikyuu/include/hikyuu/MarketInfo.h +6 -0
  60. hikyuu/include/hikyuu/Stock.h +1 -1
  61. hikyuu/include/hikyuu/StockManager.h +6 -0
  62. hikyuu/include/hikyuu/data_driver/BaseInfoDriver.h +35 -0
  63. hikyuu/include/hikyuu/indicator/Indicator.h +5 -0
  64. hikyuu/include/hikyuu/indicator/IndicatorImp.h +8 -3
  65. hikyuu/include/hikyuu/indicator/build_in.h +1 -0
  66. hikyuu/include/hikyuu/indicator/crt/BARSLASTCOUNT.h +33 -0
  67. hikyuu/include/hikyuu/indicator/crt/INSUM.h +5 -10
  68. hikyuu/include/hikyuu/indicator/crt/RSI.h +2 -18
  69. hikyuu/include/hikyuu/indicator/imp/IBarsLastCount.h +27 -0
  70. hikyuu/include/hikyuu/plugin/backtest.h +3 -2
  71. hikyuu/include/hikyuu/plugin/device.h +6 -3
  72. hikyuu/include/hikyuu/plugin/extind.h +150 -0
  73. hikyuu/include/hikyuu/plugin/interface/BackTestPluginInterface.h +2 -1
  74. hikyuu/include/hikyuu/plugin/interface/DevicePluginInterface.h +1 -0
  75. hikyuu/include/hikyuu/plugin/interface/ExtendIndicatorsPluginInterface.h +26 -0
  76. hikyuu/include/hikyuu/plugin/interface/TMReportPluginInterface.h +80 -0
  77. hikyuu/include/hikyuu/plugin/interface/plugins.h +4 -0
  78. hikyuu/include/hikyuu/strategy/BrokerTradeManager.h +7 -5
  79. hikyuu/include/hikyuu/strategy/Strategy.h +22 -9
  80. hikyuu/include/hikyuu/trade_manage/OrderBrokerBase.h +11 -4
  81. hikyuu/include/hikyuu/trade_manage/Performance.h +17 -9
  82. hikyuu/include/hikyuu/trade_manage/PositionExtInfo.h +92 -0
  83. hikyuu/include/hikyuu/trade_manage/PositionRecord.h +7 -1
  84. hikyuu/include/hikyuu/trade_manage/TradeManager.h +8 -5
  85. hikyuu/include/hikyuu/trade_manage/TradeManagerBase.h +66 -5
  86. hikyuu/include/hikyuu/trade_manage/TradeRecord.h +9 -1
  87. hikyuu/include/hikyuu/trade_sys/multifactor/MultiFactorBase.h +8 -5
  88. hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_EqualWeight.h +4 -1
  89. hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_ICIRWeight.h +4 -1
  90. hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_ICWeight.h +4 -1
  91. hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_Weight.h +4 -1
  92. hikyuu/include/hikyuu/trade_sys/multifactor/imp/EqualWeightMultiFactor.h +2 -1
  93. hikyuu/include/hikyuu/trade_sys/multifactor/imp/ICIRMultiFactor.h +2 -1
  94. hikyuu/include/hikyuu/trade_sys/multifactor/imp/ICMultiFactor.h +2 -1
  95. hikyuu/include/hikyuu/trade_sys/multifactor/imp/WeightMultiFactor.h +1 -1
  96. hikyuu/include/hikyuu/trade_sys/selector/crt/SE_Optimal.h +8 -0
  97. hikyuu/include/hikyuu/trade_sys/selector/imp/optimal/OptimalEvaluateSelector.h +28 -0
  98. hikyuu/include/hikyuu/trade_sys/selector/imp/optimal/OptimalSelectorBase.h +1 -0
  99. hikyuu/include/hikyuu/trade_sys/system/TradeRequest.h +7 -4
  100. hikyuu/include/hikyuu/trade_sys/system/imp/WalkForwardTradeManager.h +17 -13
  101. hikyuu/include/hikyuu/utilities/DllLoader.h +226 -0
  102. hikyuu/include/hikyuu/utilities/datetime/Datetime.h +20 -0
  103. hikyuu/include/hikyuu/utilities/datetime/TimeDelta.h +6 -0
  104. hikyuu/include/hikyuu/utilities/plugin/PluginLoader.h +10 -10
  105. hikyuu/include/hikyuu/utilities/thread/{MQStealThreadPool.h → GlobalMQStealThreadPool.h} +12 -12
  106. hikyuu/include/hikyuu/utilities/thread/GlobalMQThreadPool.h +271 -0
  107. hikyuu/include/hikyuu/utilities/thread/{StealThreadPool.h → GlobalStealThreadPool.h} +11 -10
  108. hikyuu/include/hikyuu/utilities/thread/GlobalThreadPool.h +224 -0
  109. hikyuu/include/hikyuu/utilities/thread/InterruptFlag.h +16 -0
  110. hikyuu/include/hikyuu/utilities/thread/MQThreadPool.h +40 -77
  111. hikyuu/include/hikyuu/utilities/thread/ThreadPool.h +31 -59
  112. hikyuu/include/hikyuu/utilities/thread/ThreadSafeQueue.h +4 -0
  113. hikyuu/include/hikyuu/utilities/thread/algorithm.h +9 -9
  114. hikyuu/include/hikyuu/utilities/thread/thread.h +4 -0
  115. hikyuu/include/hikyuu/version.h +4 -4
  116. hikyuu/plugin/backtest.dll +0 -0
  117. hikyuu/plugin/dataserver.dll +0 -0
  118. hikyuu/plugin/device.dll +0 -0
  119. hikyuu/plugin/extind.dll +0 -0
  120. hikyuu/plugin/import2hdf5.dll +0 -0
  121. hikyuu/plugin/tmreport.dll +0 -0
  122. hikyuu/trade_manage/__init__.pyi +23 -8
  123. hikyuu/trade_manage/broker.py +8 -8
  124. hikyuu/trade_manage/broker.pyi +4 -4
  125. hikyuu/trade_manage/broker_easytrader.py +3 -3
  126. hikyuu/trade_manage/broker_easytrader.pyi +2 -2
  127. hikyuu/trade_manage/broker_mail.py +2 -2
  128. hikyuu/trade_manage/broker_mail.pyi +2 -2
  129. hikyuu/trade_manage/trade.pyi +23 -8
  130. hikyuu/util/singleton.pyi +1 -1
  131. {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/METADATA +4 -3
  132. {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/RECORD +136 -121
  133. {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/LICENSE +0 -0
  134. {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/WHEEL +0 -0
  135. {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/entry_points.txt +0 -0
  136. {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Form implementation generated from reading ui file 'MainWindow.ui'
4
4
  #
5
- # Created by: PyQt5 UI code generator 5.15.10
5
+ # Created by: PyQt5 UI code generator 5.15.11
6
6
  #
7
7
  # WARNING: Any manual changes made to this file will be lost when pyuic5 is
8
8
  # run again. Do not edit this file unless you know what you are doing.
@@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
14
14
  class Ui_MainWindow(object):
15
15
  def setupUi(self, MainWindow):
16
16
  MainWindow.setObjectName("MainWindow")
17
- MainWindow.resize(1269, 797)
17
+ MainWindow.resize(1178, 746)
18
18
  self.centralwidget = QtWidgets.QWidget(MainWindow)
19
19
  self.centralwidget.setObjectName("centralwidget")
20
20
  self.horizontalLayout_12 = QtWidgets.QHBoxLayout(self.centralwidget)
@@ -115,6 +115,12 @@ class Ui_MainWindow(object):
115
115
  self.import_weight_checkBox = QtWidgets.QCheckBox(self.groupBox_7)
116
116
  self.import_weight_checkBox.setObjectName("import_weight_checkBox")
117
117
  self.horizontalLayout_4.addWidget(self.import_weight_checkBox)
118
+ self.import_history_finance_checkBox = QtWidgets.QCheckBox(self.groupBox_7)
119
+ self.import_history_finance_checkBox.setObjectName("import_history_finance_checkBox")
120
+ self.horizontalLayout_4.addWidget(self.import_history_finance_checkBox)
121
+ self.import_block_checkBox = QtWidgets.QCheckBox(self.groupBox_7)
122
+ self.import_block_checkBox.setObjectName("import_block_checkBox")
123
+ self.horizontalLayout_4.addWidget(self.import_block_checkBox)
118
124
  self.verticalLayout_11.addLayout(self.horizontalLayout_4)
119
125
  self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
120
126
  self.horizontalLayout_3.setContentsMargins(10, -1, -1, -1)
@@ -172,7 +178,7 @@ class Ui_MainWindow(object):
172
178
  self.label_6.setObjectName("label_6")
173
179
  self.gridLayout_4.addWidget(self.label_6, 3, 0, 1, 1)
174
180
  self.min5_start_dateEdit = QtWidgets.QDateEdit(self.groupBox_7)
175
- self.min5_start_dateEdit.setMinimumDateTime(QtCore.QDateTime(QtCore.QDate(1989, 12, 27), QtCore.QTime(8, 0, 0)))
181
+ self.min5_start_dateEdit.setMinimumDateTime(QtCore.QDateTime(QtCore.QDate(1989, 12, 24), QtCore.QTime(16, 0, 0)))
176
182
  self.min5_start_dateEdit.setCalendarPopup(True)
177
183
  self.min5_start_dateEdit.setObjectName("min5_start_dateEdit")
178
184
  self.gridLayout_4.addWidget(self.min5_start_dateEdit, 1, 1, 1, 1)
@@ -194,7 +200,7 @@ class Ui_MainWindow(object):
194
200
  self.trans_start_dateEdit.setObjectName("trans_start_dateEdit")
195
201
  self.gridLayout_4.addWidget(self.trans_start_dateEdit, 3, 1, 1, 1)
196
202
  self.day_start_dateEdit = QtWidgets.QDateEdit(self.groupBox_7)
197
- self.day_start_dateEdit.setMinimumDateTime(QtCore.QDateTime(QtCore.QDate(1989, 12, 27), QtCore.QTime(8, 0, 0)))
203
+ self.day_start_dateEdit.setMinimumDateTime(QtCore.QDateTime(QtCore.QDate(1989, 12, 24), QtCore.QTime(16, 0, 0)))
198
204
  self.day_start_dateEdit.setCalendarPopup(True)
199
205
  self.day_start_dateEdit.setObjectName("day_start_dateEdit")
200
206
  self.gridLayout_4.addWidget(self.day_start_dateEdit, 0, 1, 1, 1)
@@ -265,33 +271,32 @@ class Ui_MainWindow(object):
265
271
  spacerItem10 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
266
272
  self.verticalLayout_9.addItem(spacerItem10)
267
273
  self.groupBox = QtWidgets.QGroupBox(self.tab_3)
274
+ self.groupBox.setFlat(False)
275
+ self.groupBox.setCheckable(False)
268
276
  self.groupBox.setObjectName("groupBox")
269
277
  self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.groupBox)
270
278
  self.verticalLayout_8.setObjectName("verticalLayout_8")
271
279
  self.gridLayout_5 = QtWidgets.QGridLayout()
272
280
  self.gridLayout_5.setContentsMargins(10, 10, -1, 10)
273
281
  self.gridLayout_5.setObjectName("gridLayout_5")
274
- self.label_18 = QtWidgets.QLabel(self.groupBox)
275
- self.label_18.setObjectName("label_18")
276
- self.gridLayout_5.addWidget(self.label_18, 2, 0, 1, 1)
277
- self.mysql_pwd_lineEdit = QtWidgets.QLineEdit(self.groupBox)
278
- self.mysql_pwd_lineEdit.setObjectName("mysql_pwd_lineEdit")
279
- self.gridLayout_5.addWidget(self.mysql_pwd_lineEdit, 5, 1, 1, 1)
280
- self.label_20 = QtWidgets.QLabel(self.groupBox)
281
- self.label_20.setObjectName("label_20")
282
- self.gridLayout_5.addWidget(self.label_20, 0, 0, 1, 1)
283
- self.mysql_ip_lineEdit = QtWidgets.QLineEdit(self.groupBox)
284
- self.mysql_ip_lineEdit.setObjectName("mysql_ip_lineEdit")
285
- self.gridLayout_5.addWidget(self.mysql_ip_lineEdit, 2, 1, 1, 1)
282
+ self.mysql_usr_lineEdit = QtWidgets.QLineEdit(self.groupBox)
283
+ self.mysql_usr_lineEdit.setObjectName("mysql_usr_lineEdit")
284
+ self.gridLayout_5.addWidget(self.mysql_usr_lineEdit, 3, 1, 1, 1)
286
285
  self.label_11 = QtWidgets.QLabel(self.groupBox)
287
286
  self.label_11.setObjectName("label_11")
288
- self.gridLayout_5.addWidget(self.label_11, 4, 0, 1, 1)
287
+ self.gridLayout_5.addWidget(self.label_11, 3, 0, 1, 1)
289
288
  self.mysql_port_lineEdit = QtWidgets.QLineEdit(self.groupBox)
290
289
  self.mysql_port_lineEdit.setObjectName("mysql_port_lineEdit")
291
- self.gridLayout_5.addWidget(self.mysql_port_lineEdit, 3, 1, 1, 1)
292
- self.mysql_usr_lineEdit = QtWidgets.QLineEdit(self.groupBox)
293
- self.mysql_usr_lineEdit.setObjectName("mysql_usr_lineEdit")
294
- self.gridLayout_5.addWidget(self.mysql_usr_lineEdit, 4, 1, 1, 1)
290
+ self.gridLayout_5.addWidget(self.mysql_port_lineEdit, 2, 1, 1, 1)
291
+ self.label_19 = QtWidgets.QLabel(self.groupBox)
292
+ self.label_19.setObjectName("label_19")
293
+ self.gridLayout_5.addWidget(self.label_19, 2, 0, 1, 1)
294
+ self.mysql_ip_lineEdit = QtWidgets.QLineEdit(self.groupBox)
295
+ self.mysql_ip_lineEdit.setObjectName("mysql_ip_lineEdit")
296
+ self.gridLayout_5.addWidget(self.mysql_ip_lineEdit, 1, 1, 1, 1)
297
+ self.label_13 = QtWidgets.QLabel(self.groupBox)
298
+ self.label_13.setObjectName("label_13")
299
+ self.gridLayout_5.addWidget(self.label_13, 4, 0, 1, 1)
295
300
  self.mysql_tmpdir_lineEdit = QtWidgets.QLineEdit(self.groupBox)
296
301
  self.mysql_tmpdir_lineEdit.setObjectName("mysql_tmpdir_lineEdit")
297
302
  self.gridLayout_5.addWidget(self.mysql_tmpdir_lineEdit, 0, 1, 1, 1)
@@ -300,26 +305,27 @@ class Ui_MainWindow(object):
300
305
  self.gridLayout_5.addWidget(self.mysql_tmpdir_pushButton, 0, 2, 1, 1)
301
306
  self.mysql_test_pushButton = QtWidgets.QPushButton(self.groupBox)
302
307
  self.mysql_test_pushButton.setObjectName("mysql_test_pushButton")
303
- self.gridLayout_5.addWidget(self.mysql_test_pushButton, 3, 2, 1, 1)
304
- self.label_19 = QtWidgets.QLabel(self.groupBox)
305
- self.label_19.setObjectName("label_19")
306
- self.gridLayout_5.addWidget(self.label_19, 3, 0, 1, 1)
307
- self.label_13 = QtWidgets.QLabel(self.groupBox)
308
- self.label_13.setObjectName("label_13")
309
- self.gridLayout_5.addWidget(self.label_13, 5, 0, 1, 1)
310
- spacerItem11 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
311
- self.gridLayout_5.addItem(spacerItem11, 1, 0, 1, 1)
308
+ self.gridLayout_5.addWidget(self.mysql_test_pushButton, 2, 2, 1, 1)
309
+ self.label_20 = QtWidgets.QLabel(self.groupBox)
310
+ self.label_20.setObjectName("label_20")
311
+ self.gridLayout_5.addWidget(self.label_20, 0, 0, 1, 1)
312
+ self.label_18 = QtWidgets.QLabel(self.groupBox)
313
+ self.label_18.setObjectName("label_18")
314
+ self.gridLayout_5.addWidget(self.label_18, 1, 0, 1, 1)
315
+ self.mysql_pwd_lineEdit = QtWidgets.QLineEdit(self.groupBox)
316
+ self.mysql_pwd_lineEdit.setObjectName("mysql_pwd_lineEdit")
317
+ self.gridLayout_5.addWidget(self.mysql_pwd_lineEdit, 4, 1, 1, 1)
312
318
  self.verticalLayout_8.addLayout(self.gridLayout_5)
313
- spacerItem12 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
314
- self.verticalLayout_8.addItem(spacerItem12)
315
319
  self.verticalLayout_9.addWidget(self.groupBox)
320
+ spacerItem11 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
321
+ self.verticalLayout_9.addItem(spacerItem11)
316
322
  self.tabWidget.addTab(self.tab_3, "")
317
323
  self.tab_2 = QtWidgets.QWidget()
318
324
  self.tab_2.setObjectName("tab_2")
319
325
  self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.tab_2)
320
326
  self.verticalLayout_7.setObjectName("verticalLayout_7")
321
- spacerItem13 = QtWidgets.QSpacerItem(20, 9, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
322
- self.verticalLayout_7.addItem(spacerItem13)
327
+ spacerItem12 = QtWidgets.QSpacerItem(20, 9, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
328
+ self.verticalLayout_7.addItem(spacerItem12)
323
329
  self.label_43 = QtWidgets.QLabel(self.tab_2)
324
330
  self.label_43.setObjectName("label_43")
325
331
  self.verticalLayout_7.addWidget(self.label_43)
@@ -337,12 +343,12 @@ class Ui_MainWindow(object):
337
343
  self.sched_import_timeEdit = QtWidgets.QTimeEdit(self.tab_2)
338
344
  self.sched_import_timeEdit.setObjectName("sched_import_timeEdit")
339
345
  self.horizontalLayout_14.addWidget(self.sched_import_timeEdit)
340
- spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
341
- self.horizontalLayout_14.addItem(spacerItem14)
346
+ spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
347
+ self.horizontalLayout_14.addItem(spacerItem13)
342
348
  self.horizontalLayout_11.addLayout(self.horizontalLayout_14)
343
349
  self.verticalLayout_7.addLayout(self.horizontalLayout_11)
344
- spacerItem15 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
345
- self.verticalLayout_7.addItem(spacerItem15)
350
+ spacerItem14 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
351
+ self.verticalLayout_7.addItem(spacerItem14)
346
352
  self.horizontalLayout_18 = QtWidgets.QHBoxLayout()
347
353
  self.horizontalLayout_18.setContentsMargins(10, -1, 10, -1)
348
354
  self.horizontalLayout_18.setObjectName("horizontalLayout_18")
@@ -352,11 +358,11 @@ class Ui_MainWindow(object):
352
358
  self.import_status_label = QtWidgets.QLabel(self.tab_2)
353
359
  self.import_status_label.setObjectName("import_status_label")
354
360
  self.horizontalLayout_18.addWidget(self.import_status_label)
355
- spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
356
- self.horizontalLayout_18.addItem(spacerItem16)
361
+ spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
362
+ self.horizontalLayout_18.addItem(spacerItem15)
357
363
  self.verticalLayout_7.addLayout(self.horizontalLayout_18)
358
- spacerItem17 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
359
- self.verticalLayout_7.addItem(spacerItem17)
364
+ spacerItem16 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
365
+ self.verticalLayout_7.addItem(spacerItem16)
360
366
  self.groupBox_5 = QtWidgets.QGroupBox(self.tab_2)
361
367
  self.groupBox_5.setObjectName("groupBox_5")
362
368
  self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.groupBox_5)
@@ -404,11 +410,11 @@ class Ui_MainWindow(object):
404
410
  self.label_9 = QtWidgets.QLabel(self.groupBox_5)
405
411
  self.label_9.setObjectName("label_9")
406
412
  self.gridLayout.addWidget(self.label_9, 5, 0, 1, 1)
407
- spacerItem18 = QtWidgets.QSpacerItem(5, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
408
- self.gridLayout.addItem(spacerItem18, 0, 2, 1, 1)
413
+ spacerItem17 = QtWidgets.QSpacerItem(5, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
414
+ self.gridLayout.addItem(spacerItem17, 0, 2, 1, 1)
409
415
  self.verticalLayout_5.addLayout(self.gridLayout)
410
- spacerItem19 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
411
- self.verticalLayout_5.addItem(spacerItem19)
416
+ spacerItem18 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
417
+ self.verticalLayout_5.addItem(spacerItem18)
412
418
  self.import_detail_textEdit = QtWidgets.QTextEdit(self.groupBox_5)
413
419
  self.import_detail_textEdit.setFrameShape(QtWidgets.QFrame.NoFrame)
414
420
  self.import_detail_textEdit.setReadOnly(True)
@@ -434,8 +440,8 @@ class Ui_MainWindow(object):
434
440
  self.label_36.setObjectName("label_36")
435
441
  self.verticalLayout.addWidget(self.label_36)
436
442
  self.verticalLayout_4.addLayout(self.verticalLayout)
437
- spacerItem20 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
438
- self.verticalLayout_4.addItem(spacerItem20)
443
+ spacerItem19 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
444
+ self.verticalLayout_4.addItem(spacerItem19)
439
445
  self.gridLayout_6 = QtWidgets.QGridLayout()
440
446
  self.gridLayout_6.setContentsMargins(20, -1, -1, -1)
441
447
  self.gridLayout_6.setObjectName("gridLayout_6")
@@ -529,8 +535,8 @@ class Ui_MainWindow(object):
529
535
  self.preload_week_checkBox = QtWidgets.QCheckBox(self.groupBox_6)
530
536
  self.preload_week_checkBox.setObjectName("preload_week_checkBox")
531
537
  self.gridLayout_6.addWidget(self.preload_week_checkBox, 1, 0, 1, 1)
532
- spacerItem21 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
533
- self.gridLayout_6.addItem(spacerItem21, 4, 3, 1, 1)
538
+ spacerItem20 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
539
+ self.gridLayout_6.addItem(spacerItem20, 4, 3, 1, 1)
534
540
  self.preload_quarter_checkBox = QtWidgets.QCheckBox(self.groupBox_6)
535
541
  self.preload_quarter_checkBox.setObjectName("preload_quarter_checkBox")
536
542
  self.gridLayout_6.addWidget(self.preload_quarter_checkBox, 3, 0, 1, 1)
@@ -565,16 +571,16 @@ class Ui_MainWindow(object):
565
571
  self.preload_year_spinBox.setObjectName("preload_year_spinBox")
566
572
  self.gridLayout_6.addWidget(self.preload_year_spinBox, 5, 2, 1, 1)
567
573
  self.verticalLayout_4.addLayout(self.gridLayout_6)
568
- spacerItem22 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
569
- self.verticalLayout_4.addItem(spacerItem22)
574
+ spacerItem21 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
575
+ self.verticalLayout_4.addItem(spacerItem21)
570
576
  self.verticalLayout_3.addWidget(self.groupBox_6)
571
577
  self.tabWidget.addTab(self.tab_6, "")
572
578
  self.tab = QtWidgets.QWidget()
573
579
  self.tab.setObjectName("tab")
574
580
  self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab)
575
581
  self.verticalLayout_2.setObjectName("verticalLayout_2")
576
- spacerItem23 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
577
- self.verticalLayout_2.addItem(spacerItem23)
582
+ spacerItem22 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
583
+ self.verticalLayout_2.addItem(spacerItem22)
578
584
  self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
579
585
  self.horizontalLayout_15.setContentsMargins(20, -1, -1, -1)
580
586
  self.horizontalLayout_15.setObjectName("horizontalLayout_15")
@@ -584,11 +590,11 @@ class Ui_MainWindow(object):
584
590
  self.collect_status_label = QtWidgets.QLabel(self.tab)
585
591
  self.collect_status_label.setObjectName("collect_status_label")
586
592
  self.horizontalLayout_15.addWidget(self.collect_status_label)
587
- spacerItem24 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
588
- self.horizontalLayout_15.addItem(spacerItem24)
593
+ spacerItem23 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
594
+ self.horizontalLayout_15.addItem(spacerItem23)
589
595
  self.verticalLayout_2.addLayout(self.horizontalLayout_15)
590
- spacerItem25 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
591
- self.verticalLayout_2.addItem(spacerItem25)
596
+ spacerItem24 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
597
+ self.verticalLayout_2.addItem(spacerItem24)
592
598
  self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
593
599
  self.horizontalLayout_13.setContentsMargins(20, -1, -1, -1)
594
600
  self.horizontalLayout_13.setObjectName("horizontalLayout_13")
@@ -600,11 +606,11 @@ class Ui_MainWindow(object):
600
606
  self.collect_source_comboBox.addItem("")
601
607
  self.collect_source_comboBox.addItem("")
602
608
  self.horizontalLayout_13.addWidget(self.collect_source_comboBox)
603
- spacerItem26 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
604
- self.horizontalLayout_13.addItem(spacerItem26)
609
+ spacerItem25 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
610
+ self.horizontalLayout_13.addItem(spacerItem25)
605
611
  self.verticalLayout_2.addLayout(self.horizontalLayout_13)
606
- spacerItem27 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
607
- self.verticalLayout_2.addItem(spacerItem27)
612
+ spacerItem26 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
613
+ self.verticalLayout_2.addItem(spacerItem26)
608
614
  self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
609
615
  self.horizontalLayout_10.setContentsMargins(20, -1, -1, -1)
610
616
  self.horizontalLayout_10.setObjectName("horizontalLayout_10")
@@ -615,11 +621,11 @@ class Ui_MainWindow(object):
615
621
  self.collect_sample_spinBox.setMaximum(86400)
616
622
  self.collect_sample_spinBox.setObjectName("collect_sample_spinBox")
617
623
  self.horizontalLayout_10.addWidget(self.collect_sample_spinBox)
618
- spacerItem28 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
619
- self.horizontalLayout_10.addItem(spacerItem28)
624
+ spacerItem27 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
625
+ self.horizontalLayout_10.addItem(spacerItem27)
620
626
  self.verticalLayout_2.addLayout(self.horizontalLayout_10)
621
- spacerItem29 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
622
- self.verticalLayout_2.addItem(spacerItem29)
627
+ spacerItem28 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
628
+ self.verticalLayout_2.addItem(spacerItem28)
623
629
  self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
624
630
  self.horizontalLayout_8.setContentsMargins(20, -1, -1, -1)
625
631
  self.horizontalLayout_8.setObjectName("horizontalLayout_8")
@@ -638,8 +644,8 @@ class Ui_MainWindow(object):
638
644
  self.collect_phase1_last_timeEdit = QtWidgets.QTimeEdit(self.tab)
639
645
  self.collect_phase1_last_timeEdit.setObjectName("collect_phase1_last_timeEdit")
640
646
  self.horizontalLayout_6.addWidget(self.collect_phase1_last_timeEdit)
641
- spacerItem30 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
642
- self.horizontalLayout_6.addItem(spacerItem30)
647
+ spacerItem29 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
648
+ self.horizontalLayout_6.addItem(spacerItem29)
643
649
  self.horizontalLayout_8.addLayout(self.horizontalLayout_6)
644
650
  self.verticalLayout_2.addLayout(self.horizontalLayout_8)
645
651
  self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
@@ -660,12 +666,12 @@ class Ui_MainWindow(object):
660
666
  self.collect_phase2_last_timeEdit = QtWidgets.QTimeEdit(self.tab)
661
667
  self.collect_phase2_last_timeEdit.setObjectName("collect_phase2_last_timeEdit")
662
668
  self.horizontalLayout_7.addWidget(self.collect_phase2_last_timeEdit)
663
- spacerItem31 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
664
- self.horizontalLayout_7.addItem(spacerItem31)
669
+ spacerItem30 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
670
+ self.horizontalLayout_7.addItem(spacerItem30)
665
671
  self.horizontalLayout_9.addLayout(self.horizontalLayout_7)
666
672
  self.verticalLayout_2.addLayout(self.horizontalLayout_9)
667
- spacerItem32 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
668
- self.verticalLayout_2.addItem(spacerItem32)
673
+ spacerItem31 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
674
+ self.verticalLayout_2.addItem(spacerItem31)
669
675
  self.horizontalLayout_16 = QtWidgets.QHBoxLayout()
670
676
  self.horizontalLayout_16.setContentsMargins(20, 0, -1, -1)
671
677
  self.horizontalLayout_16.setObjectName("horizontalLayout_16")
@@ -678,8 +684,8 @@ class Ui_MainWindow(object):
678
684
  self.collect_use_zhima_checkBox.setObjectName("collect_use_zhima_checkBox")
679
685
  self.horizontalLayout_16.addWidget(self.collect_use_zhima_checkBox)
680
686
  self.verticalLayout_2.addLayout(self.horizontalLayout_16)
681
- spacerItem33 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
682
- self.verticalLayout_2.addItem(spacerItem33)
687
+ spacerItem32 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
688
+ self.verticalLayout_2.addItem(spacerItem32)
683
689
  self.horizontalLayout_17 = QtWidgets.QHBoxLayout()
684
690
  self.horizontalLayout_17.setContentsMargins(20, 0, -1, -1)
685
691
  self.horizontalLayout_17.setObjectName("horizontalLayout_17")
@@ -698,11 +704,11 @@ class Ui_MainWindow(object):
698
704
  self.label_44.setScaledContents(True)
699
705
  self.label_44.setObjectName("label_44")
700
706
  self.label_46 = QtWidgets.QLabel(self.tab_star)
701
- self.label_46.setGeometry(QtCore.QRect(30, 20, 561, 221))
707
+ self.label_46.setGeometry(QtCore.QRect(30, 20, 501, 211))
702
708
  self.label_46.setWordWrap(True)
703
709
  self.label_46.setObjectName("label_46")
704
710
  self.line_2 = QtWidgets.QFrame(self.tab_star)
705
- self.line_2.setGeometry(QtCore.QRect(30, 240, 531, 16))
711
+ self.line_2.setGeometry(QtCore.QRect(30, 240, 511, 16))
706
712
  self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
707
713
  self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
708
714
  self.line_2.setObjectName("line_2")
@@ -713,7 +719,7 @@ class Ui_MainWindow(object):
713
719
  self.label_47.setFont(font)
714
720
  self.label_47.setObjectName("label_47")
715
721
  self.line_3 = QtWidgets.QFrame(self.tab_star)
716
- self.line_3.setGeometry(QtCore.QRect(30, 330, 531, 16))
722
+ self.line_3.setGeometry(QtCore.QRect(30, 330, 511, 16))
717
723
  self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
718
724
  self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
719
725
  self.line_3.setObjectName("line_3")
@@ -724,7 +730,7 @@ class Ui_MainWindow(object):
724
730
  self.label_48.setFont(font)
725
731
  self.label_48.setObjectName("label_48")
726
732
  self.line_4 = QtWidgets.QFrame(self.tab_star)
727
- self.line_4.setGeometry(QtCore.QRect(30, 560, 531, 16))
733
+ self.line_4.setGeometry(QtCore.QRect(30, 560, 511, 16))
728
734
  self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
729
735
  self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
730
736
  self.line_4.setObjectName("line_4")
@@ -735,10 +741,10 @@ class Ui_MainWindow(object):
735
741
  self.label_49.setFont(font)
736
742
  self.label_49.setObjectName("label_49")
737
743
  self.label_license = QtWidgets.QLabel(self.tab_star)
738
- self.label_license.setGeometry(QtCore.QRect(40, 610, 521, 91))
744
+ self.label_license.setGeometry(QtCore.QRect(40, 610, 511, 81))
739
745
  self.label_license.setObjectName("label_license")
740
746
  self.layoutWidget = QtWidgets.QWidget(self.tab_star)
741
- self.layoutWidget.setGeometry(QtCore.QRect(40, 290, 511, 33))
747
+ self.layoutWidget.setGeometry(QtCore.QRect(40, 290, 501, 33))
742
748
  self.layoutWidget.setObjectName("layoutWidget")
743
749
  self.horizontalLayout_20 = QtWidgets.QHBoxLayout(self.layoutWidget)
744
750
  self.horizontalLayout_20.setContentsMargins(0, 0, 0, 0)
@@ -784,6 +790,8 @@ class Ui_MainWindow(object):
784
790
  self.qmt_radioButton.setText(_translate("MainWindow", "使用 qmt 数据下载(需要 miniqmt)(屏蔽,qmt下载数据太慢,且不稳定)"))
785
791
  self.groupBox_7.setTitle(_translate("MainWindow", "导入设置"))
786
792
  self.import_weight_checkBox.setText(_translate("MainWindow", "下载权息数据"))
793
+ self.import_history_finance_checkBox.setText(_translate("MainWindow", "下载历史财务数据"))
794
+ self.import_block_checkBox.setText(_translate("MainWindow", "下载行业与指数板块"))
787
795
  self.import_stock_checkBox.setText(_translate("MainWindow", "股票"))
788
796
  self.import_fund_checkBox.setText(_translate("MainWindow", "基金"))
789
797
  self.import_future_checkBox.setText(_translate("MainWindow", "期货"))
@@ -805,13 +813,13 @@ class Ui_MainWindow(object):
805
813
  self.hdf5_dir_pushButton.setText(_translate("MainWindow", "选择"))
806
814
  self.label.setText(_translate("MainWindow", "目标数据(HDF5)存放目录:"))
807
815
  self.groupBox.setTitle(_translate("MainWindow", "MYSQL存储设置"))
808
- self.label_18.setText(_translate("MainWindow", "主机名/IP:"))
809
- self.label_20.setText(_translate("MainWindow", "临时文件目录:"))
810
816
  self.label_11.setText(_translate("MainWindow", "用户名:"))
811
- self.mysql_tmpdir_pushButton.setText(_translate("MainWindow", "选择"))
812
- self.mysql_test_pushButton.setText(_translate("MainWindow", "测试连接"))
813
817
  self.label_19.setText(_translate("MainWindow", "端口号:"))
814
818
  self.label_13.setText(_translate("MainWindow", "密码"))
819
+ self.mysql_tmpdir_pushButton.setText(_translate("MainWindow", "选择"))
820
+ self.mysql_test_pushButton.setText(_translate("MainWindow", "测试连接"))
821
+ self.label_20.setText(_translate("MainWindow", "临时文件目录:"))
822
+ self.label_18.setText(_translate("MainWindow", "主机名/IP:"))
815
823
  self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "存储设置"))
816
824
  self.label_43.setText(_translate("MainWindow", " 注:HDF5存储导入时,请关闭其他 hikyuu 进程,HDF5不支持同时读写!"))
817
825
  self.sched_import_pushButton.setText(_translate("MainWindow", "启动定时导入"))
@@ -832,19 +840,19 @@ class Ui_MainWindow(object):
832
840
  "hr { height: 1px; border-width: 0; }\n"
833
841
  "li.unchecked::marker { content: \"\\2610\"; }\n"
834
842
  "li.checked::marker { content: \"\\2612\"; }\n"
835
- "</style></head><body style=\" font-family:\'Microsoft YaHei UI\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
836
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入上证日线记录:</span></p>\n"
837
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入深证日线记录:</span></p>\n"
838
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入上证5分钟线记录:</span></p>\n"
839
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入深证5分钟线记录:</span></p>\n"
840
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入上证1分钟线记录:</span></p>\n"
841
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入深证1分钟线记录:</span></p>\n"
842
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入上证分笔记录:</span></p>\n"
843
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入深证分笔记录:</span></p>\n"
844
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入上证分时数据:</span></p>\n"
845
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入深证分时数据:</span></p>\n"
846
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入权息数据数:</span></p>\n"
847
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">导入完毕!</span></p></body></html>"))
843
+ "</style></head><body style=\" font-family:\'.AppleSystemUIFont\'; font-size:13pt; font-weight:400; font-style:normal;\">\n"
844
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入上证日线记录:</span></p>\n"
845
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入深证日线记录:</span></p>\n"
846
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入上证5分钟线记录:</span></p>\n"
847
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入深证5分钟线记录:</span></p>\n"
848
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入上证1分钟线记录:</span></p>\n"
849
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入深证1分钟线记录:</span></p>\n"
850
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入上证分笔记录:</span></p>\n"
851
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入深证分笔记录:</span></p>\n"
852
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入上证分时数据:</span></p>\n"
853
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入深证分时数据:</span></p>\n"
854
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入权息数据数:</span></p>\n"
855
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">导入完毕!</span></p></body></html>"))
848
856
  self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "执行导入"))
849
857
  self.groupBox_6.setTitle(_translate("MainWindow", "预加载设置"))
850
858
  self.label_35.setText(_translate("MainWindow", "此处为 Hikyuu 运行时的数据预加载设置,请根据机器内存大小选择"))
@@ -892,20 +900,29 @@ class Ui_MainWindow(object):
892
900
  "hr { height: 1px; border-width: 0; }\n"
893
901
  "li.unchecked::marker { content: \"\\2610\"; }\n"
894
902
  "li.checked::marker { content: \"\\2612\"; }\n"
895
- "</style></head><body style=\" font-family:\'Microsoft YaHei UI\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
896
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">注:</span></p>\n"
897
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:10pt; font-weight:600; color:#ff0000;\">1、行情采集服务仅对预加载数据有效</span><span style=\" font-family:\'SimSun\';\">,在行情采集服务运行期间,hikyuu.interactive运行时将自动连接采集服务获取行情数据,并更新预加载的内容数据。</span></p>\n"
898
- "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'SimSun\';\"><br /></p>\n"
899
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">2、如使用芝麻代理(</span><a href=\"http://h.zhimaruanjian.com/\"><span style=\" font-family:\'SimSun\'; text-decoration: underline; color:#0000ff;\">http://h.zhimaruanjian.com/</span></a><span style=\" font-family:\'SimSun\';\">),请自行申请(需付费),并确保ip为其白名单。</span></p>\n"
900
- "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'SimSun\';\"><br /></p>\n"
901
- "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-weight:696; color:#0000ff;\">3、此处采集为网络采集,更推荐直接运行安装目录下gui子目录下的 start_qmt.py ,使用miniqmt 实时服务。该程序独立运行,不用关闭,和这里的采集效果一样。注意:miniqmt需要QMT交易端配合,且在同一机器上执行。</span></p></body></html>"))
903
+ "</style></head><body style=\" font-family:\'.AppleSystemUIFont\'; font-size:13pt; font-weight:400; font-style:normal;\">\n"
904
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">注:</span></p>\n"
905
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:10pt; font-weight:600; color:#ff0000;\">1、行情采集服务仅对预加载数据有效</span><span style=\" font-family:\'SimSun\'; font-size:9pt;\">,在行情采集服务运行期间,hikyuu.interactive运行时将自动连接采集服务获取行情数据,并更新预加载的内容数据。</span></p>\n"
906
+ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'SimSun\'; font-size:9pt;\"><br /></p>\n"
907
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt;\">2、如使用芝麻代理(</span><a href=\"http://h.zhimaruanjian.com/\"><span style=\" font-family:\'SimSun\'; font-size:9pt; text-decoration: underline; color:#0000ff;\">http://h.zhimaruanjian.com/</span></a><span style=\" font-family:\'SimSun\'; font-size:9pt;\">),请自行申请(需付费),并确保ip为其白名单。</span></p>\n"
908
+ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'SimSun\'; font-size:9pt;\"><br /></p>\n"
909
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:696; color:#0000ff;\">3、此处采集为网络采集,更推荐直接运行安装目录下gui子目录下的 start_qmt.py ,使用miniqmt 实时服务。该程序独立运行,不用关闭,和这里的采集效果一样。注意:miniqmt需要QMT交易端配合,且在同一机器上执行。</span></p></body></html>"))
902
910
  self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "行情采集服务"))
903
- self.label_46.setText(_translate("MainWindow", "<html><head/><body><p>Hikyuu 作为长期持续维护的开源项目,<span style=\" font-weight:700;\">专注于量化交易领域的核心技术构建,涵盖交易模型开发、极速计算引擎、高效回测框架及实盘拓展能力</span>,定位为量化交易的基础设施级计算引擎,为量化交易爱好者和专业提供高性能底层架构支持。随着社区规模扩大,项目持续迭代及技术支持事务逐渐分散了作者在策略研究上的精力。为保障项目的专注度与可持续性,现推出 &quot;VIP计划&quot;,通过提供部分VIP功能作为回馈,构建良性的项目发展生态。诚挚期待社区伙伴的支持,您的参与都将直接助力 Hikyuu 的技术创新,共同推动量化交易基础设施的迭代升级。</p><p>VIP功能以插件的方式提供,采用独立授权许可,完全在 hikyuu 之外,对喜欢自行编译扩展的朋友没有影响。因插件许可授权需要采集硬件信息,如有疑虑只要不申请试用许可和正式许可授权,不会触发硬件信息采集。</p><p><span style=\" font-weight:700;\">正式许可授权除资金支持外,亦可通过其他方式获取,详情参见:</span><a href=\"https://gitee.com/fasiondog/hikyuu/blob/master/vip-plan.md\"><span style=\" font-weight:700; text-decoration: underline; color:#3586ff;\">VIP计划</span></a><span style=\" font-weight:700;\"> 中 &quot;如何获取免费授权和延长授权时间&quot; 章节,已提供的VIP功能亦在其中,可自行查看,感谢大家的支持!</span></p></body></html>"))
911
+ self.label_46.setText(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
912
+ "<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
913
+ "p, li { white-space: pre-wrap; }\n"
914
+ "hr { height: 1px; border-width: 0; }\n"
915
+ "li.unchecked::marker { content: \"\\2610\"; }\n"
916
+ "li.checked::marker { content: \"\\2612\"; }\n"
917
+ "</style></head><body style=\" font-family:\'.AppleSystemUIFont\'; font-size:13pt; font-weight:400; font-style:normal;\">\n"
918
+ "<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Hikyuu <span style=\" font-weight:700;\">专注于量化交易领域的核心技术构建,涵盖交易模型开发、极速计算引擎、高效回测框架及实盘拓展能力</span>,定位为量化交易的基础设施级计算引擎,为量化交易爱好者和专业提供高性能底层架构支持。随着社区规模扩大,项目持续迭代及技术支持事务逐渐分散了作者在策略研究上的精力。为保障项目的专注度与可持续性,现对捐赠用户提供部分额外功能作为回馈。诚挚期待社区伙伴的支持,您的参与都将直接助力 Hikyuu 的技术创新,共同推动量化交易基础设施的迭代升级。</p>\n"
919
+ "<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">捐赠功能以插件的方式提供,采用独立授权许可,完全在 hikyuu 之外,对喜欢自行编译扩展的朋友没有影响。因插件许可授权需要采集硬件信息,如有疑虑只要不申请试用许可和正式许可授权,不会触发硬件信息采集,如申请,视为同意采集。</p>\n"
920
+ "<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:700;\">详情参见:</span><a href=\"https://hikyuu.readthedocs.io/zh-cn/latest/vip/vip-plan.html\"><span style=\" text-decoration: underline; color:#3586ff;\">捐赠权益</span></a><span style=\" font-weight:700;\"> ,感谢大家的支持!</span></p></body></html>"))
904
921
  self.label_47.setText(_translate("MainWindow", "申请试用许可(30天试用)"))
905
922
  self.label_48.setText(_translate("MainWindow", "加入知识星球,获取星球许可(可同时在3台设备上使用)"))
906
923
  self.label_49.setText(_translate("MainWindow", "当前授权信息"))
907
924
  self.label_license.setText(_translate("MainWindow", "TextLabel"))
908
925
  self.label_45.setText(_translate("MainWindow", "电子邮件地址:"))
909
926
  self.fetch_trial_pushButton.setText(_translate("MainWindow", "申请试用许可"))
910
- self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_star), _translate("MainWindow", "项目VIP"))
927
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_star), _translate("MainWindow", "项目捐赠"))
911
928
  self.label_41.setText(_translate("MainWindow", "执行日志"))
@@ -90,8 +90,10 @@ class UsePytdxImportToH5Thread(QThread):
90
90
  self.tasks.append(
91
91
  ImportHistoryFinanceTask(self.log_queue, self.queue, self.config, dest_dir))
92
92
 
93
- self.tasks.append(ImportBlockInfoTask(self.log_queue, self.queue,
94
- self.config, ('行业板块', '概念板块', '地域板块', '指数板块')))
93
+ if self.config.getboolean('block', 'enable', fallback=True):
94
+ self.tasks.append(ImportBlockInfoTask(self.log_queue, self.queue,
95
+ self.config, ('行业板块', '指数板块'))) # '概念板块', '地域板块',
96
+
95
97
  self.tasks.append(ImportZhBond10Task(self.log_queue, self.queue, self.config))
96
98
 
97
99
  task_count = 0
@@ -251,7 +253,7 @@ class UsePytdxImportToH5Thread(QThread):
251
253
  import_new_holidays = sqlite_import_new_holidays
252
254
  import_index_name = sqlite_import_index_name
253
255
  import_stock_name = sqlite_import_stock_name
254
- else:
256
+ elif self.config.getboolean('mysql', 'enable', fallback=True):
255
257
  db_config = {
256
258
  'user': self.config['mysql']['usr'],
257
259
  'password': self.config['mysql']['pwd'],
@@ -284,6 +286,8 @@ class UsePytdxImportToH5Thread(QThread):
284
286
  self.logger.info("{} 新增股票数: {}".format(market, count))
285
287
  self.send_message(
286
288
  ['INFO', '{} 新增股票数:{}'.format(market, count)])
289
+ pytdx_api.disconnect()
290
+ connect.close()
287
291
 
288
292
  self.process_list.clear()
289
293
  for task in self.tasks:
@@ -229,6 +229,7 @@ class UseQmtImportToH5Thread(QThread):
229
229
  self.logger.info("{} 新增股票数: {}".format(market, count))
230
230
  self.send_message(
231
231
  ['INFO', '{} 新增股票数:{}'.format(market, count)])
232
+ pytdx_api.disconnect()
232
233
 
233
234
  self.process_list.clear()
234
235
  for task in self.tasks:
@@ -91,7 +91,7 @@ class UseTdxImportToH5Thread(QThread):
91
91
  ImportHistoryFinanceTask(self.log_queue, self.queue, self.config, dest_dir))
92
92
 
93
93
  self.tasks.append(ImportBlockInfoTask(self.log_queue, self.queue,
94
- self.config, ('行业板块', '概念板块', '地域板块', '指数板块')))
94
+ self.config, ('行业板块', '指数板块'))) # '概念板块', '地域板块'
95
95
  self.tasks.append(ImportZhBond10Task(self.log_queue, self.queue, self.config))
96
96
 
97
97
  task_count = 0
@@ -251,6 +251,7 @@ class UseTdxImportToH5Thread(QThread):
251
251
  self.logger.info("{} 新增股票数: {}".format(market, count))
252
252
  self.send_message(
253
253
  ['INFO', '{} 新增股票数:{}'.format(market, count)])
254
+ pytdx_api.disconnect()
254
255
 
255
256
  self.process_list.clear()
256
257
  for task in self.tasks:
hikyuu/hub.pyi CHANGED
@@ -28,11 +28,11 @@ import sys as sys
28
28
  import typing
29
29
  __all__: list = ['add_remote_hub', 'add_local_hub', 'update_hub', 'remove_hub', 'build_hub', 'help_part', 'get_part', 'get_part_list', 'get_hub_path', 'get_part_info', 'get_part_module', 'print_part_info', 'get_hub_name_list', 'get_part_name_list', 'get_current_hub', 'search_part']
30
30
  class ConfigModel(sqlalchemy.orm.decl_api.Base):
31
- __mapper__: typing.ClassVar[sqlalchemy.orm.mapper.Mapper] # value = <Mapper at 0x1bb12cebc10; ConfigModel>
31
+ __mapper__: typing.ClassVar[sqlalchemy.orm.mapper.Mapper] # value = <Mapper at 0x254a51cdc10; ConfigModel>
32
32
  __table__: typing.ClassVar[sqlalchemy.sql.schema.Table] # value = Table('hub_config', MetaData(), Column('id', Integer(), table=<hub_config>, primary_key=True, nullable=False, default=Sequence('config_id_seq', metadata=MetaData())), Column('key', String(), table=<hub_config>), Column('value', String(), table=<hub_config>), schema=None)
33
33
  __table_args__: typing.ClassVar[tuple] # value = (UniqueConstraint(Column('key', String(), table=<hub_config>)))
34
34
  __tablename__: typing.ClassVar[str] = 'hub_config'
35
- _sa_class_manager: typing.ClassVar[sqlalchemy.orm.instrumentation.ClassManager] # value = <ClassManager of <class 'hikyuu.hub.ConfigModel'> at 1bb12d3db30>
35
+ _sa_class_manager: typing.ClassVar[sqlalchemy.orm.instrumentation.ClassManager] # value = <ClassManager of <class 'hikyuu.hub.ConfigModel'> at 254a521fbd0>
36
36
  def __init__(self, **kwargs):
37
37
  """
38
38
  A simple constructor that allows initialization from kwargs.
@@ -109,11 +109,11 @@ class HubManager:
109
109
  def print_part_info(self, name):
110
110
  ...
111
111
  class HubModel(sqlalchemy.orm.decl_api.Base):
112
- __mapper__: typing.ClassVar[sqlalchemy.orm.mapper.Mapper] # value = <Mapper at 0x1bb12d75280; HubModel>
112
+ __mapper__: typing.ClassVar[sqlalchemy.orm.mapper.Mapper] # value = <Mapper at 0x254a5259280; HubModel>
113
113
  __table__: typing.ClassVar[sqlalchemy.sql.schema.Table] # value = Table('hub_repo', MetaData(), Column('id', Integer(), table=<hub_repo>, primary_key=True, nullable=False, default=Sequence('remote_id_seq', metadata=MetaData())), Column('name', String(), table=<hub_repo>), Column('hub_type', String(), table=<hub_repo>), Column('local_base', String(), table=<hub_repo>), Column('local', String(), table=<hub_repo>), Column('url', String(), table=<hub_repo>), Column('branch', String(), table=<hub_repo>), schema=None)
114
114
  __table_args__: typing.ClassVar[tuple] # value = (UniqueConstraint(Column('name', String(), table=<hub_repo>)))
115
115
  __tablename__: typing.ClassVar[str] = 'hub_repo'
116
- _sa_class_manager: typing.ClassVar[sqlalchemy.orm.instrumentation.ClassManager] # value = <ClassManager of <class 'hikyuu.hub.HubModel'> at 1bb12d6e5e0>
116
+ _sa_class_manager: typing.ClassVar[sqlalchemy.orm.instrumentation.ClassManager] # value = <ClassManager of <class 'hikyuu.hub.HubModel'> at 254a5254630>
117
117
  def __init__(self, **kwargs):
118
118
  """
119
119
  A simple constructor that allows initialization from kwargs.
@@ -146,11 +146,11 @@ class ModuleConflictError(Exception):
146
146
  def __str__(self):
147
147
  ...
148
148
  class PartModel(sqlalchemy.orm.decl_api.Base):
149
- __mapper__: typing.ClassVar[sqlalchemy.orm.mapper.Mapper] # value = <Mapper at 0x1bb12d851f0; PartModel>
149
+ __mapper__: typing.ClassVar[sqlalchemy.orm.mapper.Mapper] # value = <Mapper at 0x254a52671f0; PartModel>
150
150
  __table__: typing.ClassVar[sqlalchemy.sql.schema.Table] # value = Table('hub_part', MetaData(), Column('id', Integer(), table=<hub_part>, primary_key=True, nullable=False, default=Sequence('part_id_seq', metadata=MetaData())), Column('hub_name', String(), table=<hub_part>), Column('part', String(), table=<hub_part>), Column('name', String(), table=<hub_part>), Column('author', String(), table=<hub_part>), Column('version', String(), table=<hub_part>), Column('doc', String(), table=<hub_part>), Column('module_name', String(), table=<hub_part>), Column('label', String(), table=<hub_part>), schema=None)
151
151
  __table_args__: typing.ClassVar[tuple] # value = (UniqueConstraint(Column('name', String(), table=<hub_part>)))
152
152
  __tablename__: typing.ClassVar[str] = 'hub_part'
153
- _sa_class_manager: typing.ClassVar[sqlalchemy.orm.instrumentation.ClassManager] # value = <ClassManager of <class 'hikyuu.hub.PartModel'> at 1bb12d83090>
153
+ _sa_class_manager: typing.ClassVar[sqlalchemy.orm.instrumentation.ClassManager] # value = <ClassManager of <class 'hikyuu.hub.PartModel'> at 254a52660e0>
154
154
  def __init__(self, **kwargs):
155
155
  """
156
156
  A simple constructor that allows initialization from kwargs.