gjdatac-api 0.2.5__tar.gz → 0.2.7__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gjdatac_api
3
- Version: 0.2.5
3
+ Version: 0.2.7
4
4
  Summary: 数据接口打包
5
5
  Author: yin
6
6
  Author-email: 2018209921@qq.com
@@ -24,7 +24,7 @@ from .instrument_class import Instrument
24
24
 
25
25
  class GJDataC:
26
26
 
27
- def __init__(self, host, port, user_id, password):
27
+ def __init__(self, host, port, user_id, password, dolphindb_service):
28
28
  """
29
29
  用于定义一些不同接口所需的变量以及一些初始化操作
30
30
  :param host: 数据库地址
@@ -56,11 +56,12 @@ class GJDataC:
56
56
  # 连接数据库
57
57
  db_session = ddb.session()
58
58
  # 原始方式
59
- # success = db_session.connect(self.host, self.port, self.user_id, self.password)
60
-
61
- # 创建连接;开启高可用,并指定sites为所有可用节点的ip:port
62
- success = db_session.connect(self.host, self.port, self.user_id, self.password, highAvailability=True,
63
- highAvailabilitySites=self.sites)
59
+ if not self.sites:
60
+ success = db_session.connect(self.host, self.port, self.user_id, self.password)
61
+ else:
62
+ # 创建连接;开启高可用,并指定sites为所有可用节点的ip:port
63
+ success = db_session.connect(self.host, self.port, self.user_id, self.password, highAvailability=True,
64
+ highAvailabilitySites=self.sites)
64
65
  if not success:
65
66
  raise Exception("please check your database connection information")
66
67
 
@@ -295,6 +296,116 @@ class GJDataC:
295
296
  bar_db_session.close()
296
297
  return 'option'
297
298
 
299
+ @staticmethod
300
+ def format_date(input_date):
301
+ """
302
+ 将输入的日期转换为指定格式的字符串。
303
+
304
+ 参数:
305
+ input_date: 输入的日期,可以是 datetime、date 或 str 类型。
306
+ 支持的字符串格式包括:
307
+ - "YYYY-MM-DD HH:MM:SS"
308
+ - "YYYY-MM-DD"
309
+ - "YYYY.MM.DD HH:MM:SS"
310
+ - "YYYY.MM.DD"
311
+
312
+ 返回:
313
+ str: 转换后的日期字符串,格式为 "YYYY.MM.DD HH:MM:SS" 或 "YYYY.MM.DD"。
314
+ """
315
+ # 如果输入是 datetime 类型
316
+ if isinstance(input_date, datetime.datetime):
317
+ if input_date.hour == 0 and input_date.minute == 0 and input_date.second == 0:
318
+ return input_date.strftime("%Y.%m.%d")
319
+ else:
320
+ return input_date.strftime("%Y.%m.%d %H:%M:%S")
321
+
322
+ # 如果输入是 date 类型
323
+ elif isinstance(input_date, datetime.date):
324
+ return input_date.strftime("%Y.%m.%d")
325
+
326
+ # 如果输入是字符串类型
327
+ elif isinstance(input_date, str):
328
+ try:
329
+ # 尝试解析包含时间的格式
330
+ dt = datetime.datetime.strptime(input_date, "%Y-%m-%d %H:%M:%S")
331
+ return dt.strftime("%Y.%m.%d %H:%M:%S")
332
+ except ValueError:
333
+ try:
334
+ # 尝试解析不包含时间的格式
335
+ dt = datetime.datetime.strptime(input_date, "%Y-%m-%d")
336
+ return dt.strftime("%Y.%m.%d")
337
+ except ValueError:
338
+ try:
339
+ # 尝试解析包含时间的点分隔格式
340
+ dt = datetime.datetime.strptime(input_date, "%Y.%m.%d %H:%M:%S")
341
+ return dt.strftime("%Y.%m.%d %H:%M:%S")
342
+ except ValueError:
343
+ try:
344
+ # 尝试解析不包含时间的点分隔格式
345
+ dt = datetime.datetime.strptime(input_date, "%Y.%m.%d")
346
+ return dt.strftime("%Y.%m.%d")
347
+ except ValueError:
348
+ raise ValueError("输入的日期格式不支持")
349
+
350
+ # 如果输入类型不支持
351
+ else:
352
+ raise TypeError("输入类型必须是 datetime、date 或 对应格式的str")
353
+
354
+ @staticmethod
355
+ def format_date_split_by_(input_date):
356
+ """
357
+ 将输入的日期转换为指定格式的字符串。
358
+
359
+ 参数:
360
+ input_date: 输入的日期,可以是 datetime、date 或 str 类型。
361
+ 支持的字符串格式包括:
362
+ - "YYYY-MM-DD HH:MM:SS"
363
+ - "YYYY-MM-DD"
364
+ - "YYYY.MM.DD HH:MM:SS"
365
+ - "YYYY.MM.DD"
366
+
367
+ 返回:
368
+ str: 转换后的日期字符串,格式为 "YYYY.MM.DD HH:MM:SS" 或 "YYYY.MM.DD"。
369
+ """
370
+ # 如果输入是 datetime 类型
371
+ if isinstance(input_date, datetime.datetime):
372
+ if input_date.hour == 0 and input_date.minute == 0 and input_date.second == 0:
373
+ return input_date.strftime("%Y-%m-%d")
374
+ else:
375
+ return input_date.strftime("%Y-%m-%d %H:%M:%S")
376
+
377
+ # 如果输入是 date 类型
378
+ elif isinstance(input_date, datetime.date):
379
+ return input_date.strftime("%Y-%m-%d")
380
+
381
+ # 如果输入是字符串类型
382
+ elif isinstance(input_date, str):
383
+ try:
384
+ # 尝试解析包含时间的格式
385
+ dt = datetime.datetime.strptime(input_date, "%Y-%m-%d %H:%M:%S")
386
+ return dt.strftime("%Y-%m-%d %H:%M:%S")
387
+ except ValueError:
388
+ try:
389
+ # 尝试解析不包含时间的格式
390
+ dt = datetime.datetime.strptime(input_date, "%Y-%m-%d")
391
+ return dt.strftime("%Y-%m-%d")
392
+ except ValueError:
393
+ try:
394
+ # 尝试解析包含时间的点分隔格式
395
+ dt = datetime.datetime.strptime(input_date, "%Y.%m.%d %H:%M:%S")
396
+ return dt.strftime("%Y-%m-%d %H:%M:%S")
397
+ except ValueError:
398
+ try:
399
+ # 尝试解析不包含时间的点分隔格式
400
+ dt = datetime.datetime.strptime(input_date, "%Y.%m.%d")
401
+ return dt.strftime("%Y-%m-%d")
402
+ except ValueError:
403
+ raise ValueError("输入的日期格式不支持")
404
+
405
+ # 如果输入类型不支持
406
+ else:
407
+ raise TypeError("输入类型必须是 datetime、date 或 对应格式的str")
408
+
298
409
  """ get_price(获取行情数据接口) """
299
410
 
300
411
  def get_price(self, order_book_ids=None, asset_type="future", frequency=None, start_date=None, end_date=None,
@@ -411,18 +522,20 @@ class GJDataC:
411
522
  if (start_date and not end_date) or (not start_date and end_date):
412
523
  raise ValueError("start_date and end_date should be both provided or not provided at all")
413
524
  if start_date and end_date:
525
+ self.format_date(start_date)
526
+ self.format_date(end_date)
414
527
  # 如果提供了,则进行进一步校验
415
- is_start_datetime = self._is_convertible_datetime(start_date)
416
- is_end_datetime = self._is_convertible_datetime(end_date)
417
- if not is_end_datetime or not is_start_datetime:
418
- raise ValueError(
419
- "start_date and end_date should be datetime.datetime objects or "
420
- "convertible to datetime.datetime objects")
421
-
422
- # 如果传入的数据类型符合要求,进行转换
423
- start_date, end_date = self._get_price_convert_start_end_date(start_date, end_date)
424
- if start_date > end_date:
425
- raise ValueError("start_date should be earlier than end_date")
528
+ # is_start_datetime = self._is_convertible_datetime(start_date)
529
+ # is_end_datetime = self._is_convertible_datetime(end_date)
530
+ # if not is_end_datetime or not is_start_datetime:
531
+ # raise ValueError(
532
+ # "start_date and end_date should be datetime.datetime objects or "
533
+ # "convertible to datetime.datetime objects")
534
+ #
535
+ # # 如果传入的数据类型符合要求,进行转换
536
+ # start_date, end_date = self._get_price_convert_start_end_date(start_date, end_date)
537
+ # if start_date > end_date:
538
+ # raise ValueError("start_date should be earlier than end_date")
426
539
 
427
540
  @staticmethod
428
541
  def _get_price_convert_start_end_date(start_date, end_date):
@@ -618,8 +731,10 @@ class GJDataC:
618
731
  limit_data = get_price_data.where(f"instrument_id in {order_book_ids}")
619
732
 
620
733
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
621
- format_start_date = self.get_price_format_date(start_date)
622
- format_end_date = self.get_price_format_date(end_date)
734
+ # format_start_date = self.get_price_format_date(start_date)
735
+ # format_end_date = self.get_price_format_date(end_date)
736
+ format_start_date = self.format_date(start_date)
737
+ format_end_date = self.format_date(end_date)
623
738
 
624
739
  # 根据日期对数据再次进行筛选,最大程度减轻数据库压力
625
740
  limit_data = limit_data.where(f"trade_time >= {format_start_date} and trade_time <= {format_end_date}")
@@ -1041,6 +1156,7 @@ class GJDataC:
1041
1156
  raise ValueError("date parameter error, type should be str or datetime.date")
1042
1157
 
1043
1158
  if isinstance(date, str):
1159
+ date = self.format_date_split_by_(date)
1044
1160
  date = datetime.datetime.strptime(date, "%Y-%m-%d").date()
1045
1161
 
1046
1162
  return self.get_dates_in_n(date, n)
@@ -1069,6 +1185,8 @@ class GJDataC:
1069
1185
  start_date = self._get_trading_dates_by_start_end(start_date)
1070
1186
  if isinstance(end_date, str):
1071
1187
  end_date = self._get_trading_dates_by_start_end(end_date)
1188
+
1189
+
1072
1190
  # 筛选 trading_day_str 列在 start_date 和 end_date 之间的数据
1073
1191
  # filtered_df = trading_params_data.loc[
1074
1192
  # (trading_params_data['trading_day_str'] >= start_date) & (
@@ -1304,7 +1422,8 @@ class GJDataC:
1304
1422
 
1305
1423
  # 根据 date 筛选数据
1306
1424
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
1307
- dolphin_date = self.get_margin_ratio_date_to_dolphin_time(date)
1425
+ # dolphin_date = self.get_margin_ratio_date_to_dolphin_time(date)
1426
+ dolphin_date = self.format_date(date)
1308
1427
  date_data = data.where(f"trading_day = {dolphin_date}")
1309
1428
 
1310
1429
  # 根据 exchange 筛选数据
@@ -1369,11 +1488,13 @@ class GJDataC:
1369
1488
  :return: None
1370
1489
  """
