siat 3.7.6__py3-none-any.whl → 3.7.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.
- siat/__init__.py +55 -33
- siat/allin.py +3 -0
- siat/common.py +249 -1
- siat/fin_stmt2_yahoo.py +839 -0
- siat/markowitz2.py +12 -12
- siat/security_prices.py +8 -0
- siat/stock.py +5 -5
- siat/valuation.py +12 -8
- {siat-3.7.6.dist-info → siat-3.7.8.dist-info}/METADATA +1 -1
- {siat-3.7.6.dist-info → siat-3.7.8.dist-info}/RECORD +13 -12
- {siat-3.7.6.dist-info → siat-3.7.8.dist-info}/LICENSE +0 -0
- {siat-3.7.6.dist-info → siat-3.7.8.dist-info}/WHEEL +0 -0
- {siat-3.7.6.dist-info → siat-3.7.8.dist-info}/top_level.txt +0 -0
siat/markowitz2.py
CHANGED
@@ -961,27 +961,27 @@ def portfolio_ranks_cn(portfolio_returns,pname,facecolor='papayawhip'):
|
|
961
961
|
"风险排名":text_lang("风险排名","Risk#"), \
|
962
962
|
"年化标准差%":text_lang("年化标准差%","pa Std%"), \
|
963
963
|
"标准差变化":text_lang("标准差变化","Std%+/-"), \
|
964
|
-
"收益率/标准差":text_lang("
|
964
|
+
"收益率/标准差":text_lang("收益/风险性价比","Return/Std")}, \
|
965
965
|
inplace=True)
|
966
966
|
|
967
967
|
#重新排名:相同的值赋予相同的序号
|
968
|
-
prr2["pa Return%"]=prr2["pa Return%"].apply(lambda x: round(float(x),ndecimals))
|
969
|
-
prr2["Return#"]=prr2["pa Return%"].rank(ascending=False,method='dense')
|
970
|
-
prr2["Return#"]=prr2["Return#"].apply(lambda x: int(x))
|
968
|
+
prr2[text_lang("年化收益率%","pa Return%")]=prr2[text_lang("年化收益率%","pa Return%")].apply(lambda x: round(float(x),ndecimals))
|
969
|
+
prr2[text_lang("收益排名","Return#")]=prr2[text_lang("年化收益率%","pa Return%")].rank(ascending=False,method='dense')
|
970
|
+
prr2[text_lang("收益排名","Return#")]=prr2[text_lang("收益排名","Return#")].apply(lambda x: int(x))
|
971
971
|
|
972
|
-
prr2["pa Std%"]=prr2["pa Std%"].apply(lambda x: round(float(x),ndecimals))
|
973
|
-
prr2["Risk#"]=prr2["pa Std%"].rank(ascending=False,method='dense')
|
974
|
-
prr2["Risk#"]=prr2["Risk#"].apply(lambda x: int(x))
|
972
|
+
prr2[text_lang("年化标准差%","pa Std%")]=prr2[text_lang("年化标准差%","pa Std%")].apply(lambda x: round(float(x),ndecimals))
|
973
|
+
prr2[text_lang("风险排名","Risk#")]=prr2[text_lang("年化标准差%","pa Std%")].rank(ascending=False,method='dense')
|
974
|
+
prr2[text_lang("风险排名","Risk#")]=prr2[text_lang("风险排名","Risk#")].apply(lambda x: int(x))
|
975
975
|
|
976
|
-
prr2["Return/Std"]=prr2["Return/Std"].apply(lambda x: round(float(x),ndecimals))
|
977
|
-
prr2["Ret/Std#"]=prr2["Return/Std"].rank(ascending=False,method='dense')
|
978
|
-
prr2["Ret/Std#"]=prr2["Ret/Std#"].apply(lambda x: int(x))
|
976
|
+
prr2[text_lang("收益/风险性价比","Return/Std")]=prr2[text_lang("收益/风险性价比","Return/Std")].apply(lambda x: round(float(x),ndecimals))
|
977
|
+
prr2[text_lang("性价比排名","Ret/Std#")]=prr2[text_lang("收益/风险性价比","Return/Std")].rank(ascending=False,method='dense')
|
978
|
+
prr2[text_lang("性价比排名","Ret/Std#")]=prr2[text_lang("性价比排名","Ret/Std#")].apply(lambda x: int(x))
|
979
979
|
|
980
980
|
df_display_CSS(prr2,titletxt=titletxt,footnote='',facecolor='papayawhip',decimals=ndecimals, \
|
981
981
|
first_col_align='left',second_col_align='center', \
|
982
982
|
last_col_align='center',other_col_align='center', \
|
983
|
-
titile_font_size='15px',heading_font_size='
|
984
|
-
data_font_size='
|
983
|
+
titile_font_size='15px',heading_font_size='13px', \
|
984
|
+
data_font_size='13px')
|
985
985
|
|
986
986
|
"""
|
987
987
|
print(' ') #空一行
|
siat/security_prices.py
CHANGED
@@ -2211,8 +2211,16 @@ if __name__ =="__main__":
|
|
2211
2211
|
portfolio={'Market':('US','^GSPC'),'AAPL':1}
|
2212
2212
|
portfolio={'Market':('China','^HSI'),'0823.HK':1.0}
|
2213
2213
|
portfolio={'Market':('China','000001.SS'),'000661.SZ':2,'603392.SS':3,'300601.SZ':4}
|
2214
|
+
|
2214
2215
|
fromdate='2019-7-19'
|
2215
2216
|
todate='2020-7-20'
|
2217
|
+
|
2218
|
+
market={"Market":("China","000300.SS","我的地产组合")}
|
2219
|
+
stocks1={"600048.SS":.4,"001979":.3}
|
2220
|
+
stocks2={"600515.SS":.2,"600895":.1}
|
2221
|
+
portfolio=dict(market,**stocks1,**stocks2)
|
2222
|
+
|
2223
|
+
fromdate="2024-1-1"; todate="2024-11-25"
|
2216
2224
|
adj=False
|
2217
2225
|
source='auto'
|
2218
2226
|
|
siat/stock.py
CHANGED
@@ -2654,10 +2654,10 @@ def stock_dividend(ticker,start="L3Y",end="today",facecolor='whitesmoke',fontcol
|
|
2654
2654
|
try:
|
2655
2655
|
div=stock.dividends
|
2656
2656
|
except:
|
2657
|
-
print(" #Error(stock_dividend): no
|
2657
|
+
print(" #Error(stock_dividend): no dividend information found for",ticker)
|
2658
2658
|
return None
|
2659
2659
|
if len(div)==0:
|
2660
|
-
print(" #Warning(stock_dividend): no
|
2660
|
+
print(" #Warning(stock_dividend): no dividend information found for",ticker)
|
2661
2661
|
return None
|
2662
2662
|
|
2663
2663
|
# 去掉时区信息,避免合并中的日期时区冲突问题
|
@@ -2795,10 +2795,10 @@ def stock_split(ticker,start="L10Y",end="today",facecolor='whitesmoke',fontcolor
|
|
2795
2795
|
try:
|
2796
2796
|
div=stock.splits
|
2797
2797
|
except:
|
2798
|
-
print(" #Error(stock_split): no split
|
2798
|
+
print(" #Error(stock_split): no split information found for",ticker)
|
2799
2799
|
return None
|
2800
2800
|
if len(div)==0:
|
2801
|
-
print(" #Warning(stock_split): no split
|
2801
|
+
print(" #Warning(stock_split): no split information found for",ticker)
|
2802
2802
|
return None
|
2803
2803
|
|
2804
2804
|
# 去掉时区信息,避免合并中的日期时区冲突问题
|
@@ -2810,7 +2810,7 @@ def stock_split(ticker,start="L10Y",end="today",facecolor='whitesmoke',fontcolor
|
|
2810
2810
|
div1=div[div.index >= startdt]
|
2811
2811
|
div2=div1[div1.index <= enddt]
|
2812
2812
|
if len(div2)==0:
|
2813
|
-
print(" #Warning(stock_split): no split
|
2813
|
+
print(" #Warning(stock_split): no split information in period",fromdate,todate)
|
2814
2814
|
return None
|
2815
2815
|
|
2816
2816
|
#对齐打印
|
siat/valuation.py
CHANGED
@@ -1177,9 +1177,10 @@ def security_valuation(tickers,indicators,start,end, \
|
|
1177
1177
|
|
1178
1178
|
#==============================================================================
|
1179
1179
|
if __name__=='__main__':
|
1180
|
-
|
1180
|
+
bank_big=find_peers_china('国有大型银行Ⅱ',top=25)
|
1181
|
+
df=security_trend(bank_big,indicator='PE',start='MRY',graph=False)
|
1181
1182
|
indicator='PE'
|
1182
|
-
base=''
|
1183
|
+
base='601398.SS'
|
1183
1184
|
|
1184
1185
|
|
1185
1186
|
def print_valuation(df,indicator='PE',base='',facecolor='whitesmoke'):
|
@@ -1189,14 +1190,15 @@ def print_valuation(df,indicator='PE',base='',facecolor='whitesmoke'):
|
|
1189
1190
|
try:
|
1190
1191
|
df1=df[indicator]
|
1191
1192
|
except:
|
1192
|
-
print(" #Warning:
|
1193
|
+
print(f" #Warning(print_valuation): unsupported indicator {indicator} in current dataframe")
|
1193
1194
|
return
|
1194
1195
|
|
1195
1196
|
collist=list(df1)
|
1196
1197
|
base=base.upper()
|
1198
|
+
base=ticker_name(base)
|
1197
1199
|
if not (base in collist):
|
1198
1200
|
"""
|
1199
|
-
print(" #Warning: invalid item",base,"for current dataframe")
|
1201
|
+
print(" #Warning(print_valuation): invalid item",base,"for current dataframe")
|
1200
1202
|
print(" Valid items in current dataframe:\n",collist)
|
1201
1203
|
return
|
1202
1204
|
"""
|
@@ -1256,7 +1258,8 @@ def print_valuation(df,indicator='PE',base='',facecolor='whitesmoke'):
|
|
1256
1258
|
#df4=df3[['序号','证券名称',col_mean,col_mean_rel,'均值对比',col_latest_date,col_latest_rel,'对比@'+col_latest_date]]
|
1257
1259
|
df4=df3[['证券名称',col_mean,'均值排名',col_latest_date,'排名@'+col_latest_date,col_mean_rel,col_latest_rel,'均值对比','对比@'+col_latest_date]]
|
1258
1260
|
|
1259
|
-
titletxt="
|
1261
|
+
#titletxt="估值对比:"+ectranslate(indicator)+",降序排列"
|
1262
|
+
titletxt="估值对比:{0}({1}),降序排列".format(ectranslate(indicator),indicator)
|
1260
1263
|
"""
|
1261
1264
|
print("\n",titletxt,'\n')
|
1262
1265
|
alignlist=['left','right','center','right','center']+['right']*(len(list(df4))-5)
|
@@ -1273,16 +1276,17 @@ def print_valuation(df,indicator='PE',base='',facecolor='whitesmoke'):
|
|
1273
1276
|
#设置列数值对齐
|
1274
1277
|
dispf=dispt.set_properties(**{'text-align':'center'})
|
1275
1278
|
#设置前景背景颜色
|
1276
|
-
dispf2=dispf.set_properties(**{'background-color':facecolor,'color':fontcolor})
|
1279
|
+
#dispf2=dispf.set_properties(**{'background-color':facecolor,'color':fontcolor})
|
1280
|
+
dispf2=dispf.set_properties(**{'background-color':facecolor})
|
1277
1281
|
|
1278
1282
|
from IPython.display import display
|
1279
1283
|
display(dispf2)
|
1280
1284
|
|
1281
|
-
print(" ")
|
1285
|
+
#print(" ")
|
1282
1286
|
if diff > 0:
|
1283
1287
|
print("【注】未列出"+str(diff)+"只估值为非正数的证券:"+str(diff_list))
|
1284
1288
|
import datetime; todaydt = datetime.date.today()
|
1285
|
-
footnote="
|
1289
|
+
footnote="估值期间:"+col_start_date+"至"+col_latest_date+",数据来源: baidu/stooq/funddb/swhysc,"+str(todaydt)
|
1286
1290
|
print(footnote)
|
1287
1291
|
|
1288
1292
|
return
|
@@ -1,6 +1,6 @@
|
|
1
1
|
siat/__init__ -20240701.py,sha256=gP5uajXnJesnH5SL0ZPwq_Qhv59AG1bs4qwZv26Fo2Y,2894
|
2
|
-
siat/__init__.py,sha256=
|
3
|
-
siat/allin.py,sha256=
|
2
|
+
siat/__init__.py,sha256=pIo4CV3lNPKIhitmhIh_6aAfZrmzQWGNDcEnvZ7GXoc,3216
|
3
|
+
siat/allin.py,sha256=x1QC29PUBUYiA6IAbQKbRvtxIEUOBx8dy5k7zh1ABT4,2970
|
4
4
|
siat/alpha_vantage_test.py,sha256=tKr-vmuFH3CZAqwmISz6jzjPHzV1JJl3sPfZdz8aTfM,747
|
5
5
|
siat/assets_liquidity.py,sha256=o_UZdLs693uNWPEQB2OzxDH0mdWimOmq4qe_vx1pue0,28987
|
6
6
|
siat/assets_liquidity_test.py,sha256=UWk6HIUlizU7LQZ890fGx8LwU1jMMrIZswg8cFUJWZ8,1285
|
@@ -18,7 +18,7 @@ siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
|
|
18
18
|
siat/capm_beta2.py,sha256=-ZYYp1HK7SkfTR3vBKZ0QVC4Q_tbST2O4MGbX_V77J0,32031
|
19
19
|
siat/capm_beta_test.py,sha256=ImR0c5mc4hIl714XmHztdl7qg8v1E2lycKyiqnFj6qs,1745
|
20
20
|
siat/cmat_commons.py,sha256=Nj9Kf0alywaztVoMVeVVL_EZk5jRERJy8R8kBw88_Tg,38116
|
21
|
-
siat/common.py,sha256=
|
21
|
+
siat/common.py,sha256=crRasPR7t5G1t95hm9JWmIob9d-iYASA4GEW5bKVhWw,173203
|
22
22
|
siat/compare_cross.py,sha256=3iP9TH2h3w27F2ARZc7FjKcErYCzWRc-TPiymOyoVtw,24171
|
23
23
|
siat/compare_cross_test.py,sha256=xra5XYmQGEtfIZL2h-GssdH2hLdFIhG3eoCrkDrL3gY,3473
|
24
24
|
siat/concepts_iwencai.py,sha256=m1YEDtECRT6FqtzlKm91pt2I9d3Z_XoP59BtWdRdu8I,3061
|
@@ -36,6 +36,7 @@ siat/event_study.py,sha256=Q_AdnJzxxL6udCjn5LP6rdhOngsDRWPu5udFkK1CJZw,32223
|
|
36
36
|
siat/exchange_bond_china.pickle,sha256=zDqdPrFacQ0nqjP_SuF6Yy87EgijIRsFvFroW7FAYYY,1265092
|
37
37
|
siat/fama_french.py,sha256=aUTC-67t_CEPbLk4u79woW_zfZ7OCP6Fo4z5EdWCSkQ,48051
|
38
38
|
siat/fama_french_test.py,sha256=M4O23lBKsJxhWHRluwCb3l7HSEn3OFTjzGMpehcevRg,4678
|
39
|
+
siat/fin_stmt2_yahoo.py,sha256=q4oNv-Wc30Kyuq_lRB0ZMINd33pusxQ3H2BecoFATqo,34297
|
39
40
|
siat/financial_base.py,sha256=5u298_1OSlgLnDmhXxqvo4WgMM0JKSa_4jBYF-Ilx38,41097
|
40
41
|
siat/financial_statements.py,sha256=xx0SMpFqAMKm6cj8uYeG2RpJE6G-RoJ3NWa33UyaVMk,25414
|
41
42
|
siat/financial_statements_test.py,sha256=FLhx8JD-tVVWSBGux6AMz1jioXX4U4bp9DmgFHYXb_w,716
|
@@ -70,7 +71,7 @@ siat/luchy_draw.py,sha256=8Ue-NKnvSVqINPY1eXat0NJat5MR-gex_K62aOYFdmA,20486
|
|
70
71
|
siat/market_china.py,sha256=fQjAFyu4JAqtVA8I1QYfzv0fmYhLP3zoNe5Ftk63qgM,50724
|
71
72
|
siat/markowitz.py,sha256=DsfS6vG9TAfdJP4GgN-CCArujPi84XjD23CWbxaA2o4,97627
|
72
73
|
siat/markowitz2-20240620.py,sha256=irZAPnjaatFsKQmFRMENP-cO6bEUl2narYtkU5NKTWI,108019
|
73
|
-
siat/markowitz2.py,sha256=
|
74
|
+
siat/markowitz2.py,sha256=s7-E43VskzSsPpZXQVBe3VTR1AM81EDIn_uVZn3mLpw,122525
|
74
75
|
siat/markowitz_ccb_test.py,sha256=xBkkoaNHdq9KSUrNuHGgKTdNYUvgi84kNYcf719eoyE,1593
|
75
76
|
siat/markowitz_ef_test.py,sha256=wjNlICkgRIqnonPeSIHo4Mu2GRtb9dr21wDt2kMNEcI,4032
|
76
77
|
siat/markowitz_old.py,sha256=Lf7O_4QWT8RsdkHiUyc_7kKY3eZjKDtFR89Fz3pwYnY,33046
|
@@ -99,14 +100,14 @@ siat/sector_china.py,sha256=Mxx5Zd5qvhLdwutedwoPRoXlAopTsPww4rRhOgpRmb8,150762
|
|
99
100
|
siat/sector_china_test.py,sha256=1wq7ef8Bb_L8F0h0W6FvyBrIcBTEbrTV7hljtpj49U4,5843
|
100
101
|
siat/security_price.py,sha256=2oHskgiw41KMGfqtnA0i2YjNNV6cYgtlUK0j3YeuXWs,29185
|
101
102
|
siat/security_price2.py,sha256=FkX-EeqS5Gqm2kIKnDqrqSk_nvG3BbL3Eu4eEmw1OEY,26379
|
102
|
-
siat/security_prices.py,sha256=
|
103
|
+
siat/security_prices.py,sha256=i_4ZA7sRb9gMRVOgTT-XxQ1Jrz9eHDjZznsoXPDhh0Y,108859
|
103
104
|
siat/security_prices_test.py,sha256=OEphoJ87NPKoNow1QA8EU_5MUYrJF-qKoWKNapVfZNI,10779
|
104
105
|
siat/security_trend.py,sha256=o0vpWdrJkmODCP94X-Bvn-w7efHhj9HpUYBHtLl55D0,17240
|
105
106
|
siat/security_trend2-20240620.py,sha256=QVnEcb7AyVbO77jVqfFsJffGXrX8pgJ9xCfoAKmWBPk,24854
|
106
107
|
siat/security_trend2.py,sha256=mamJtFAbXC1orGgMEmp0taPk-yUqWm-jdGf64bjhn2Q,29756
|
107
108
|
siat/setup.py,sha256=up65rQGLmTBkhtaMLowjoQXYmIsnycnm4g1SYmeQS6o,1335
|
108
109
|
siat/shenwan index history test.py,sha256=JCVAzOSEldHalhSFa3pqD8JI_8_djPMQOxpkuYU-Esg,1418
|
109
|
-
siat/stock.py,sha256=
|
110
|
+
siat/stock.py,sha256=AO_ntNoinjXpzzs4eA1iMlsqGFoN1KvgHV6Z_ECVy-M,158658
|
110
111
|
siat/stock_advice_linear.py,sha256=-twT7IGP-NEplkL1WPSACcNJjggRB2j4mlAQCkzOAuo,31655
|
111
112
|
siat/stock_base.py,sha256=uISvbRyOGy8p9QREA96CVydgflBkn5L3OXOGKl8oanc,1312
|
112
113
|
siat/stock_china.py,sha256=vm_BslG0gJm4R0-O5bNtENkMMfDP-u1TYKCKzLH9Nkk,93460
|
@@ -136,13 +137,13 @@ siat/translate.py,sha256=aAWk9museEsdxDstXjEy_SXiEzvKD_6fDi0W4TrBiwI,241364
|
|
136
137
|
siat/translate_20240606.py,sha256=63IyHWEU3Uz9mjwyuAX3fqY4nUMdwh0ICQAgmgPXP7Y,215121
|
137
138
|
siat/translate_241003_keep.py,sha256=un7Fqe1v35MXsja5exZgjmLzrZtt66NARZIGlyFuGGU,218747
|
138
139
|
siat/universal_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
|
139
|
-
siat/valuation.py,sha256=
|
140
|
+
siat/valuation.py,sha256=DF-THR8AOPFtbMG58g9coqrfnzeBIhX3PW7ZhU6WbEo,50821
|
140
141
|
siat/valuation_china.py,sha256=CVp1IwIsF3Om0J29RGkyxZLt4n9Ug-ua_RKhLwL9fUQ,69624
|
141
142
|
siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
|
142
143
|
siat/var_model_validation.py,sha256=R0caWnuZarrRg9939hxh3vJIIpIyPfvelYmzFNZtPbo,14910
|
143
144
|
siat/yf_name.py,sha256=r0Q67cSMMlfebEkI9h9pdGlJCooEq7hw_3M5IUs4cSI,20081
|
144
|
-
siat-3.7.
|
145
|
-
siat-3.7.
|
146
|
-
siat-3.7.
|
147
|
-
siat-3.7.
|
148
|
-
siat-3.7.
|
145
|
+
siat-3.7.8.dist-info/LICENSE,sha256=NTEMMROY9_4U1szoKC3N2BLHcDd_o5uTgqdVH8tbApw,1071
|
146
|
+
siat-3.7.8.dist-info/METADATA,sha256=eDkDeMALXeeUIhn3YcgdI7vzLy2P4qCAR8ErzLuv5p4,8009
|
147
|
+
siat-3.7.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
148
|
+
siat-3.7.8.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
|
149
|
+
siat-3.7.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|