以下是根据A股市场股票进行JT动量策略排序,并构建股票每月的动量十分位投资组合的Python代码:

import pandas as pd
import numpy as np

# 读取A股市场股票数据
df = pd.read_csv('A股市场股票数据.csv')
df['trade_date'] = pd.to_datetime(df['trade_date'])

# 计算每个股票的月收益率
df['monthly_return'] = df.groupby('ts_code')['close'].pct_change(1)
df['monthly_return'] = (1 + df['monthly_return']).fillna(1)

# 计算每个股票的月动量
df['monthly_momentum'] = df.groupby('ts_code')['monthly_return'].rolling(12).apply(lambda x: np.prod(x)).values

# 将每个月的股票按照动量排序,并分成十分位
df['monthly_momentum_rank'] = df.groupby('trade_date')['monthly_momentum'].rank(pct=True)

# 构建每个月的动量十分位投资组合
portfolio = []
for date in df['trade_date'].unique():
    top_10 = df.loc[(df['trade_date'] == date) & (df['monthly_momentum_rank'] >= 0.9)]
    bottom_10 = df.loc[(df['trade_date'] == date) & (df['monthly_momentum_rank'] <= 0.1)]
    long_portfolio = top_10['ts_code'].tolist()
    short_portfolio = bottom_10['ts_code'].tolist()
    portfolio.append({'date':date, 'long_portfolio':long_portfolio, 'short_portfolio':short_portfolio})

# 打印每个月的动量十分位投资组合
for p in portfolio:
    print('Date:', p['date'])
    print('Long Portfolio:', p['long_portfolio'])
    print('Short Portfolio:', p['short_portfolio'])
    print()
``
根据A股市场股票进行JT动量策略排序构建股票每月的动量十分位投资组合的代码

原文地址: https://www.cveoy.top/t/topic/fgY3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录