bbp代码python_Python pandas 模块,rolling_std() 实例源码 - 编程字典

def generate_features(df):

""" Generate features for a stock/index based on historical price and performance

Args:

df (dataframe with columns "Open", "Close", "High", "Low", "Volume", "Adjusted Close")

Returns:

dataframe, data set with new features

"""

df_new = pd.DataFrame()

# 6 original features

df_new['open'] = df['Open']

df_new['open_1'] = df['Open'].shift(1)

df_new['close_1'] = df['Close'].shift(1)

df_new['high_1'] = df['High'].shift(1)

df_new['low_1'] = df['Low'].shift(1)

df_new['volume_1'] = df['Volume'].shift(1)

# 31 original features

# average price

df_new['avg_price_5'] = pd.rolling_mean(df['Close'], window=5).shift(1)

df_new['avg_price_30'] = pd.rolling_mean(df['Close'], window=21).shift(1)

df_new['avg_price_365'] = pd.rolling_mean(df['Close'], window=252).shift(1)

df_new['ratio_avg_price_5_30'] = df_new['avg_price_5'] / df_new['avg_price_30']

df_new['ratio_avg_price_5_365'] = df_new['avg_price_5'] / df_new['avg_price_365']

df_new['ratio_avg_price_30_365'] = df_new['avg_price_30'] / df_new['avg_price_365']

# average volume

df_new['avg_volume_5'] = pd.rolling_mean(df['Volume'], window=5).shift(1)

df_new['avg_volume_30'] = pd.rolling_mean(df['Volume'], window=21).shift(1)

df_new['avg_volume_365'] = pd.rolling_mean(df['Volume'], window=252).shift(1)

df_new['ratio_avg_volume_5_30'] = df_new['avg_volume_5'] / df_new['avg_volume_30']

df_new['ratio_avg_volume_5_365'] = df_new['avg_volume_5'] / df_new['avg_volume_365']

df_new['ratio_avg_volume_30_365'] = df_new['avg_volume_30'] / df_new['avg_volume_365']

# standard deviation of prices

df_new['std_price_5'] = pd.rolling_std(df['Close'], window=5).shift(1)

df_new['std_price_30'] = pd.rolling_std(df['Close'], window=21).shift(1)

df_new['std_price_365'] = pd.rolling_std(df['Close'], window=252).shift(1)

df_new['ratio_std_price_5_30'] = df_new['std_price_5'] / df_new['std_price_30']

df_new['ratio_std_price_5_365'] = df_new['std_price_5'] / df_new['std_price_365']

df_new['ratio_std_price_30_365'] = df_new['std_price_30'] / df_new['std_price_365']

# standard deviation of volumes

df_new['std_volume_5'] = pd.rolling_std(df['Volume'], window=5).shift(1)

df_new['std_volume_30'] = pd.rolling_std(df['Volume'], window=21).shift(1)

df_new['std_volume_365'] = pd.rolling_std(df['Volume'], window=252).shift(1)

df_new['ratio_std_volume_5_30'] = df_new['std_volume_5'] / df_new['std_volume_30']

df_new['ratio_std_volume_5_365'] = df_new['std_volume_5'] / df_new['std_volume_365']

df_new['ratio_std_volume_30_365'] = df_new['std_volume_30'] / df_new['std_volume_365']

# # return

df_new['return_1'] = ((df['Close'] - df['Close'].shift(1)) / df['Close'].shift(1)).shift(1)

df_new['return_5'] = ((df['Close'] - df['Close'].shift(5)) / df['Close'].shift(5)).shift(1)

df_new['return_30'] = ((df['Close'] - df['Close'].shift(21)) / df['Close'].shift(21)).shift(1)

df_new['return_365'] = ((df['Close'] - df['Close'].shift(252)) / df['Close'].shift(252)).shift(1)

df_new['moving_avg_5'] = pd.rolling_mean(df_new['return_1'], window=5)

df_new['moving_avg_30'] = pd.rolling_mean(df_new['return_1'], window=21)

df_new['moving_avg_365'] = pd.rolling_mean(df_new['return_1'], window=252)

# the target

df_new['close'] = df['Close']

df_new = df_new.dropna(axis=0)

return df_new

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值