策略1:价格动量
框架:Backtrader
数据:Tushare
来源:151个交易策略 《151 Trading Strategies》 3.1 Strategy: Price-momentum
关键参数
(1) 收益率
(2) T周期内累计收益
(3) T周期内平均收益
(4) 风险调整收益
(5) 收益波动方差
本策略主要用于趋势跟踪,适用于成长类股票。策略通常对月K线进行操作,周期T通常为12个月。该策略可以用来辅助筛选股票,重点依据累计收益和风险调整收益,前者主要是衡量T周期内总体走势,后者衡量收益的风险和稳定性(取值越大越好)。据体策略描述请参考《151 Trading Strategies》。
主要指标代码如下:
#时间序列需由最近到最远list
class sty_price_momentum():
def __init__(self, prices, T=12):
self.strategy_name = 'price momentum'
self.T = T
self.prices = np.array(prices)
self.month_return = None
self.cumulative_return = None
self.mean_return = None
self.sigma_2_return = None
self.risk_adj_return = None
self.calculate_month_return()
self.calculate_risk_adj_return()
def calculate_month_return(self):
tmp = list(self.prices[1:])
tmp.append(self.prices[-1])
tmp = np.array(tmp)
self.month_return = self.prices/tmp - 1
def calculate_cumulative_return(self):
assert self.prices.shape[0] > self.T, '价格序列长度需大于形成期长度'
tmp = list(self.prices[self.T:])
tmp.extend(list(self.prices[(self.prices.shape[0]-self.T):]))
tmp = np.array(tmp)
self.cumulative_return = self.prices/tmp - 1
def calculate_mean_return(self):
self.mean_return = []
self.calculate_month_return()
shape_0 = self.month_return.shape[0]
for i in range(shape_0):
if i < shape_0 - self.T + 1:
tmp = np.mean(self.month_return[i:(i+self.T)])
else:
tmp = np.mean(self.month_return[i:])
self.mean_return.append(tmp)
self.mean_return = np.array(self.mean_return)
def calculate_sigma_2_return(self):
assert self.T > 1, '周期需大于1'
self.sigma_2_return = []
self.calculate_mean_return()
shape_0 = self.prices.shape[0]
for i in range(shape_0):
tmp = []
if i < shape_0 - self.T + 1:
tmp = self.month_return[i:(i+self.T)] - self.mean_return[i]
tmp = (sum(tmp**2))/(self.T - 1)
else:
tmp = self.month_return[i:shape_0] - self.mean_return[i]
tmp = np.mean(sum(tmp**2))/(shape_0 - i - 1 + 1e-6)
self.sigma_2_return.append(tmp)
self.sigma_2_return[-1] = 1e-6
self.sigma_2_return = np.array(self.sigma_2_return)
def calculate_risk_adj_return(self):
self.calculate_sigma_2_return()
self.risk_adj_return = self.mean_return / np.sqrt(self.sigma_2_return)
其他:
金融量化分析最新动态和源代码分享,请微信搜索并关注“量化之窗”公众号。