1371
1490
 
1372
- if isinstance(date, (str, datetime.date, datetime.datetime)):
1373
- if isinstance(date, str) and not self.general_validate_date(date):
1374
- raise ValueError("date is not a valid date string format")
1375
- else:
1376
- raise ValueError("date type error, please pass in str, datetime.date or datetime.datetime type")
1491
+ self.format_date(date)
1492
+
1493
+ # if isinstance(date, (str, datetime.date, datetime.datetime)):
1494
+ # if isinstance(date, str) and not self.general_validate_date(date):
1495
+ # raise ValueError("date is not a valid date string format")
1496
+ # else:
1497
+ # raise ValueError("date type error, please pass in str, datetime.date or datetime.datetime type")
1377
1498
 
1378
1499
  """ get_fee 期货交割手续费 """
1379
1500
 
@@ -1470,7 +1591,8 @@ class GJDataC:
1470
1591
 
1471
1592
  # 根据 date 筛选数据
1472
1593
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
1473
- dolphin_date = self.get_fee_datetime_to_dolphin_time(date)
1594
+ # dolphin_date = self.get_fee_datetime_to_dolphin_time(date)
1595
+ dolphin_date = self.format_date(date)
1474
1596
 
1475
1597
  date_data = get_fee_data.where(f"trading_day = {dolphin_date}")
