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.
@@ -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
- dfs['流动比率%']=dfs.apply(lambda x:round(x['流动资产合计']/x['流动负债合计']*100,2),axis=1)
101
- dfs['速动资产合计']=dfs.apply(lambda x:x['流动资产合计']-x['存货'],axis=1)
102
- dfs['速动比率%']=dfs.apply(lambda x:round(x['速动资产合计']/x['流动负债合计']*100,2),axis=1)
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
- dfs['销售费用率%']=dfs.apply(lambda x:round(x['销售费用']/x['营业总收入']*100,2),axis=1)
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
- dfs['短期现金偿债能力%']=dfs.apply(lambda x:round(x['经营活动现金流净额']/x['流动负债合计']*100,2),axis=1)
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['现金购销比率%']=dfs.apply(lambda x:round(x['购买商品、接受劳务支付的现金']/x['销售商品、提供劳务收到的现金']*100,2),axis=1)
131
- dfs['营业现金回笼率%']=dfs.apply(lambda x:round(x['销售商品、提供劳务收到的现金']/x['营业总收入']*100,2),axis=1)
132
- dfs['支付给职工的现金比率%']=dfs.apply(lambda x:round(x['支付给职工以及为职工支付的现金']/x['销售商品、提供劳务收到的现金']*100,2),axis=1)
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="000002.SZ"
404
- fsdate='2021-12-31'
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','阿斯麦'],['1TY.DE','Prosus'],['STLA.US','斯特兰蒂斯'],
940
- ['HEIA.AS','喜力啤酒'],['NXPI.US','恩智浦半导体'],['ING.US','荷兰国际集团'],
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','西门子集团'],['P911.DE','保时捷'],
948
- ['DTE.DE','德国电信'],['ALV.DE','德国安联集团'],['MBG.DE','奔驰汽车'],
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能源'],['KOMB.PR','捷克科梅尔奇尼银行'],['OTP.HU','匈牙利OTP银行'],
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石油'],['GZF.DE','法国燃气苏伊士集团'],
974
- ['ENI.DE','意大利埃尼能源'],['EQNR.US','挪威石油公司'],['OMV.DE','奥地利石油天然气集团'],
975
- ['REP.DE','西班牙雷普索尔公司'],['TTE.US','法国道达尔公司'],
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','深证成份指数'],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 2.12.2
3
+ Version: 2.12.3
4
4
  Summary: Securities Investment Analysis Tools (siat)
5
5
  Home-page: https://pypi.org/project/siat/
6
6
  Author: Prof. WANG Dehong, Business School, BFSU
@@ -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=5Ax5bJNA7ReofdScjTLugCrsDoRe8nI967Ey5sFZC18,23367
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=EWDuSHQc6TMeU8mXV_LyLLI3URBU8WQYLEZ3obXyB6E,71864
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=zAemLG2s7wABKhZjM7esMfqH3tKX48O53sTEOLdilZI,142620
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.2.dist-info/METADATA,sha256=nzT3EBKNNDxcBkSHFW_dR-q3f1GoL0w0HhTjy0Bpvz4,1378
128
- siat-2.12.2.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
129
- siat-2.12.2.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
130
- siat-2.12.2.dist-info/RECORD,,
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