import pandas as pd import numpy as np import os import datetime import statsmodels.api as sm import scipy as sp import math import chardet def TS_SUM(series, number): number = int(number) n = range(0, number-1) shift=series for k in n: shift=shift.shift(1) series=series+shift return series def ExpoDecay(array,halflife,number,): halflife=int(halflife) d=math.pow(0.5,1/halflife) DecayWGT=np.logspace(0,number-1,number,base=d) return sum(array*DecayWGT)/sum(DecayWGT) def TS_AVERAGE(series, number): number = int(number) l = len(series) shift = pd.Series(series) for k in range(0, number-1): shift = shift.shift(1) series = series + shift series = series / number return series def TS_wgdStd(series, number, halflife): halflife = int(halflife) d = math.pow(0.5, 1 / halflife) DecayWGT = np.logspace(0, number - 1, number, base=d) avg = TS_AVERAGE(series, number) square = (series - avg) * (series - avg) print('正在计算DASTD') l=len(series) loop=range(0,l) loop=pd.Series(loop) result=[1]*l for k in loop: if k<number-1: result[k]=np.nan else: sub_square=square.iloc[k-number+1:k+1] result[k]=math.sqrt(np.average(sub_square,weights=DecayWGT)) return result #计算波动因子(DASTD) def DASTD(data): data=pd.DataFrame(data) data['DASTD']=data.groupby('code')['ret_td'].transform(lambda x: TS_wgdStd(x,250,halflife=40)) print(data['DASTD']) print('done') DASTD=data['DASTD'] return DASTD total=pd.read_csv(r"C:\Users\lenovo\Desktop\实习\python\所有数据.csv") pingan=total[total['code']=='000001.SZ'] pingan['DASTD']=TS_wgdStd(pingan['ret_td'],250,halflife=40) print(pingan)
时间: 2024-04-18 21:29:04 浏览: 171
你的代码中使用了一些自定义的函数来计算一些统计指标。在代码中,你定义了以下函数:
1. `TS_SUM(series, number)`: 用于计算时间序列的累加和,其中`series`表示时间序列数据,`number`表示累加的个数。
2. `ExpoDecay(array, halflife, number)`: 用于计算指数衰减加权均值,其中`array`表示输入的数组,`halflife`表示衰减半衰期,`number`表示计算的个数。
3. `TS_AVERAGE(series, number)`: 用于计算时间序列的移动平均值,其中`series`表示时间序列数据,`number`表示移动平均的窗口大小。
4. `TS_wgdStd(series, number, halflife)`: 用于计算时间序列的加权标准差,其中`series`表示时间序列数据,`number`表示计算加权标准差的窗口大小,`halflife`表示衰减半衰期。
5. `DASTD(data)`: 用于计算波动因子DASTD,其中`data`是一个DataFrame,包含了股票代码和收益率数据。
在代码中,你首先读取了一个CSV文件,并选取了股票代码为"000001.SZ"的数据进行处理。然后,你使用`TS_wgdStd`函数计算了该股票的DASTD值,并将其添加到了DataFrame中。
请注意,在使用`TS_wgdStd`函数计算DASTD时,你传入了一个Series作为参数,但该函数内部又调用了`TS_AVERAGE`函数来计算移动平均值。这样可能会导致在计算过程中出现警告或错误,请确保输入的数据和参数都符合函数的要求。
如果还有其他问题,请随时提问。
阅读全文