原创 +1银贝 动量交易策略研报复现

sushi 1天前 22

交易市场千变万化,投资策略也在不断更新迭代,许多投资者采用动量交易的策略获取了不错的收益,本文旨在研究动量策略在A股市场中的有效性。

将证券市场与物理现象相类比,如果我们把证券的价格类比成运动中的物体,证券价格的上涨或下跌类比为物体的运动。则依据惯性原则,证券价格上涨,则其具有继续上涨的动能,也可以说证券价格保持着上涨的动量;同理,证券价格下跌,则其可能有继续下跌的动量。

最早研究动量效应的是Jegadeesh和Titman,他们发现美国股市中,投资组合收益表现出中期价格动量效应(JT价格动量策略)。Conrad与Kaul进一步验证了JT动量策略能获得显著利润,且发现最佳投资期限为3~12个月。Rouwenhorst研究了欧洲12个国家的股票市场,Hameed和Kusnadi研究了亚洲6个国家的股票市场,都发现了中期动量效应的存在。

因此,本文以A股2000年至2023年数据为基础,实证研究中期(35天)动量策略的有效性。

1. 实证研究方法

1.1价格动量的除法公式(ROC)

$$ ROCt=\dfrac{P_t-P_{t-m}}{P_{t-m}} $$

Pt—当前股价

Pt-m—m 天前的股价

图1:万科股票自2022年1月至今的5日动量图

Pt—当前股价

Pt-m—m 天前的股价

图1:万科股票自2022年1月至今的5日动量图 在实证研究过程中,以reh_close(复权收盘价)替代上述公式中的股价。 $$ Re=\dfrac{reh_close_t}{reh_close_0}-1 $$

1.2编写动量函数momentum

股价动量计算过程中,除了5日(指交易日),更为常见的一般时间跨度为1个月,35天,3个月,6个月,9个月,12个月。以10天、20天、25天为时间间隔的动量被视为短期动量,以1个月至1年为时间跨度被视为中期动量,时间跨度超过一年的被视为长期动量。

因此,根据前一步的股价动量计算公式,在程序中编写更为一般情况的动量计算公式,其中输入数据为包含股票收盘价的DataFrame和时间跨度,输出数据为包含动量序列的DataFrame。为计算方便,我们还增加了后续会提及的买入信号和卖出信号。

#动量函数
def momentum(data, period=35):
    data['p_close'] = data['close'].shift(period)
    data['momentum'] = data['close']/data['p_close'] - 1
    data.dropna(inplace=True)
    return data

1.3判断交易信号和持仓信号

根据每个交易日得到的动量值可以判断当日的交易信号:

(1)交易信号

①该交易日动量符号与上一交易日动量符号相同,则无交易信号;

②上一交易日动量小于0,该交易日动量大于0,则发出多头信号(signal=1),下个交易日以开盘价买入(开盘不涨停);

③上一交易日动量小于0,该交易日动量大于0,则发出多头信号(signal=0),下个交易日以收盘价卖出(当日不跌停);

(2)持仓信号

①上一交易日无交易信号,则持仓信号与上一交易日相同

②上一交易日交易信号为多头(signal=1),则该交易日持仓信号为持仓(pos=1)

③上一交易日交易信号为空头(signal=0),则该交易日持仓信号为空仓(pos=0)

# 计算开多信号
long_cond_1 = data['开盘涨停'].shift(-1) == False
long_cond_2 = data['momentum'] > 0
data.loc[long_cond_1 & long_cond_2, 'long_entry'] = 1
# 计算平多信号
short_cond_1 = data['momentum'] < 0
short_cond_2 = data['跌停'].shift(-1) == False
data.loc[short_cond_1 & short_cond_2, 'long_exit'] = 0

本贴含有隐藏内容,付费后可阅(股票量化投资课程学员可免费阅读)

点击下方按钮购买

成为学员
最新回复 ( 0条评论 )


官方微信
码力十足学量化
Powered by Xiuno BBS 4.0.7

官方微信