siat 3.1.28__py3-none-any.whl → 3.2.2__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/capm_beta2.py +41 -19
- siat/fund_china.py +3 -3
- siat/risk_adjusted_return2.py +45 -6
- siat/security_price2.py +1 -1
- siat/security_prices.py +38 -17
- siat/security_trend2-20240620.py +493 -0
- siat/security_trend2.py +17 -11
- siat/stock.py +76 -22
- siat/stock_technical-20240620.py +2736 -0
- siat/stock_technical.py +219 -50
- {siat-3.1.28.dist-info → siat-3.2.2.dist-info}/METADATA +1 -1
- {siat-3.1.28.dist-info → siat-3.2.2.dist-info}/RECORD +14 -12
- {siat-3.1.28.dist-info → siat-3.2.2.dist-info}/WHEEL +0 -0
- {siat-3.1.28.dist-info → siat-3.2.2.dist-info}/top_level.txt +0 -0
siat/capm_beta2.py
CHANGED
@@ -85,7 +85,9 @@ if __name__=='__main__':
|
|
85
85
|
|
86
86
|
reg_result,dretdf3=regression_capm(ticker,start2,end,RF,regtrddays)
|
87
87
|
|
88
|
-
def regression_capm(ticker,start2,end,
|
88
|
+
def regression_capm(ticker,start2,end, \
|
89
|
+
adjust='', \
|
90
|
+
RF=0,regtrddays=252, \
|
89
91
|
mktidx='auto',source='auto',ticker_type='auto'):
|
90
92
|
"""
|
91
93
|
功能:进行CAPM回归,R-Rf=beta*(Rm-Rf),无截距项回归
|
@@ -100,8 +102,9 @@ def regression_capm(ticker,start2,end,RF=0,regtrddays=252, \
|
|
100
102
|
print("*** DEBUG:",ticker,start2,end)
|
101
103
|
#pricedf=get_price(ticker,start2,end,source=source)
|
102
104
|
#pricedf=get_price_security(ticker,start2,end,source=source)
|
103
|
-
pricedf,found=get_price_1ticker_mixed(ticker=ticker,fromdate=start2, \
|
104
|
-
|
105
|
+
pricedf,found=get_price_1ticker_mixed(ticker=ticker,fromdate=start2,todate=end, \
|
106
|
+
adjust=adjust, \
|
107
|
+
source=source,ticker_type=ticker_type)
|
105
108
|
|
106
109
|
if pricedf is None:
|
107
110
|
print(" #Error(regression_capm): info of security",ticker_name(ticker,ticker_type),"not found or inaccessible")
|
@@ -124,8 +127,10 @@ def regression_capm(ticker,start2,end,RF=0,regtrddays=252, \
|
|
124
127
|
mktidx=get_market_index_code(ticker)
|
125
128
|
|
126
129
|
#marketdf=get_price(mktidx,start2,end,source=source)
|
127
|
-
|
128
|
-
|
130
|
+
#大盘指数实际上无复权价?
|
131
|
+
marketdf,found=get_price_1ticker_mixed(ticker=mktidx,fromdate=start2,todate=end, \
|
132
|
+
adjust=adjust, \
|
133
|
+
source=source,ticker_type=ticker_type)
|
129
134
|
|
130
135
|
if marketdf is None:
|
131
136
|
print(" #Error(regression_capm): info of market index",mktidx,"not found or inaccessible")
|
@@ -137,7 +142,11 @@ def regression_capm(ticker,start2,end,RF=0,regtrddays=252, \
|
|
137
142
|
dretdf1=pd.merge(marketdf1,pricedf1,how='inner',left_index=True,right_index=True)
|
138
143
|
|
139
144
|
#准备CAPM回归文件
|
140
|
-
|
145
|
+
if adjust == '':
|
146
|
+
dretname='Daily Ret'
|
147
|
+
else:
|
148
|
+
dretname='Daily Adj Ret'
|
149
|
+
|
141
150
|
#计算日无风险利率
|
142
151
|
RF_daily=RF / 365
|
143
152
|
|
@@ -207,7 +216,7 @@ if __name__=='__main__':
|
|
207
216
|
beta1=get_capm_beta(ticker,start,end,RF,regtrddays)
|
208
217
|
beta1.plot()
|
209
218
|
|
210
|
-
def get_capm_beta(ticker,start,end,RF=0,regtrddays=252,mktidx='auto', \
|
219
|
+
def get_capm_beta(ticker,start,end,adjust='',RF=0,regtrddays=252,mktidx='auto', \
|
211
220
|
source='auto',ticker_type='auto'):
|
212
221
|
"""
|
213
222
|
功能:套壳函数regression_capm,仅返回滚动的贝塔系数,基于日收益率
|
@@ -217,6 +226,7 @@ def get_capm_beta(ticker,start,end,RF=0,regtrddays=252,mktidx='auto', \
|
|
217
226
|
start2=date_adjust(start,adjust=-365/252 * regtrddays -31*2)
|
218
227
|
|
219
228
|
reg_result,_=regression_capm(ticker=ticker,start2=start2,end=end, \
|
229
|
+
adjust=adjust, \
|
220
230
|
RF=RF, \
|
221
231
|
regtrddays=regtrddays,mktidx=mktidx, \
|
222
232
|
source=source,ticker_type=ticker_type)
|
@@ -248,6 +258,7 @@ if __name__=='__main__':
|
|
248
258
|
betas=compare_mticker_1beta(ticker,start,end)
|
249
259
|
|
250
260
|
def compare_mticker_1beta(ticker,start,end, \
|
261
|
+
adjust='', \
|
251
262
|
RF=0,regression_period=365, \
|
252
263
|
graph=True,axhline_value=1,axhline_label='',facecolor='whitesmoke', \
|
253
264
|
annotate=False,annotate_value=False, \
|
@@ -289,7 +300,7 @@ def compare_mticker_1beta(ticker,start,end, \
|
|
289
300
|
|
290
301
|
#关闭print输出
|
291
302
|
with HiddenPrints():
|
292
|
-
df_tmp=get_capm_beta(t,start,end,RF,regtrddays,mktidx,source,ticker_type=tt)
|
303
|
+
df_tmp=get_capm_beta(t,start,end,adjust,RF,regtrddays,mktidx,source,ticker_type=tt)
|
293
304
|
|
294
305
|
if df_tmp is None:
|
295
306
|
break
|
@@ -366,6 +377,7 @@ if __name__=='__main__':
|
|
366
377
|
betas=compare_1ticker_mRF(ticker,start,end,RF)
|
367
378
|
|
368
379
|
def compare_1ticker_mRF(ticker,start,end, \
|
380
|
+
adjust='', \
|
369
381
|
RF=[0,0.02,0.05], \
|
370
382
|
regression_period=365, \
|
371
383
|
graph=True,axhline_value=1,axhline_label='',facecolor='whitesmoke', \
|
@@ -406,7 +418,7 @@ def compare_1ticker_mRF(ticker,start,end, \
|
|
406
418
|
for t in RF:
|
407
419
|
#关闭print输出
|
408
420
|
with HiddenPrints():
|
409
|
-
df_tmp=get_capm_beta(ticker,start,end,t,regtrddays,mktidx,source,ticker_type=ticker_type)
|
421
|
+
df_tmp=get_capm_beta(ticker,start,end,adjust,t,regtrddays,mktidx,source,ticker_type=ticker_type)
|
410
422
|
|
411
423
|
if df_tmp is None:
|
412
424
|
break
|
@@ -484,6 +496,7 @@ if __name__=='__main__':
|
|
484
496
|
betas=compare_1ticker_mregression_period(ticker,start,end,RF,regression_period)
|
485
497
|
|
486
498
|
def compare_1ticker_mregression_period(ticker,start,end, \
|
499
|
+
adjust='', \
|
487
500
|
RF=0, \
|
488
501
|
regression_period=[183,365,730], \
|
489
502
|
graph=True,axhline_value=1,axhline_label='',facecolor='whitesmoke', \
|
@@ -524,7 +537,7 @@ def compare_1ticker_mregression_period(ticker,start,end, \
|
|
524
537
|
|
525
538
|
#关闭print输出
|
526
539
|
with HiddenPrints():
|
527
|
-
df_tmp=get_capm_beta(ticker,start,end,RF,regtrddays,mktidx,source,ticker_type=ticker_type)
|
540
|
+
df_tmp=get_capm_beta(ticker,start,end,adjust,RF,regtrddays,mktidx,source,ticker_type=ticker_type)
|
528
541
|
|
529
542
|
if df_tmp is None:
|
530
543
|
break
|
@@ -601,7 +614,9 @@ if __name__=='__main__':
|
|
601
614
|
|
602
615
|
betas=compare_beta_security(ticker,start,end,RF)
|
603
616
|
|
604
|
-
def compare_beta_security(ticker,start,end,
|
617
|
+
def compare_beta_security(ticker,start,end, \
|
618
|
+
adjust='', \
|
619
|
+
RF=0,regression_period=365, \
|
605
620
|
graph=True,facecolor='whitesmoke', \
|
606
621
|
annotate=False,annotate_value=False, \
|
607
622
|
mark_top=False,mark_bottom=False,mark_end=False, \
|
@@ -618,8 +633,10 @@ def compare_beta_security(ticker,start,end,RF=0,regression_period=365, \
|
|
618
633
|
if isinstance(RF,list):
|
619
634
|
RF=RF[0]
|
620
635
|
|
621
|
-
df=compare_mticker_1beta(ticker,start,end,
|
622
|
-
|
636
|
+
df=compare_mticker_1beta(ticker,start,end, \
|
637
|
+
adjust=adjust, \
|
638
|
+
RF=RF,regression_period=regression_period, \
|
639
|
+
graph=graph,facecolor=facecolor, \
|
623
640
|
annotate=annotate,annotate_value=annotate, \
|
624
641
|
mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
|
625
642
|
mktidx=mktidx,source=source, \
|
@@ -632,8 +649,10 @@ def compare_beta_security(ticker,start,end,RF=0,regression_period=365, \
|
|
632
649
|
#情形2:1只证券,多个RF。时间区间要尽可能短,不然难以看出差异!
|
633
650
|
if isinstance(RF,list):
|
634
651
|
if len(RF) > 1:
|
635
|
-
df=compare_1ticker_mRF(ticker,start,end,
|
636
|
-
|
652
|
+
df=compare_1ticker_mRF(ticker,start,end, \
|
653
|
+
adjust=adjust, \
|
654
|
+
RF=RF,regression_period=regression_period, \
|
655
|
+
graph=graph,facecolor=facecolor, \
|
637
656
|
annotate=annotate,annotate_value=annotate, \
|
638
657
|
mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
|
639
658
|
mktidx=mktidx,source=source, \
|
@@ -647,8 +666,9 @@ def compare_beta_security(ticker,start,end,RF=0,regression_period=365, \
|
|
647
666
|
if isinstance(regression_period,list):
|
648
667
|
if len(regression_period) > 1:
|
649
668
|
df=compare_1ticker_mregression_period(ticker,start,end, \
|
650
|
-
|
651
|
-
|
669
|
+
adjust=adjust, \
|
670
|
+
RF=RF,regression_period=regression_period, \
|
671
|
+
graph=graph,facecolor=facecolor, \
|
652
672
|
annotate=annotate,annotate_value=annotate, \
|
653
673
|
mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
|
654
674
|
mktidx=mktidx,source=source, \
|
@@ -659,8 +679,10 @@ def compare_beta_security(ticker,start,end,RF=0,regression_period=365, \
|
|
659
679
|
regression_period=regression_period[0]
|
660
680
|
|
661
681
|
#情形4:1只证券,1个RF,1个回归天数?
|
662
|
-
df=compare_mticker_1beta(ticker,start,end,
|
663
|
-
|
682
|
+
df=compare_mticker_1beta(ticker,start,end, \
|
683
|
+
adjust=adjust, \
|
684
|
+
RF=RF,regression_period=regression_period, \
|
685
|
+
graph=graph,facecolor=facecolor, \
|
664
686
|
annotate=annotate,annotate_value=annotate, \
|
665
687
|
mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
|
666
688
|
mktidx=mktidx,source=source, \
|
siat/fund_china.py
CHANGED
@@ -2375,14 +2375,14 @@ def compare_metf_china(fund_list,start,end,ftype='单位净值',graph=True):
|
|
2375
2375
|
|
2376
2376
|
#绘图
|
2377
2377
|
y_label=ftype
|
2378
|
-
import datetime;
|
2378
|
+
import datetime; todaydt = datetime.date.today()
|
2379
2379
|
|
2380
2380
|
lang=check_language()
|
2381
2381
|
if lang == 'English':
|
2382
|
-
x_label="Source: eastmoney/tiantian funds, "+str(
|
2382
|
+
x_label="Source: eastmoney/tiantian funds, "+str(todaydt)
|
2383
2383
|
title_txt="Compare Multiple ETF Fund Performance"
|
2384
2384
|
else:
|
2385
|
-
x_label="数据来源: 东方财富/天天基金,"+str(
|
2385
|
+
x_label="数据来源: 东方财富/天天基金,"+str(todaydt)
|
2386
2386
|
title_txt="比较多只ETF基金的净值指标"
|
2387
2387
|
|
2388
2388
|
draw_lines(fdf,y_label,x_label,axhline_value=0,axhline_label='',title_txt=title_txt, \
|
siat/risk_adjusted_return2.py
CHANGED
@@ -81,11 +81,18 @@ def get_rolling_sharpe_sortino(ticker,start,end,rar_name="sharpe", \
|
|
81
81
|
|
82
82
|
start1=date_adjust(start,adjust=-dateahead)
|
83
83
|
|
84
|
+
#判断复权价
|
85
|
+
if ('adj' in ret_type_lower):
|
86
|
+
adjust='qfq'
|
87
|
+
else:
|
88
|
+
adjust=''
|
89
|
+
|
84
90
|
#抓取股价
|
85
91
|
#pricedf=get_price(ticker,start1,end,source=source)
|
86
92
|
#pricedf=get_price_security(ticker,start1,end,source=source)
|
87
|
-
pricedf,found=get_price_1ticker_mixed(ticker=ticker,fromdate=start1, \
|
88
|
-
|
93
|
+
pricedf,found=get_price_1ticker_mixed(ticker=ticker,fromdate=start1,todate=end, \
|
94
|
+
adjust=adjust, \
|
95
|
+
source=source,ticker_type=ticker_type)
|
89
96
|
|
90
97
|
if found !='Found':
|
91
98
|
print(" #Error(get_rolling_sharpe_sortino): no records found for",ticker)
|
@@ -115,6 +122,12 @@ def get_rolling_sharpe_sortino(ticker,start,end,rar_name="sharpe", \
|
|
115
122
|
#开始日期富余一段时间,有助于绘图时显示出期望的开始日期
|
116
123
|
startpd=pd.to_datetime(date_adjust(start,adjust=-7))
|
117
124
|
endpd=pd.to_datetime(end)
|
125
|
+
|
126
|
+
rardf4['index_tmp']=rardf4.index
|
127
|
+
rardf4['index_tmp']=rardf4['index_tmp'].apply(lambda x: pd.to_datetime(x))
|
128
|
+
rardf4.set_index(['index_tmp'],inplace=True)
|
129
|
+
#rardf4.drop(['index_tmp'],inplace=True)
|
130
|
+
|
118
131
|
rardf5=rardf4[(rardf4.index >=startpd) & (rardf4.index <=endpd)]
|
119
132
|
|
120
133
|
#确定风险字段名
|
@@ -169,11 +182,19 @@ def get_expanding_sharpe_sortino(ticker,start,end,rar_name="sharpe", \
|
|
169
182
|
dateahead=7
|
170
183
|
start1=date_adjust(start,adjust=-dateahead)
|
171
184
|
|
185
|
+
#判断复权价
|
186
|
+
ret_type=ret_type.title()
|
187
|
+
if ('Adj' in ret_type):
|
188
|
+
adjust='qfq'
|
189
|
+
else:
|
190
|
+
adjust=''
|
191
|
+
|
172
192
|
#抓取股价
|
173
193
|
#pricedf=get_price(ticker,start1,end,source=source)
|
174
194
|
#pricedf=get_price_security(ticker,start1,end,source=source)
|
175
|
-
pricedf,found=get_price_1ticker_mixed(ticker=ticker,fromdate=start1, \
|
176
|
-
|
195
|
+
pricedf,found=get_price_1ticker_mixed(ticker=ticker,fromdate=start1,todate=end, \
|
196
|
+
adjust=adjust, \
|
197
|
+
source=source,ticker_type=ticker_type)
|
177
198
|
|
178
199
|
#计算收益率和收益率标准差
|
179
200
|
rardf2=calc_expanding_return(pricedf,start)
|
@@ -285,8 +306,17 @@ def get_rolling_treynor_alpha(ticker,start,end,rar_name="alpha", \
|
|
285
306
|
#计算CAPM需要的日期提前量
|
286
307
|
start2=date_adjust(start1,adjust=-regression_period-7*2)
|
287
308
|
|
309
|
+
#判断复权价
|
310
|
+
ret_type=ret_type.title()
|
311
|
+
if ('Adj' in ret_type):
|
312
|
+
adjust='qfq'
|
313
|
+
else:
|
314
|
+
adjust=''
|
315
|
+
|
288
316
|
#CAPM回归,计算贝塔系数
|
289
|
-
reg_result,dretdf3=regression_capm(ticker,start2,end,
|
317
|
+
reg_result,dretdf3=regression_capm(ticker,start2,end, \
|
318
|
+
adjust=adjust, \
|
319
|
+
RF=RF, \
|
290
320
|
regtrddays=regtrddays,mktidx=mktidx, \
|
291
321
|
source=source,ticker_type=ticker_type)
|
292
322
|
|
@@ -371,8 +401,17 @@ def get_expanding_treynor_alpha(ticker,start,end,rar_name="alpha", \
|
|
371
401
|
#计算CAPM需要的日期提前量
|
372
402
|
start2=date_adjust(start1,adjust=-regression_period-7*2)
|
373
403
|
|
404
|
+
#判断复权价
|
405
|
+
ret_type=ret_type.title()
|
406
|
+
if ('Adj' in ret_type):
|
407
|
+
adjust='qfq'
|
408
|
+
else:
|
409
|
+
adjust=''
|
410
|
+
|
374
411
|
#CAPM回归,计算贝塔系数
|
375
|
-
reg_result,dretdf3=regression_capm(ticker,start2,end,
|
412
|
+
reg_result,dretdf3=regression_capm(ticker,start2,end, \
|
413
|
+
adjust=adjust, \
|
414
|
+
RF=RF, \
|
376
415
|
regtrddays=regtrddays,mktidx=mktidx, \
|
377
416
|
source=source,ticker_type=ticker_type)
|
378
417
|
|
siat/security_price2.py
CHANGED
siat/security_prices.py
CHANGED
@@ -766,7 +766,11 @@ def get_price_ak_cn(ticker,fromdate,todate,adjust='',ticker_type='auto'):
|
|
766
766
|
if ticker_type in ['auto','stock'] and suffix not in ['SW']:
|
767
767
|
try:
|
768
768
|
#仅用于股票的历史行情数据(考虑复权)
|
769
|
-
|
769
|
+
dffqno=ak.stock_zh_a_daily(ticker2,start1,end1,adjust='')
|
770
|
+
dffq=ak.stock_zh_a_daily(ticker2,start1,end1,adjust=adjust)
|
771
|
+
dffq.rename(columns={'close':'Adj Close'},inplace=True)
|
772
|
+
|
773
|
+
df=pd.merge(dffqno,dffq[['date','Adj Close']],on=['date'])
|
770
774
|
df['Date']=df['date']
|
771
775
|
except:
|
772
776
|
df=None
|
@@ -901,7 +905,6 @@ def get_price_ak_cn(ticker,fromdate,todate,adjust='',ticker_type='auto'):
|
|
901
905
|
#设置新的索引
|
902
906
|
df.set_index(['Date'],inplace=True)
|
903
907
|
df.rename(columns={'open':'Open','high':'High','low':'Low','close':'Close','volume':'Volume'},inplace=True)
|
904
|
-
df['Adj Close']=df['Close']
|
905
908
|
|
906
909
|
try:
|
907
910
|
df1=df[df.index >= start]
|
@@ -956,7 +959,15 @@ def get_price_ak_us(symbol, fromdate, todate, adjust=""):
|
|
956
959
|
import akshare as ak
|
957
960
|
#print(" Searching info in Sina for",symbol,"... ...")
|
958
961
|
try:
|
959
|
-
|
962
|
+
if adjust=='':
|
963
|
+
df=ak.stock_us_daily(symbol=symbol,adjust=adjust)
|
964
|
+
else:
|
965
|
+
dffqno=ak.stock_us_daily(symbol=symbol,adjust='')
|
966
|
+
dffq=ak.stock_us_daily(symbol=symbol,adjust='qfq')
|
967
|
+
dffq.rename(columns={'close':'Adj Close'},inplace=True)
|
968
|
+
|
969
|
+
df=pd.merge(dffqno,dffq[['date','Adj Close']],on=['date'])
|
970
|
+
|
960
971
|
except:
|
961
972
|
#print(" #Error(get_price_ak_us): no info found for",symbol)
|
962
973
|
return None
|
@@ -982,7 +993,8 @@ def get_price_ak_us(symbol, fromdate, todate, adjust=""):
|
|
982
993
|
|
983
994
|
df2.rename(columns={'open':'Open','high':'High','low':'Low','close':'Close','volume':'Volume'},inplace=True)
|
984
995
|
df2['ticker']=symbol
|
985
|
-
|
996
|
+
if 'Adj Close' not in list(df2):
|
997
|
+
df2['Adj Close']=df2['Close']
|
986
998
|
df2['source']='新浪'
|
987
999
|
df2['footnote']=adjust
|
988
1000
|
|
@@ -1000,14 +1012,21 @@ if __name__=='__main__':
|
|
1000
1012
|
if __name__=='__main__':
|
1001
1013
|
symbol='0700.HK'
|
1002
1014
|
symbol='0700.hk'
|
1015
|
+
|
1003
1016
|
symbol='00700.HK'
|
1004
|
-
fromdate='
|
1005
|
-
todate='
|
1017
|
+
fromdate='2014-5-1'
|
1018
|
+
todate ='2014-5-31'
|
1019
|
+
adjust="qfq"
|
1020
|
+
|
1021
|
+
tx=get_price_ak_hk(symbol='00700.HK',fromdate='2014-5-1',todate='2014-5-30',adjust="qfq")
|
1006
1022
|
|
1007
|
-
def get_price_ak_hk(symbol,
|
1023
|
+
def get_price_ak_hk(symbol,fromdate,todate,adjust=""):
|
1008
1024
|
"""
|
1009
1025
|
抓取单个港股股价,不能处理股指,股指无.HK后缀
|
1010
1026
|
"""
|
1027
|
+
DEBUG=False
|
1028
|
+
if DEBUG:
|
1029
|
+
print("Start searching HK stock prices for",symbol,"...")
|
1011
1030
|
|
1012
1031
|
#检查日期期间
|
1013
1032
|
result,start,end=check_period(fromdate,todate)
|
@@ -1027,19 +1046,20 @@ def get_price_ak_hk(symbol, fromdate, todate, adjust=""):
|
|
1027
1046
|
symbol3=symbol2
|
1028
1047
|
|
1029
1048
|
try:
|
1030
|
-
|
1049
|
+
if adjust == '':
|
1050
|
+
df=ak.stock_hk_daily(symbol=symbol3, adjust=adjust)
|
1051
|
+
else:
|
1052
|
+
dffqno=ak.stock_hk_daily(symbol=symbol3, adjust='')
|
1053
|
+
dffq =ak.stock_hk_daily(symbol=symbol3,adjust='qfq')
|
1054
|
+
dffq.rename(columns={'close':'Adj Close'},inplace=True)
|
1055
|
+
|
1056
|
+
df=pd.merge(dffqno,dffq[['date','Adj Close']],on=['date'])
|
1031
1057
|
except:
|
1032
1058
|
print(" #Error(get_price_ak_hk): no info found for",symbol)
|
1033
1059
|
return None
|
1034
1060
|
|
1035
|
-
|
1036
|
-
|
1037
|
-
import datetime as dt
|
1038
|
-
try:
|
1039
|
-
df['Date']=df['Date'].dt.tz_localize(None)
|
1040
|
-
except:
|
1041
|
-
import pandas as pd
|
1042
|
-
df['Date']=pd.to_datetime(df['date'])
|
1061
|
+
#去掉可能出现的时区信息
|
1062
|
+
df['Date']=pd.to_datetime(df['date'])
|
1043
1063
|
#设置新的索引
|
1044
1064
|
df.set_index(['Date'],inplace=True)
|
1045
1065
|
|
@@ -1056,7 +1076,8 @@ def get_price_ak_hk(symbol, fromdate, todate, adjust=""):
|
|
1056
1076
|
|
1057
1077
|
df2.rename(columns={'open':'Open','high':'High','low':'Low','close':'Close','volume':'Volume'},inplace=True)
|
1058
1078
|
df2['ticker']=symbol
|
1059
|
-
|
1079
|
+
if 'Adj Close' not in list(df2):
|
1080
|
+
df2['Adj Close']=df2['Close']
|
1060
1081
|
df2['source']='新浪'
|
1061
1082
|
|
1062
1083
|
ptname=ticker_name(symbol,'stock')
|