siat 2.12.2__py3-none-any.whl → 2.12.3__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.
- siat/financial_statements.py +7 -1
- siat/financials_china2.py +42 -12
- siat/translate.py +18 -9
- {siat-2.12.2.dist-info → siat-2.12.3.dist-info}/METADATA +1 -1
- {siat-2.12.2.dist-info → siat-2.12.3.dist-info}/RECORD +7 -7
- {siat-2.12.2.dist-info → siat-2.12.3.dist-info}/WHEEL +0 -0
- {siat-2.12.2.dist-info → siat-2.12.3.dist-info}/top_level.txt +0 -0
siat/financial_statements.py
CHANGED
@@ -27,6 +27,9 @@ if __name__=='__main__':
|
|
27
27
|
symbol='600519.SS'
|
28
28
|
symbol='00700.HK'
|
29
29
|
|
30
|
+
symbol='601398.SS'
|
31
|
+
symbol='601328.SS'
|
32
|
+
|
30
33
|
fsdf=get_balance_sheet(symbol)
|
31
34
|
|
32
35
|
def get_balance_sheet(symbol):
|
@@ -134,14 +137,17 @@ def get_balance_sheet(symbol):
|
|
134
137
|
#存货
|
135
138
|
if 'Inventory' not in list(stmt):
|
136
139
|
stmt['Inventory']=0.0
|
140
|
+
|
137
141
|
#流动资产
|
142
|
+
if 'Receivables' not in list(stmt):
|
143
|
+
stmt['Receivables']=0.0
|
144
|
+
|
138
145
|
if 'CurrentAssets' not in list(stmt):
|
139
146
|
stmt['CurrentAssets']=stmt['CashAndCashEquivalents']+ \
|
140
147
|
stmt['Receivables']+stmt['Inventory']
|
141
148
|
#应收账款
|
142
149
|
if 'AccountsReceivable' not in list(stmt):
|
143
150
|
stmt['AccountsReceivable']=stmt['Receivables']
|
144
|
-
|
145
151
|
|
146
152
|
#总检查:总资产=总负债+总权益是否成立
|
147
153
|
stmt['TA-TL-TE']=stmt['TotalAssets']-stmt['TotalLiabilities']- \
|
siat/financials_china2.py
CHANGED
@@ -91,45 +91,71 @@ def get_fin_stmt_ak_multi(tickers,fsdates):
|
|
91
91
|
},inplace=True)
|
92
92
|
|
93
93
|
#计算指标
|
94
|
+
entry_list=list(dfs)
|
94
95
|
#dfs['应收账款占比%']=round(dfs['应收账款']/dfs['资产总计']*100,2)
|
95
96
|
dfs['应收账款占比%']=dfs.apply(lambda x:round(x['应收账款']/x['资产总计']*100,2),axis=1)
|
96
97
|
|
97
98
|
#dfs['存货占比%']=round(dfs['存货']/dfs['资产总计']*100,2)
|
98
99
|
dfs['存货占比%']=dfs.apply(lambda x:round(x['存货']/x['资产总计']*100,2),axis=1)
|
99
100
|
|
100
|
-
|
101
|
-
|
102
|
-
|
101
|
+
if ('流动资产合计' in entry_list) and ('流动负债合计' in entry_list):
|
102
|
+
dfs['流动比率%']=dfs.apply(lambda x:round(x['流动资产合计']/x['流动负债合计']*100,2),axis=1)
|
103
|
+
dfs['速动资产合计']=dfs.apply(lambda x:x['流动资产合计']-x['存货'],axis=1)
|
104
|
+
dfs['速动比率%']=dfs.apply(lambda x:round(x['速动资产合计']/x['流动负债合计']*100,2),axis=1)
|
103
105
|
dfs['资产负债率%']=dfs.apply(lambda x:round(x['负债合计']/x['资产总计']*100,2),axis=1)
|
104
106
|
|
107
|
+
if not ('营业总收入' in entry_list) and ('营业收入' in entry_list):
|
108
|
+
dfs['营业总收入']=dfs['营业收入']
|
109
|
+
if not ('营业成本' in entry_list) and ('营业收入' in entry_list) and ('营业利润' in entry_list):
|
110
|
+
dfs['营业成本']=dfs['营业收入'] - dfs['营业利润']
|
111
|
+
|
105
112
|
dfs['毛利润']=dfs.apply(lambda x:x['营业总收入']-x['营业成本'],axis=1)
|
106
113
|
dfs['毛利润率%']=dfs.apply(lambda x:round(x['毛利润']/x['营业总收入']*100,2),axis=1)
|
107
114
|
dfs['营业利润率%']=dfs.apply(lambda x:round(x['营业利润']/x['营业总收入']*100,2),axis=1)
|
108
|
-
|
115
|
+
|
116
|
+
if '销售费用' in entry_list:
|
117
|
+
dfs['销售费用率%']=dfs.apply(lambda x:round(x['销售费用']/x['营业总收入']*100,2),axis=1)
|
118
|
+
|
119
|
+
if not ('管理费用' in entry_list) and ('业务及管理费用' in entry_list):
|
120
|
+
dfs['管理费用']=dfs['业务及管理费用']
|
109
121
|
dfs['管理费用率%']=dfs.apply(lambda x:round(x['管理费用']/x['营业总收入']*100,2),axis=1)
|
110
122
|
try:
|
111
123
|
dfs['研发费用率%']=dfs.apply(lambda x:round(x['研发费用']/x['营业总收入']*100,2),axis=1)
|
112
124
|
except:
|
113
125
|
dfs['研发费用率%']='-'
|
126
|
+
|
127
|
+
if not ('营业外收入' in entry_list) and ('加:营业外收入' in entry_list):
|
128
|
+
dfs['营业外收入']=dfs['加:营业外收入']
|
129
|
+
if not ('营业外支出' in entry_list) and ('减:营业外支出' in entry_list):
|
130
|
+
dfs['营业外支出']=dfs['减:营业外支出']
|
114
131
|
dfs['营业外收支']=dfs.apply(lambda x:x['营业外收入']-x['营业外支出'],axis=1)
|
115
132
|
dfs['税前利润']=dfs['利润总额']
|
116
133
|
dfs['税前利润率%']=dfs.apply(lambda x:round(x['利润总额']/x['营业总收入']*100,2),axis=1)
|
134
|
+
|
135
|
+
if not ('所得税费用' in entry_list) and ('减:所得税' in entry_list):
|
136
|
+
dfs['所得税费用']=dfs['减:所得税']
|
117
137
|
dfs['实际所得税率%']=dfs.apply(lambda x:round(x['所得税费用']/x['利润总额']*100,2),axis=1)
|
118
138
|
dfs['净利润率%']=dfs.apply(lambda x:round(x['净利润']/x['营业总收入']*100,2),axis=1)
|
119
139
|
|
120
|
-
dfs['流通股股数']=dfs.apply(lambda x:round(x['净利润']/x['基本每股收益'],0),axis=1)
|
121
|
-
|
140
|
+
#dfs['流通股股数']=dfs.apply(lambda x:round(x['净利润']/x['基本每股收益'],0),axis=1)
|
141
|
+
|
142
|
+
if '流动负债合计' in entry_list:
|
143
|
+
dfs['短期现金偿债能力%']=dfs.apply(lambda x:round(x['经营活动现金流净额']/x['流动负债合计']*100,2),axis=1)
|
122
144
|
dfs['长期现金偿债能力%']=dfs.apply(lambda x:round(x['经营活动现金流净额']/x['负债合计']*100,2),axis=1)
|
123
|
-
dfs['现金支付股利能力(元)']=dfs.apply(lambda x:round(x['经营活动现金流净额']/x['流通股股数'],2),axis=1)
|
145
|
+
#dfs['现金支付股利能力(元)']=dfs.apply(lambda x:round(x['经营活动现金流净额']/x['流通股股数'],2),axis=1)
|
146
|
+
|
147
|
+
if not ('所有者权益合计' in entry_list) and ('负债及股东权益总计' in entry_list) and ('负债合计' in entry_list):
|
148
|
+
dfs['所有者权益合计']=dfs['负债及股东权益总计'] - dfs['负债合计']
|
124
149
|
dfs['现金综合支付能力%']=dfs.apply(lambda x:round(x['经营活动现金流净额']/x['所有者权益合计']*100,2),axis=1)
|
125
150
|
dfs['销售现金比率%']=dfs.apply(lambda x:round(x['经营活动现金流入']/x['营业总收入']*100,2),axis=1)
|
126
151
|
dfs['盈利现金比率%']=dfs.apply(lambda x:round(x['经营活动现金流净额']/x['净利润'],2),axis=1)
|
127
152
|
dfs['资产现金回收率%']=dfs.apply(lambda x:round(x['经营活动现金流净额']/x['资产总计']*100,2),axis=1)
|
128
153
|
dfs['现金流入流出比率%']=dfs.apply(lambda x:round(x['经营活动现金流入']/x['经营活动现金流出']*100,2),axis=1)
|
129
154
|
|
130
|
-
dfs['
|
131
|
-
|
132
|
-
|
155
|
+
if not (((dfs['销售商品、提供劳务收到的现金']==0).all()) or ((dfs['购买商品、接受劳务支付的现金']==0).all())):
|
156
|
+
dfs['现金购销比率%']=dfs.apply(lambda x:round(x['购买商品、接受劳务支付的现金']/x['销售商品、提供劳务收到的现金']*100,2),axis=1)
|
157
|
+
dfs['营业现金回笼率%']=dfs.apply(lambda x:round(x['销售商品、提供劳务收到的现金']/x['营业总收入']*100,2),axis=1)
|
158
|
+
dfs['支付给职工的现金比率%']=dfs.apply(lambda x:round(x['支付给职工以及为职工支付的现金']/x['销售商品、提供劳务收到的现金']*100,2),axis=1)
|
133
159
|
|
134
160
|
# 自定义财务比率
|
135
161
|
|
@@ -398,10 +424,14 @@ if __name__=='__main__':
|
|
398
424
|
if __name__=='__main__':
|
399
425
|
tickers=["000002.SZ","600266.SS",'600383.SS','600048.SS']
|
400
426
|
fsdates=['2021-12-31','2020-12-31','2019-12-31','2018-12-31']
|
427
|
+
|
428
|
+
tickers=['601328.SS','601398.SS','601288.SS','601988.SS','601939.SS','601658.SS']
|
429
|
+
fsdates=['2022-12-31','2021-12-31','2010-12-31','2019-12-31']
|
430
|
+
|
401
431
|
df=get_fin_stmt_ak_multi(tickers,fsdates)
|
402
432
|
|
403
|
-
ticker="
|
404
|
-
fsdate='
|
433
|
+
ticker="601328.SS"
|
434
|
+
fsdate='2022-12-31'
|
405
435
|
items=["货币资金","应收票据","应收账款"]
|
406
436
|
dfp=fs_item_analysis_1(df,ticker,fsdate,items)
|
407
437
|
|
siat/translate.py
CHANGED
@@ -936,16 +936,20 @@ def codetranslate0(code):
|
|
936
936
|
['TLW.UK','英国塔洛石油'],['HBR.UK','英国哈勃能源'],
|
937
937
|
|
938
938
|
# 荷兰知名上市公司
|
939
|
-
['ASML.US','阿斯麦'],['
|
940
|
-
['
|
939
|
+
['ASML.US','阿斯麦'],['0QB8.UK','阿斯麦'],
|
940
|
+
['1TY.DE','Prosus'],['STLA.US','斯特兰蒂斯'],
|
941
|
+
['HEIA.AS','喜力啤酒'],['0O26.UK','喜力啤酒'],
|
942
|
+
['NXPI.US','恩智浦半导体'],['ING.US','荷兰国际集团'],
|
941
943
|
['AHOG.DE','阿霍德·德尔海兹'],['ARGX.US','Argenx制药'],['WOSB.DE','荷兰威科集团'],
|
942
944
|
['EYX.DE','Exor投资集团'],['ARGX.US','Argenx制药'],['WOSB.DE','荷兰威科集团'],
|
943
945
|
['1N8.DE','Adyen支付'],['AVS.DE','ASM国际'],
|
944
946
|
['PHG.US','飞利浦美股'],['0LNG.UK','荷兰飞利浦'],
|
945
947
|
|
946
948
|
# 德国知名上市公司
|
947
|
-
['SAP.DE','德国思爱普'],['SIE.DE','西门子集团'],
|
948
|
-
['
|
949
|
+
['SAP.DE','德国思爱普'],['SIE.DE','西门子集团'],
|
950
|
+
['P911.DE','保时捷'],['0JHU.UK','保时捷'],
|
951
|
+
['DTE.DE','德国电信'],['ALV.DE','德国安联集团'],
|
952
|
+
['MBG.DE','奔驰汽车'],['0NXX.UK','奔驰汽车'],
|
949
953
|
['BMW.DE','宝马汽车'],['MRK.DE','默克制药'],['SHL.DE','西门子医疗'],
|
950
954
|
['DHL.DE','德国邮政敦豪集团'],['IFX.DE','英飞凌半导体'],['BAYN.DE','拜耳制药'],
|
951
955
|
['RAA.DE','德国莱欣诺'],['UN01.DE','尤尼珀能源'],['BAS.DE','巴斯夫化工'],
|
@@ -961,7 +965,9 @@ def codetranslate0(code):
|
|
961
965
|
|
962
966
|
|
963
967
|
# 捷克、匈牙利、波兰知名上市公司
|
964
|
-
['CEZ.PL','捷克CEZ能源'],['
|
968
|
+
['CEZ.PL','捷克CEZ能源'],['0NZF.UK','捷克CEZ能源'],
|
969
|
+
['KOMB.PR','捷克科梅尔奇尼银行'],['0IKH.UK','捷克科梅尔奇尼银行'],
|
970
|
+
['OTP.HU','匈牙利OTP银行'],
|
965
971
|
['MOL.HU','匈牙利MOL能源'],['PZU.PL','波兰PZU保险'],['PEO.PL','波兰Pekao银行'],
|
966
972
|
['PZU.WA','波兰PZU保险'],['CEZ.PR','捷克CEZ能源'],
|
967
973
|
|
@@ -970,13 +976,16 @@ def codetranslate0(code):
|
|
970
976
|
['TENERGY.AT','希腊泰纳能源'],['CCH.UK','希腊可乐灌装公司'],
|
971
977
|
|
972
978
|
# 其他知名欧洲上市公司
|
973
|
-
['AKRBP.OL','挪威AkerBP石油'],
|
974
|
-
['
|
975
|
-
['
|
979
|
+
['AKRBP.OL','挪威AkerBP石油'],
|
980
|
+
['GZF.DE','法国燃气苏伊士集团'],['0LD0.UK','法国燃气苏伊士集团'],
|
981
|
+
['ENI.DE','意大利埃尼能源'],
|
982
|
+
['EQNR.US','挪威国家石油公司'],['0M2Z.UK','挪威国家石油公司'],
|
983
|
+
['OMV.DE','奥地利石油天然气集团'],['0MKH.UK','奥地利石油天然气集团'],
|
984
|
+
['REP.DE','西班牙雷普索尔公司'],['0NQG.UK','西班牙雷普索尔公司'],
|
985
|
+
['TTE.US','法国道达尔公司'],['0RDT.UK','法拉利汽车'],
|
976
986
|
['TSM.US','台积电美股'],
|
977
987
|
|
978
988
|
|
979
|
-
|
980
989
|
#股票:指数==============================================================
|
981
990
|
['000300.SS','沪深300指数'],['399300.SS','沪深300指数'],
|
982
991
|
['000001.SS','上证综合指数'],['399001.SZ','深证成份指数'],
|
@@ -33,13 +33,13 @@ siat/exchange_bond_china.pickle,sha256=78r6E3vPFZlCYPcmS1asgVbe0FGAxsCWaw8ek42Sd
|
|
33
33
|
siat/fama_french.py,sha256=tNtr0WRyPxDbgN6Nu_ZnDtVC-RIiQfh6w0JiPjevWa0,47538
|
34
34
|
siat/fama_french_test.py,sha256=M4O23lBKsJxhWHRluwCb3l7HSEn3OFTjzGMpehcevRg,4678
|
35
35
|
siat/financial_base.py,sha256=j961-1YS9qBl6LmOzI4gCOpdTmk0d1JgNXMzLmV-lrs,41062
|
36
|
-
siat/financial_statements.py,sha256=
|
36
|
+
siat/financial_statements.py,sha256=feuNmtAo63i6IrTSAhSiolaw04JiFCJUWSWABixA69I,23509
|
37
37
|
siat/financial_statements_test.py,sha256=FLhx8JD-tVVWSBGux6AMz1jioXX4U4bp9DmgFHYXb_w,716
|
38
38
|
siat/financials.py,sha256=6gSwc2VzJy_cAbK2imXEl3Kldw3mmT2Gm54JbK7x35I,78743
|
39
39
|
siat/financials2 - 副本.py,sha256=dKlNjIfKeoSy055fQ6E6TUj9HEoO5Ney9grD84J5kfk,14389
|
40
40
|
siat/financials2.py,sha256=K1TMWyAqbgYnLJT5LtXso_1H3ae8qRjVNXNJycmHD6Q,35952
|
41
41
|
siat/financials_china.py,sha256=nUSPS4SDLP1RaOZF6uIvel8pFl3X_aBO_I0Opl1O8RI,177685
|
42
|
-
siat/financials_china2.py,sha256=
|
42
|
+
siat/financials_china2.py,sha256=12wgmTz1iV7N3IKm6Z0b6_punUzlkBMQ8I8yqvBsScU,73675
|
43
43
|
siat/financials_china2_test.py,sha256=Erz5k4LyOplBBvYls2MypuqHpVNJ3daiLdyeJezNPu0,2722
|
44
44
|
siat/financials_china2_test2.py,sha256=C8CuYTMHN4Mhp-sTu-Bmg0zMXRCaYV6ezGDoYartRYQ,3507
|
45
45
|
siat/financials_china2_test3.py,sha256=UXYSA80DNSPRhHpovc2MA9JkpILWMAQaRatbWCHBNPs,3118
|
@@ -118,13 +118,13 @@ siat/transaction_test.py,sha256=Z8g1LJCN4-mnUByXMUMoFmN0t105cbmsz2QmvSuIkbU,1858
|
|
118
118
|
siat/translate-20230125.py,sha256=NPPSXhT38s5t9fzMvl_fvi4ckSB73ThLmZetVI-xGdU,117953
|
119
119
|
siat/translate-20230206.py,sha256=-vtI125WyaJhmPotOpDAmclt_XnYVaWU9ByLWZ6FyYE,118133
|
120
120
|
siat/translate-20230215.py,sha256=TJgtPE3n8IjljmZ4Pefy8dmHoNdFF-1zpML6BhA9FKE,121657
|
121
|
-
siat/translate.py,sha256=
|
121
|
+
siat/translate.py,sha256=z79RqvEFuq2rpISQr8F64qxT5AAZRzE7lrt9YOTxoyU,143088
|
122
122
|
siat/universal_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
|
123
123
|
siat/valuation.py,sha256=3VKrO9b9xY9dOJGGuF0ZhytzB5d2pCx3kO3TtMml7mo,44025
|
124
124
|
siat/valuation_china.py,sha256=oEQRrktJNHiOG1mJSQN1aSSQAQrwrg-ppIHyNVjMjNg,67603
|
125
125
|
siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
|
126
126
|
siat/var_model_validation.py,sha256=zB_Skk_tmzIR15l6oAW3am4HBGVIG-eZ8gJhCdXZ8Qw,14859
|
127
|
-
siat-2.12.
|
128
|
-
siat-2.12.
|
129
|
-
siat-2.12.
|
130
|
-
siat-2.12.
|
127
|
+
siat-2.12.3.dist-info/METADATA,sha256=RIArV_5zea1u8rckrg5XHosA_cpXuiLuQwfz-N-x8yA,1378
|
128
|
+
siat-2.12.3.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
129
|
+
siat-2.12.3.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
|
130
|
+
siat-2.12.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|