行业指数动量策略+akshare

68 篇文章 14 订阅
28 篇文章 24 订阅

以周为单位,获取本周最强的5只行业指数,进行均值购买。

数据源采用akshare。

导入包

import akshare as ak
import pandas as pd
import numpy as np
import matplotlib

 日线换为周线

#日线换为周线数据
def transferToWeekLine(df):
    data1=df
    stock_data = pd.DataFrame(data1)
    
    #设定转换周期period_type  转换为周是'W',月'M',季度线'Q',五分钟'5min',12天'12D'
    stock_data["date"] = pd.to_datetime(stock_data["date"])
    period_type = 'W'


    stock_data.set_index('date',inplace=True)

    #进行转换,周线的每个变量都等于那一周中最后一个交易日的变量值

    period_stock_data = stock_data.resample(period_type).last()

    # 周线的open等于那一周中第一个交易日的open

    period_stock_data['open'] = stock_data['close'].resample(period_type).first()

    #周线的high等于那一周中的high的最大值

    period_stock_data['high'] = stock_data['close'].resample(period_type).max()

    #周线的low等于那一周中的low的最大值

    period_stock_data['low'] = stock_data['close'].resample(period_type).min()

    #周线的volume和money等于那一周中volume和money各自的和
    
    period_stock_data['chg_pct'] = stock_data['chg_pct'].resample(period_type).sum()
    period_stock_data['volume'] = stock_data['volume'].resample(period_type).sum()

    # period_stock_data['money'] = stock_data['money'].resample(period_type,how='sum')

    #计算周线turnover

    # period_stock_data['turnover'] = period_stock_data['volume'](period_stock_data['traded_market_value']/period_stock_data['close'])

    #股票在有些周一天都没有交易,将这些周去除

    period_stock_data = period_stock_data[period_stock_data['volume'].notnull()]

    period_stock_data.reset_index(inplace=True)

    data = np.array(period_stock_data) #先将数据框转换为数组
    data_list = data.tolist()  #其次转换为列表
    for i in data_list:
        i[0]=str(i[0]).split(" ")[0]
    return data_list

获取申万二级行业代码

#获取申万二级行业代码
sw_index_third_info_df = ak.sw_index_third_info()
sw_index_third_info_df['行业代码']=sw_index_third_info_df['行业代码'].apply(lambda x:str(x)[:6])

#获取行业指数行情
#策略1,行业轮动现象的直观表征:相对强弱

ind = pd.DataFrame()
for i in range(len(sw_index_third_info_df)):
    #print(sw_index_third_info_df.iloc[i,0])
    sw_index_daily_df = ak.sw_index_daily_indicator(symbol=sw_index_third_info_df.iloc[i,0], start_date="20191201", end_date="20220310",data_type='Day')
    stock_data=pd.DataFrame(transferToWeekLine(sw_index_daily_df))
    stock_data.rename(columns={0:'date',1:'code',2:'name',3:'close',4:'volume',5:'chg_pct'},inplace=True)
    stock_data=stock_data.iloc[:,:6]
    stock_data['ret'] = stock_data['chg_pct'].shift(-1)
    ind = ind.append(stock_data)

#获取每个交易周的行业指数,并买入排名前五,(均值买入),并计算持仓一个礼拜的收益。

ind = ind.sort_values(by='date')
last = pd.DataFrame()
l = []
for i in ind['date'].unique():
    d = ind.loc[ind['date']==i].sort_values('close',ascending=True).head(5)
    l = l+[d.ret.mean()/100] 

绘制资金曲线图

pd.DataFrame(l).cumsum().plot()

 

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
动量策略是一种基于价格趋势的交易策略,其主要思想是在过去一段时间内表现较好的股票可能会在未来表现更好,因此可以选择购买这些股票。下面是一个简单的动量策略的 MATLAB 代码示例: ```matlab % 读取历史股票价格数据 data = readtable('stock_prices.csv'); % 计算每只股票在过去6个月的收益率 returns = tick2ret(data(:,2:end), 'Continuous'); momentum = prod(1+returns(end-125:end,:)) - 1; % 选择前10%的股票 momentum_sorted = sort(momentum, 'descend'); momentum_threshold = momentum_sorted(round(length(momentum)*0.1)); selected = momentum >= momentum_threshold; % 分配资金到被选中的股票中 num_stocks = sum(selected); portfolio_weights = zeros(size(selected)); portfolio_weights(selected) = 1/num_stocks; % 计算每日的投资组合收益率 portfolio_returns = tick2ret(data(:,selected+1), 'Continuous') * portfolio_weights'; portfolio_cum_returns = cumprod(1+portfolio_returns) - 1; % 画出投资组合的累计收益率曲线 plot(data.Date, portfolio_cum_returns); datetick('x', 'yyyy-mm'); title('Momentum Portfolio'); xlabel('Date'); ylabel('Cumulative Return'); ``` 在这个代码中,我们首先读取了历史股票价格数据,并计算了每只股票在过去6个月的收益率。然后,我们选择了在过去6个月中表现最好的前10%的股票,并将资金均分到这些股票中。最后,我们计算了每日的投资组合收益率,并画出了投资组合的累计收益率曲线。 请注意,这只是一个简单的示例代码,实际的动量策略可能会包括更多的因素和参数,例如股票的市值、流动性等。此外,投资组合的构建和资金分配方式也可能有很多不同的选择。因此,投资者在实际应用中应该结合自己的需求和市场情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神出鬼没,指的就是我!

必须花钱,数据超好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值