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