chinadata 0.3.9__py3-none-any.whl → 0.4.0__py3-none-any.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.
- chinadata/ca_data.py +89 -49
- chinadata/example.py +11 -3
- {chinadata-0.3.9.dist-info → chinadata-0.4.0.dist-info}/METADATA +1 -1
- chinadata-0.4.0.dist-info/RECORD +7 -0
- chinadata-0.3.9.dist-info/RECORD +0 -7
- {chinadata-0.3.9.dist-info → chinadata-0.4.0.dist-info}/WHEEL +0 -0
- {chinadata-0.3.9.dist-info → chinadata-0.4.0.dist-info}/top_level.txt +0 -0
chinadata/ca_data.py
CHANGED
|
@@ -41,7 +41,7 @@ class pro_api:
|
|
|
41
41
|
pd.DataFrame: A DataFrame containing the fetched stock data.
|
|
42
42
|
"""
|
|
43
43
|
# url="http://127.0.0.1:9002/tq"
|
|
44
|
-
url = "http://
|
|
44
|
+
url = "http://123.57.69.240:9002/tq"
|
|
45
45
|
|
|
46
46
|
params = {
|
|
47
47
|
'token': get_token(),
|
|
@@ -52,9 +52,9 @@ class pro_api:
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
|
|
56
55
|
response = requests.post(url, json=params)
|
|
57
56
|
|
|
57
|
+
|
|
58
58
|
if response.status_code == 200:
|
|
59
59
|
try:
|
|
60
60
|
data = response.json()
|
|
@@ -69,8 +69,6 @@ class pro_api:
|
|
|
69
69
|
raise ValueError("数据获取错误",e)
|
|
70
70
|
|
|
71
71
|
else:
|
|
72
|
-
# print(f"Failed to fetch data. Status code: {response.status_code}")
|
|
73
|
-
# print(response.text)
|
|
74
72
|
raise ValueError("数据获取错误",response.status_code,response.text)
|
|
75
73
|
|
|
76
74
|
|
|
@@ -443,12 +441,13 @@ class pro_api:
|
|
|
443
441
|
|
|
444
442
|
def index_global(self, api_name='index_global', **kwargs):
|
|
445
443
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
446
|
-
|
|
447
444
|
def idx_factor_pro(self, api_name='idx_factor_pro', **kwargs):
|
|
448
445
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
449
446
|
def fund_factor_pro(self, api_name='fund_factor_pro', **kwargs):
|
|
450
447
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
451
448
|
|
|
449
|
+
|
|
450
|
+
|
|
452
451
|
def ncov_global(self, api_name='ncov_global', **kwargs):
|
|
453
452
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
454
453
|
|
|
@@ -532,36 +531,6 @@ class pro_api:
|
|
|
532
531
|
def dc_member(self, api_name='dc_member', **kwargs):
|
|
533
532
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
534
533
|
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
def dc_daily(self, api_name='dc_daily', **kwargs):
|
|
538
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
539
|
-
|
|
540
|
-
def cb_factor_pro(self, api_name='cb_factor_pro', **kwargs):
|
|
541
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
542
|
-
|
|
543
|
-
def stk_ah_comparison(self, api_name='stk_ah_comparison', **kwargs):
|
|
544
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
545
|
-
|
|
546
|
-
def stock_hsgt(self, api_name='stock_hsgt', **kwargs):
|
|
547
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
548
|
-
|
|
549
|
-
def stock_st(self, api_name='stock_st', **kwargs):
|
|
550
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
551
|
-
|
|
552
|
-
def bse_mapping(self, api_name='bse_mapping', **kwargs):
|
|
553
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
554
|
-
#6000
|
|
555
|
-
def tdx_index(self, api_name='tdx_index', **kwargs):
|
|
556
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
557
|
-
def tdx_member(self, api_name='tdx_member', **kwargs):
|
|
558
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
559
|
-
def tdx_daily(self, api_name='tdx_daily', **kwargs):
|
|
560
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
534
|
def ths_member(self, api_name='ths_member', **kwargs):
|
|
566
535
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
567
536
|
|
|
@@ -646,7 +615,6 @@ class pro_api:
|
|
|
646
615
|
def ft_mins(self, api_name='ft_mins', **kwargs):
|
|
647
616
|
return '此接口为单独权限,和积分没有关系,需要单独购买'
|
|
648
617
|
|
|
649
|
-
|
|
650
618
|
def realtime_quote(self, api_name='realtime_quote', **kwargs):
|
|
651
619
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
652
620
|
|
|
@@ -733,7 +701,6 @@ class pro_api:
|
|
|
733
701
|
|
|
734
702
|
def moneyflow_dc(self, api_name='moneyflow_dc', **kwargs):
|
|
735
703
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
736
|
-
|
|
737
704
|
def moneyflow_cnt_ths(self, api_name='moneyflow_cnt_ths', **kwargs):
|
|
738
705
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
739
706
|
|
|
@@ -742,6 +709,65 @@ class pro_api:
|
|
|
742
709
|
|
|
743
710
|
def kpl_concept_cons(self, api_name='kpl_concept_cons', **kwargs):
|
|
744
711
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
712
|
+
def request_with_retry(self,url, max_retries,):
|
|
713
|
+
for attempt in range(max_retries):
|
|
714
|
+
try:
|
|
715
|
+
response = requests.get(url=url, timeout=100, )
|
|
716
|
+
response.raise_for_status()
|
|
717
|
+
return response
|
|
718
|
+
except Exception as e:
|
|
719
|
+
# print(f"尝试 {attempt + 1} 失败: {e}")
|
|
720
|
+
if attempt < max_retries - 1:
|
|
721
|
+
wait_time = 1 * (2 ** attempt) # 指数退避
|
|
722
|
+
# print(f"等待 {wait_time} 秒后重试...")
|
|
723
|
+
time.sleep(wait_time)
|
|
724
|
+
# print(f"请求失败,已重试 {max_retries} 次")
|
|
725
|
+
return None
|
|
726
|
+
|
|
727
|
+
def rt_min(self,ts_code,freq,max_retries=3):
|
|
728
|
+
url = f"http://39.105.209.102:9002/csi/stock/min/rt_min/{ts_code}/{freq}/{self.token}"
|
|
729
|
+
r=self.request_with_retry(url, max_retries=max_retries)
|
|
730
|
+
df=pd.DataFrame(r.json())
|
|
731
|
+
df['time'] = pd.to_datetime(df['time'])
|
|
732
|
+
if freq == '60min':
|
|
733
|
+
periods = {
|
|
734
|
+
'09:15-10:30': ('09:15:00', '10:30:00'),
|
|
735
|
+
'10:31-11:30': ('10:31:00', '11:30:00'),
|
|
736
|
+
'13:01-14:00': ('13:01:00', '14:00:00'),
|
|
737
|
+
'14:01-15:00': ('14:01:00', '15:00:00')
|
|
738
|
+
}
|
|
739
|
+
result = []
|
|
740
|
+
for name, (start, end) in periods.items():
|
|
741
|
+
mask = (df['time'].dt.strftime('%H:%M:%S') >= start) & \
|
|
742
|
+
(df['time'].dt.strftime('%H:%M:%S') <= end)
|
|
743
|
+
data = df[mask]
|
|
744
|
+
if len(data) > 0:
|
|
745
|
+
result.append({
|
|
746
|
+
'ts_code': df.iloc[0]['ts_code'],
|
|
747
|
+
'time': end,
|
|
748
|
+
'open': data.iloc[0]['open'],
|
|
749
|
+
'high': data['high'].max(),
|
|
750
|
+
'low': data['low'].min(),
|
|
751
|
+
'close': data.iloc[-1]['close'],
|
|
752
|
+
'vol': data['vol'].sum(),
|
|
753
|
+
'amount': data['amount'].sum()
|
|
754
|
+
})
|
|
755
|
+
df = pd.DataFrame(result)
|
|
756
|
+
|
|
757
|
+
else:
|
|
758
|
+
# 设置为索引
|
|
759
|
+
df.set_index('time', inplace=True)
|
|
760
|
+
df = df.resample(freq, label='right', closed='right').agg({
|
|
761
|
+
'ts_code': 'first',
|
|
762
|
+
'open': 'first',
|
|
763
|
+
'high': 'max',
|
|
764
|
+
'low': 'min',
|
|
765
|
+
'close': 'last',
|
|
766
|
+
'vol': 'sum',
|
|
767
|
+
'amount': 'sum',
|
|
768
|
+
}).dropna().reset_index()[[ 'ts_code','time','open','high','low','close','vol','amount']]
|
|
769
|
+
|
|
770
|
+
return df
|
|
745
771
|
|
|
746
772
|
def stk_auction_o(self, api_name='stk_auction_o', **kwargs):
|
|
747
773
|
|
|
@@ -749,18 +775,41 @@ class pro_api:
|
|
|
749
775
|
|
|
750
776
|
def stk_auction_c(self, api_name='stk_auction_c', **kwargs):
|
|
751
777
|
return '此接口为单独权限,和积分没有关系,需要单独购买'
|
|
778
|
+
|
|
779
|
+
def dc_daily(self, api_name='dc_daily', **kwargs):
|
|
780
|
+
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
781
|
+
|
|
782
|
+
def cb_factor_pro(self, api_name='cb_factor_pro', **kwargs):
|
|
783
|
+
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
784
|
+
|
|
785
|
+
def stk_ah_comparison(self, api_name='stk_ah_comparison', **kwargs):
|
|
786
|
+
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
787
|
+
|
|
788
|
+
def stock_hsgt(self, api_name='stock_hsgt', **kwargs):
|
|
789
|
+
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
790
|
+
|
|
791
|
+
def stock_st(self, api_name='stock_st', **kwargs):
|
|
792
|
+
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
793
|
+
|
|
794
|
+
def bse_mapping(self, api_name='bse_mapping', **kwargs):
|
|
795
|
+
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
796
|
+
|
|
797
|
+
|
|
752
798
|
def stk_auction(self, api_name='stk_auction', **kwargs):
|
|
753
799
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
800
|
+
|
|
754
801
|
def ft_limit(self, api_name='ft_limit', **kwargs):
|
|
755
802
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
803
|
+
|
|
756
804
|
def irm_qa_sh(self, api_name='irm_qa_sh', **kwargs):
|
|
757
805
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
806
|
+
|
|
758
807
|
def irm_qa_sz(self, api_name='irm_qa_sz', **kwargs):
|
|
759
808
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
760
|
-
|
|
761
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
809
|
+
|
|
762
810
|
def stk_week_month_adj(self, api_name='stk_week_month_adj', **kwargs):
|
|
763
811
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
812
|
+
|
|
764
813
|
def limit_list_ths(self, api_name='limit_list_ths', **kwargs):
|
|
765
814
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
766
815
|
|
|
@@ -769,20 +818,11 @@ class pro_api:
|
|
|
769
818
|
|
|
770
819
|
def limit_cpt_list(self, api_name='limit_cpt_list', **kwargs):
|
|
771
820
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
772
|
-
def etf_basic(self, api_name='etf_basic', **kwargs):
|
|
773
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
774
|
-
|
|
775
|
-
def etf_index(self, api_name='etf_index', **kwargs):
|
|
776
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
777
|
-
def etf_share_size(self, api_name='etf_share_size', **kwargs):
|
|
778
|
-
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
779
|
-
|
|
780
821
|
|
|
781
822
|
def ci_index_member(self, api_name='ci_index_member', **kwargs):
|
|
782
823
|
return self.query(token=self.token, api_name=api_name, **kwargs)
|
|
783
824
|
|
|
784
825
|
|
|
785
|
-
|
|
786
826
|
import pandas as pd
|
|
787
827
|
import os
|
|
788
828
|
|
|
@@ -835,7 +875,7 @@ def pro_bar(ts_code='', api=None, start_date='', end_date='', freq='D', asset='E
|
|
|
835
875
|
|
|
836
876
|
"""
|
|
837
877
|
# url = "http://127.0.0.1:9002/tp"
|
|
838
|
-
url = "http://
|
|
878
|
+
url = "http://123.57.69.240:9002/tp"
|
|
839
879
|
|
|
840
880
|
params = {
|
|
841
881
|
'token':get_token(),
|
chinadata/example.py
CHANGED
|
@@ -4,22 +4,30 @@
|
|
|
4
4
|
pip install chinadata
|
|
5
5
|
|
|
6
6
|
"""
|
|
7
|
+
|
|
8
|
+
|
|
7
9
|
#2、
|
|
8
10
|
import chinadata.ca_data as ts
|
|
9
11
|
|
|
10
12
|
|
|
11
|
-
ts.set_token('
|
|
12
|
-
pro=ts.pro_api('
|
|
13
|
+
ts.set_token('3a9e334456c8405c00d013914953')
|
|
14
|
+
pro=ts.pro_api('a9e334456c8405c00d013914953')
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# 你要测量的代码块
|
|
13
19
|
|
|
14
20
|
# #查询当前所有正常上市交易的股票列表
|
|
15
21
|
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
|
|
16
22
|
print(data)
|
|
17
|
-
|
|
23
|
+
|
|
18
24
|
#
|
|
19
25
|
df = ts.pro_bar(ts_code='000007.SZ', start_date='20240817', end_date='20241215')
|
|
20
26
|
print(df)
|
|
21
27
|
|
|
28
|
+
|
|
22
29
|
df = pro.daily(ts_code='000001.SZ', start_date='20000701', end_date='20180718')
|
|
23
30
|
print(df)
|
|
24
31
|
|
|
25
32
|
|
|
33
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
chinadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
chinadata/ca_data.py,sha256=INTsbrcsyQjfp051erJE_gauQdmxeVyTY697auQwAZQ,39038
|
|
3
|
+
chinadata/example.py,sha256=x2veHR97H3ym1ekSc7Kfi1v4RrH7M-d1mm2oqXWEM08,613
|
|
4
|
+
chinadata-0.4.0.dist-info/METADATA,sha256=rjdTdZFEyYcoKk9ohLbDF_bPIXktXmeuUTzxcnybqnw,161
|
|
5
|
+
chinadata-0.4.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
6
|
+
chinadata-0.4.0.dist-info/top_level.txt,sha256=Ptxvu9uzRHP4kVGRf413KuwSvsY2mk_KgQJ6ssWwisU,10
|
|
7
|
+
chinadata-0.4.0.dist-info/RECORD,,
|
chinadata-0.3.9.dist-info/RECORD
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
chinadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
chinadata/ca_data.py,sha256=CfEWR1Awl7iJk_nfP5QtEMKsaLY9i6UYJhiNlZjUDaw,37514
|
|
3
|
-
chinadata/example.py,sha256=eKj2Hl5KVq9EJGWVY2ZoRJOqZ-p4yiSoFI-xVzdf8LA,575
|
|
4
|
-
chinadata-0.3.9.dist-info/METADATA,sha256=cMWEdKwVDUpmKugFrsZG-RyE52FvwB-G7GYeX4CGFF0,161
|
|
5
|
-
chinadata-0.3.9.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
6
|
-
chinadata-0.3.9.dist-info/top_level.txt,sha256=Ptxvu9uzRHP4kVGRf413KuwSvsY2mk_KgQJ6ssWwisU,10
|
|
7
|
-
chinadata-0.3.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|