1476
1598
 
@@ -1502,12 +1624,14 @@ class GJDataC:
1502
1624
  # 校验参数是否必填
1503
1625
  self.general_validate_params_required(date, "date")
1504
1626
 
1505
- # 校验参数类型格式
1506
- if isinstance(date, (str, datetime.date, datetime.datetime)):
1507
- if isinstance(date, str) and not self.general_validate_date(date):
1508
- raise ValueError("date is not a valid date string format")
1509
- else:
1510
- raise ValueError("date type error, please pass in str, datetime.date or datetime.datetime type")
1627
+ self.format_date(date)
1628
+
1629
+ # # 校验参数类型格式
1630
+ # if isinstance(date, (str, datetime.date, datetime.datetime)):
1631
+ # if isinstance(date, str) and not self.general_validate_date(date):
1632
+ # raise ValueError("date is not a valid date string format")
1633
+ # else:
1634
+ # raise ValueError("date type error, please pass in str, datetime.date or datetime.datetime type")
1511
1635
 
1512
1636
  @staticmethod
1513
1637
  def get_fee_handle_data(data):
@@ -1590,7 +1714,8 @@ class GJDataC:
1590
1714
 
1591
1715
  # 根据 date 筛选数据
1592
1716
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
1593
- dolphin_date = self.get_limit_position_date_to_dolphin_time(date)
1717
+ # dolphin_date = self.get_limit_position_date_to_dolphin_time(date)
1718
+ dolphin_date = self.format_date(date)
1594
1719
  date_data = data.where(f"trading_day = {dolphin_date}")
1595
1720
 
1596
1721
  # 根据 order_book_id 和 commodity 获取数据
@@ -1627,11 +1752,13 @@ class GJDataC:
1627
1752
  :return: None
1628
1753
  """
1629
1754
 
1630
- if isinstance(date, (str, datetime.date, datetime.datetime)):
1631
- if isinstance(date, str) and not self.general_validate_date(date):
1632
- raise ValueError("date is not a valid date string format")
1633
- else:
1634
- raise ValueError("date type error, please pass in str, datetime.date or datetime.datetime type")
1755
+ self.format_date(date)
1756
+
1757
+ # if isinstance(date, (str, datetime.date, datetime.datetime)):
1758
+ # if isinstance(date, str) and not self.general_validate_date(date):
1759
+ # raise ValueError("date is not a valid date string format")
1760
+ # else:
1761
+ # raise ValueError("date type error, please pass in str, datetime.date or datetime.datetime type")
1635
1762
 
1636
1763
  @staticmethod
1637
1764
  def get_limit_position_handle_data(data):
@@ -1808,8 +1935,12 @@ class GJDataC:
1808
1935
 
1809
1936
  # 根据日期筛选数据
1810
1937
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
1811
- start_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(start_date)
1812
- end_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(end_date)
1938
+ # start_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(start_date)
1939
+ # end_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(end_date)
1940
+
1941
+ start_dolphin_date = self.format_date(start_date)
1942
+ end_dolphin_date = self.format_date(end_date)
1943
+
1813
1944
  date_data = code_data.where(f"trading_day >= {start_dolphin_date} and trading_day <= {end_dolphin_date}")
1814
1945
 
1815
1946
  if compute_type:
@@ -1844,8 +1975,11 @@ class GJDataC:
1844
1975
 
1845
1976
  # 根据日期筛选数据
1846
1977
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
1847
- start_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(start_date)
1848
- end_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(end_date)
1978
+ # start_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(start_date)
1979
+ # end_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(end_date)
1980
+ start_dolphin_date = self.format_date(start_date)
1981
+ end_dolphin_date = self.format_date(end_date)
1982
+
1849
1983
  date_data = code_data.where(f"trading_day >= {start_dolphin_date} and trading_day <= {end_dolphin_date}")
1850
1984
 
1851
1985
  # 根据表中的 rank 字段筛选主力/次主力合约,rank == 1是主力合约, 2 是次主力合约
@@ -1875,8 +2009,10 @@ class GJDataC:
1875
2009
 
1876
2010
  # 根据日期筛选数据
1877
2011
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
1878
- start_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(start_date)
1879
- end_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(end_date)
2012
+ # start_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(start_date)
2013
+ # end_dolphin_date = self.get_active_contract_datetime_to_dolphin_time(end_date)
2014
+ start_dolphin_date = self.format_date(start_date)
2015
+ end_dolphin_date = self.format_date(end_date)
1880
2016
  date_data = tick_data.where(f"trading_day >= {start_dolphin_date} and trading_day <= {end_dolphin_date}")
1881
2017
 
1882
2018
  instrument_data = date_data.where(f"instrument_id in {data['instrument_id'].tolist()}")
@@ -1912,13 +2048,18 @@ class GJDataC:
1912
2048
  :return: None
1913
2049
  """
1914
2050
  # 校验start_date 和 end_date 是否为datetime.date类型或者可以转换成该类型的str
1915
- if isinstance(start_date, (str, datetime.date)) and isinstance(end_date, (str, datetime.date)):
1916
- if isinstance(start_date, str) and not self.general_validate_date_str_is_date_type(start_date):
1917
- raise ValueError("start_date type error, please enter datetime.date type")
1918
- if isinstance(end_date, str) and not self.general_validate_date_str_is_date_type(end_date):
1919
- raise ValueError("start_date type error, please enter datetime.date type")
1920
- else:
1921
- raise ValueError("start_date or end_date type error, please enter datetime.date type")
2051
+ # if isinstance(start_date, (str, datetime.date)) and isinstance(end_date, (str, datetime.date)):
2052
+ # if isinstance(start_date, str) and not self.general_validate_date_str_is_date_type(start_date):
2053
+ # raise ValueError("start_date type error, please enter datetime.date type")
2054
+ # if isinstance(end_date, str) and not self.general_validate_date_str_is_date_type(end_date):
2055
+ # raise ValueError("start_date type error, please enter datetime.date type")
2056
+ # else:
2057
+ # raise ValueError("start_date or end_date type error, please enter datetime.date type")
2058
+
2059
+
2060
+
2061
+ self.format_date(start_date)
2062
+ self.format_date(end_date)
1922
2063
 
1923
2064
  # 校验begin_date 是否为datetime.datetime类型或者为可以转换为该类型的字符串
1924
2065
  # if isinstance(begin_date, (str, datetime.datetime)):
@@ -2135,17 +2276,21 @@ class GJDataC:
2135
2276
  :param end_date: 结束日期
2136
2277
  :return: None
2137
2278
  """
2138
- error_msg = "start_date or end_date type error, datetime.date, datetime.datetime, pandasTimestamp type or can be converted to the type"
2139
2279
 
2140
- # 校验start_date 和 end_date 是否为datetime.date, datetime.datetime, pandasTimestamp类型或者可以转换成该类型的str
2141
- if isinstance(start_date, (str, datetime.date, datetime.datetime, pd.Timestamp)) and isinstance(end_date, (
2142
- str, datetime.date, datetime.datetime, pd.Timestamp)):
2143
- if isinstance(start_date, str) and not self.general_validate_date(start_date):
2144
- raise ValueError(error_msg)
2145
- if isinstance(end_date, str) and not self.general_validate_date(end_date):
2146
- raise ValueError(error_msg)
2147
- else:
2148
- raise ValueError(error_msg)
2280
+ self.format_date(start_date)
2281
+ self.format_date(end_date)
2282
+
2283
+ # error_msg = "start_date or end_date type error, datetime.date, datetime.datetime, pandasTimestamp type or can be converted to the type"
2284
+
2285
+ # # 校验start_date 和 end_date 是否为datetime.date, datetime.datetime, pandasTimestamp类型或者可以转换成该类型的str
2286
+ # if isinstance(start_date, (str, datetime.date, datetime.datetime, pd.Timestamp)) and isinstance(end_date, (
2287
+ # str, datetime.date, datetime.datetime, pd.Timestamp)):
2288
+ # if isinstance(start_date, str) and not self.general_validate_date(start_date):
2289
+ # raise ValueError(error_msg)
2290
+ # if isinstance(end_date, str) and not self.general_validate_date(end_date):
2291
+ # raise ValueError(error_msg)
2292
+ # else:
2293
+ # raise ValueError(error_msg)
2149
2294
 
2150
2295
  def get_basic_data_get_data(self, order_book_id, asset_type, start_date, end_date):
2151
2296
  """
@@ -2176,12 +2321,15 @@ class GJDataC:
2176
2321
  库存表的 data_date 字段为 STRING 类型,筛选日期时,需要提供和表中格式一致的数据,才能筛选,例如:2024-12-01
2177
2322
  '''
2178
2323
  # 将日期转换为 DolphinDB 的时间格式
2179
- start_dolphin_date = self._get_basic_data_date_to_dolphin_time(start_date, asset_type)
2180
- end_dolphin_date = self._get_basic_data_date_to_dolphin_time(end_date, asset_type)
2324
+ # start_dolphin_date = self._get_basic_data_date_to_dolphin_time(start_date, asset_type)
2325
+ # end_dolphin_date = self._get_basic_data_date_to_dolphin_time(end_date, asset_type)
2326
+ start_dolphin_date = self.format_date(start_date)
2327
+ end_dolphin_date = self.format_date(end_date)
2328
+
2181
2329
 
2182
2330
  # 此处还需要判断的原因是,因为对 dolphindb 中不同的日期数据类型查询数据的语法不同
2183
2331
  asset_type_data = product_data.where(
2184
- f"data_date>='{start_dolphin_date}' and data_date<='{end_dolphin_date}'") if asset_type == '库存' \
2332
+ f"data_date>={start_dolphin_date} and data_date<={end_dolphin_date}") if asset_type == '库存' \
2185
2333
  else product_data.where(f"date>={start_dolphin_date} and date<={end_dolphin_date}")
2186
2334
 
2187
2335
  return asset_type_data.toDF(), db_session
@@ -2243,10 +2391,10 @@ class GJDataC:
2243
2391
  }, inplace=True)
2244
2392
  # 处理库存
2245
2393
  else:
2246
- new_df.rename(columns={'product_id': 'order_book_id', ' data_date': 'date', 'inventory_value': 'value'},
2394
+ new_df.rename(columns={'product_id': 'order_book_id', 'data_date': 'date', 'inventory_value': 'value'},
2247
2395
  inplace=True)
2248
2396
 
2249
- return new_df[['order_book_id', 'asset_type', 'data_date', 'value']]
2397
+ return new_df[['order_book_id', 'asset_type', 'date', 'value']]
2250
2398
 
2251
2399
  """ get_warehouse_stocks_future 仓单数据 """
2252
2400
 
@@ -2265,7 +2413,11 @@ class GJDataC:
2265
2413
  self.get_warehouse_stocks_future_validate_required_params(commodity, start_date, end_date)
2266
2414
 
2267
2415
  # 校验commodity, start_date, end_date 是否为str类型
2268
- self.get_warehouse_stocks_future_validate_type_str(commodity, start_date, end_date)
2416
+ self.get_warehouse_stocks_future_validate_type_str(commodity)
2417
+
2418
+ # 校验start_date, end_date
2419
+ start_date = self.format_date_split_by_(start_date)
2420
+ end_date = self.format_date_split_by_(end_date)
2269
2421
 
2270
2422
  """ 获取数据 """
2271
2423
  # 从数据库中获取数据
@@ -2296,7 +2448,7 @@ class GJDataC:
2296
2448
  for key, value in params_dict.items():
2297
2449
  self.general_validate_params_required(value, key)
2298
2450
 
2299
- def get_warehouse_stocks_future_validate_type_str(self, commodity, start_date, end_date):
2451
+ def get_warehouse_stocks_future_validate_type_str(self, commodity):
2300
2452
  """
2301
2453
  校验参数类型是否为str
2302
2454
  :param commodity: str--必填,期货合约品种
@@ -2307,8 +2459,8 @@ class GJDataC:
2307
2459
 
2308
2460
  params_dict = {
2309
2461
  "commodity": commodity,
2310
- "start_date": start_date,
2311
- "end_date": end_date
2462
+ # "start_date": start_date,
2463
+ # "end_date": end_date
2312
2464
  }
2313
2465
 
2314
2466
  for key, value in params_dict.items():
@@ -2354,6 +2506,8 @@ class GJDataC:
2354
2506
  :return: 过滤后的数据
2355
2507
  """
2356
2508
 
2509
+
2510
+
2357
2511
  start_date = self._get_warehouse_stocks_future_date_conversion(start_date)
2358
2512
  end_date = self._get_warehouse_stocks_future_date_conversion(end_date)
2359
2513
 
@@ -2495,8 +2649,10 @@ class GJDataC:
2495
2649
  :return: None
2496
2650
  """
2497
2651
 
2498
- self._get_vwap_validate_date_type(start_date, "start_date")
2499
- self._get_vwap_validate_date_type(end_date, "end_date")
2652
+ # self._get_vwap_validate_date_type(start_date, "start_date")
2653
+ # self._get_vwap_validate_date_type(end_date, "end_date")
2654
+ self.format_date(start_date)
2655
+ self.format_date(end_date)
2500
2656
 
2501
2657
  def _get_vwap_validate_date_type(self, date_str, date_str_name):
2502
2658
  """
@@ -2587,8 +2743,10 @@ class GJDataC:
2587
2743
  limit_data = get_vwap_data.where(f"instrument_id in {order_book_ids}")
2588
2744
 
2589
2745
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
2590
- format_start_date = self.get_vwap_format_date(start_date)
2591
- format_end_date = self.get_vwap_format_date(end_date)
2746
+ # format_start_date = self.get_vwap_format_date(start_date)
2747
+ # format_end_date = self.get_vwap_format_date(end_date)
2748
+ format_start_date = self.format_date(start_date)
2749
+ format_end_date = self.format_date(end_date)
2592
2750
 
2593
2751
  # 根据日期对数据再次进行筛选,最大程度减轻数据库压力
2594
2752
  limit_data = limit_data.where(f"trade_time >= {format_start_date} and trade_time <= {format_end_date}").where(
@@ -2736,8 +2894,11 @@ class GJDataC:
2736
2894
  :return: None
2737
2895
  """
2738
2896
 
2739
- self._get_twap_validate_date_type(start_date, "start_date")
2740
- self._get_twap_validate_date_type(end_date, "end_date")
2897
+ self.format_date(start_date)
2898
+ self.format_date(end_date)
2899
+
2900
+ # self._get_twap_validate_date_type(start_date, "start_date")
2901
+ # self._get_twap_validate_date_type(end_date, "end_date")
2741
2902
 
2742
2903
  def _get_twap_validate_date_type(self, date_str, date_str_name):
2743
2904
  """
@@ -2801,8 +2962,11 @@ class GJDataC:
2801
2962
  limit_data = get_vwap_data.where(f"instrument_id in {order_book_ids}")
2802
2963
 
2803
2964
  # 将日期转换成 DolphinDB 识别的日期格式,用于筛选数据
2804
- format_start_date = self.get_twap_format_date(start_date)
2805
- format_end_date = self.get_twap_format_date(end_date)
2965
+ # format_start_date = self.get_twap_format_date(start_date)
2966
+ # format_end_date = self.get_twap_format_date(end_date)
2967
+
2968
+ format_start_date = self.format_date(start_date)
2969
+ format_end_date = self.format_date(end_date)
2806
2970
 
2807
2971
  # 根据日期对数据再次进行筛选,最大程度减轻数据库压力
2808
2972
  limit_data = limit_data.where(f"trade_time >= {format_start_date} and trade_time <= {format_end_date}").where(
@@ -2950,10 +3114,10 @@ class GJDataC:
2950
3114
  self._get_history_bar_validate_params(datetime_str, instrument_id, bar_count, frequency, fields)
2951
3115
 
2952
3116
  # 转换日期格式
2953
- # query_time = self._get_history_bar_parse_datetime(datetime_str)
3117
+ query_time = self._get_history_bar_parse_datetime(datetime_str)
2954
3118
 
2955
3119
  # 执行查询并筛选数据
2956
- result, bar_db_session = self._get_history_bar_execute_query(frequency, instrument_id, datetime_str,
3120
+ result, bar_db_session = self._get_history_bar_execute_query(frequency, instrument_id, query_time,
2957
3121
  bar_count)
2958
3122
  # 此处在所有的查询筛选都在数据库层面进行完后,再关闭连接
2959
3123
  # 如果将dolphindb的Table对象转换成DataFrame时,如果数据量较大,那么需要耗费的时间较长,所以尽可能将所有的筛选在数据库层面完成
@@ -2962,7 +3126,6 @@ class GJDataC:
2962
3126
  # 处理结果
2963
3127
  return self._get_history_bar_process_result(result, instrument_id, fields, bar_count)
2964
3128
  else:
2965
- print("22222")
2966
3129
  return self.get_history_bar(instrument_id, start_date, end_date, frequency, fields)
2967
3130
 
2968
3131
  def _get_history_bar_validate_params(self, datetime_str, instrument_id, bar_count,
@@ -3021,8 +3184,8 @@ class GJDataC:
3021
3184
  else:
3022
3185
  return False
3023
3186
 
3024
- @staticmethod
3025
- def _get_history_bar_parse_datetime(datetime_str):
3187
+ # @staticmethod
3188
+ def _get_history_bar_parse_datetime(self, datetime_str):
3026
3189
  """
3027
3190
  解析日期时间字符串
3028
3191
  Args:
@@ -3034,11 +3197,14 @@ class GJDataC:
3034
3197
 
3035
3198
  """
3036
3199
 
3037
- try:
3038
- return datetime.datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S') if isinstance(datetime_str, str) \
3039
- else datetime_str
3040
- except ValueError:
3041
- raise ValueError("Invalid datetime format, should be 'YYYY-MM-DD HH:MM:SS'")
3200
+ return self.format_date(datetime_str)
3201
+
3202
+ # try:
3203
+ # return datetime.datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S') if isinstance(datetime_str, str) \
3204
+ # else datetime_str
3205
+ # except ValueError:
3206
+ # raise ValueError("Invalid datetime format, should be 'YYYY-MM-DD HH:MM:SS'")
3207
+
3042
3208
 
3043
3209
  def _get_history_bar_execute_query(self, frequency, instrument_id, datetime_str, bar_count):
3044
3210
  """
@@ -3092,7 +3258,8 @@ class GJDataC:
3092
3258
  else:
3093
3259
  raise Exception("frequency is not valid or frequency is not valid for this frequency")
3094
3260
 
3095
- def _get_history_bar_filter_data(self, table_data, instrument_id, datetime_str, bar_count):
3261
+ @staticmethod
3262
+ def _get_history_bar_filter_data(table_data, instrument_id, datetime_str, bar_count):
3096
3263
  """
3097
3264
  筛选数据
3098
3265
  Args:
@@ -3115,6 +3282,7 @@ class GJDataC:
3115
3282
  .where(f"trading_day <= {dolphin_date}")
3116
3283
  .sort("trading_day", ascending=False)
3117
3284
  .limit(bar_count))
3285
+
3118
3286
  else:
3119
3287
  query_data = (table_data.where(f"instrument_id in {instrument_id}")
3120
3288
  .where(f"trading_day <= {dolphin_date}")
@@ -3283,8 +3451,13 @@ class GJDataC:
3283
3451
  # 获取数据
3284
3452
  table_data, bars_db_session = self.connect_db(table_info[0], table_info[1])
3285
3453
 
3454
+ # 转换日期格式
3455
+ conv_start_date = self.format_date(start_date)
3456
+ conv_end_date = self.format_date(end_date)
3457
+
3458
+
3286
3459
  # 筛选数据
3287
- query_data = self._get_history_bars_filter_data(table_data, instrument_id, start_date, end_date)
3460
+ query_data = self._get_history_bars_filter_data(table_data, instrument_id, conv_start_date, conv_end_date)
3288
3461
 
3289
3462
  return query_data.toDF(), bars_db_session
3290
3463
 
@@ -3636,7 +3809,8 @@ class GJDataC:
3636
3809
  :return: 查询到的交易日或时间点列表
3637
3810
  """
3638
3811
  # 将 trade_time 转换为 datetime 对象
3639
- trade_time = datetime.datetime.strptime(trade_time, '%Y.%m.%d %H:%M:%S')
3812
+ trade_time = self.format_date(trade_time)
3813
+
3640
3814
 
3641
3815
  # 获取交易日历数据
3642
3816
  trading_dates = self.get_trading_dates_data()
@@ -3747,6 +3921,8 @@ class GJDataC:
3747
3921
  """
3748
3922
 
3749
3923
  data, db_session = self.connect_db(trading_dates_db_table_name, trading_dates_db_path)
3924
+ date = self.format_date(date)
3925
+
3750
3926
 
3751
3927
  # 根据条件筛选数据
3752
3928
  # 筛选 trade_flag 列等于 T 的数据(是交易日的数据)
@@ -3757,13 +3933,13 @@ class GJDataC:
3757
3933
 
3758
3934
  """ 节假日判断 """
3759
3935
 
3760
- @staticmethod
3761
- def is_holiday(date):
3936
+ def is_holiday(self, date):
3762
3937
  """
3763
3938
  判断给定日期是否为节假日
3764
3939
  :param date: 给定的日期
3765
3940
  :return: True 或 False
3766
3941
  """
3942
+ date = self.format_date(date)
3767
3943
 
3768
3944
  # 将输入日期字符串转换为 datetime 对象
3769
3945
  date = datetime.datetime.strptime(date, '%Y.%m.%d').date()
@@ -3772,13 +3948,13 @@ class GJDataC:
3772
3948
 
3773
3949
  """ 周末判断 """
3774
3950
 
3775
- @staticmethod
3776
- def is_weekend(date):
3951
+ def is_weekend(self, date):
3777
3952
  """
3778
3953
  判断给定日期是否为周末
3779
3954
  :param date: 给定日期
3780
3955
  :return: True 或 False
3781
3956
  """
3957
+ date = self.format_date(date)
3782
3958
 
3783
3959
  # 将输入日期字符串转换为 datetime 对象
3784
3960
  date = datetime.datetime.strptime(date, '%Y.%m.%d')
@@ -146,6 +146,3 @@ inventory_db_table_name = "qc_product_inventory" # 表名
146
146
  subscribe_min_db_table_name = "QcMinKlineTable" # 表名
147
147
 
148
148
 
149
-
150
- ''' 仿真服务器 '''
151
- dolphindb_service = ["10.74.56.101:8902", "10.74.56.102:8902", "10.74.56.103:8902", "10.74.56.104 8902"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gjdatac-api
3
- Version: 0.2.5
3
+ Version: 0.2.7
4
4
  Summary: 数据接口打包
5
5
  Author: yin
6
6
  Author-email: 2018209921@qq.com
@@ -5,7 +5,7 @@ with open('description_info.md', 'r', encoding='utf-8') as f:
5
5
 
6
6
  setup(
7
7
  name='gjdatac_api', # 你的包名
8
- version='0.2.5', # 版本号
8
+ version='0.2.7', # 版本号
9
9
  description='数据接口打包', # 包的简要描述
10
10
  long_description=long_description, # 包的详细描述
11
11
  long_description_content_type='text/markdown', # 描述文件的类型
File without changes