为了分散交易中的风险,咱们能够在量化交易中选择市场中性策略。segmentfault
咱们选择具备基本面相关性的股票对,价格趋势具备趋同和趋离,买多强势的股票,卖空弱势的股票,同时交易,控制股市风险。函数
案例是石油公司埃克森美孚(NYSE:XOM)和石油公司雪佛龙(NYSE:CVX)性能
公司简介:埃克森美孚公司于1882年在美国新泽西州成立,公司的分部及附属公司在美国和世界上大多数其余国家经营或买卖产品。公司主要业务为能源,涉及勘探、生产、原油和自然气;生产石油产品;运输和销售原油、自然气和石油产品。公司是石油化工商品的制造商和销售商,包括烯烃、芳烃、聚乙烯和聚丙烯塑料和各类特点产品。此外,公司还拥有发电设施的利益。公司也是全球主要的石化产品生产商和营销商,并参与发电。
公司简介: 雪佛龙股份有限公司于1926年在美国特拉华州注册成立。公司经营范围包括石油和化学工业的各个方面。上游业务主要包括勘探、开发及生产原油及自然气;加工、液化、运输和液化自然气再气化;主要的国际石油出口管道输送原油;运输、储存和销售自然气;一个自然气合成油项目。下游业务主要包括将原油提炼为石油产品;营销原油及其成品;经过管道、海洋船舶、电机设备和轨道车运送原油和成品油;制造和销售在工业用途、燃料和润滑油添加剂上应用的石化产品、塑料。
# 载入量化和绩效分析库 library(quantmod) library(PerformanceAnalytics) # 下载股价和提取收盘价函数 get_symbol_cl <- function(symbol) { getSymbols(symbol, src = "yahoo", from = "2010-01-01", to = "2016-01-01") temp <- Ad(get(symbol)) return(temp) } # 计算收益率函数 ret_normalize <- function(ret) { ret[1] <- 0 norm_ret <- cumprod(1 + ret) return(norm_ret) } # 下载埃克森美孚(NYSE:XOM)和雪佛龙(NYSE:CVX)股票的收盘价 # 选择的股票对应该有明显的趋同和驱离,同向不行,例如道琼斯指数和标普500指数 xom <- get_symbol_cl("XOM") cvx <- get_symbol_cl("CVX") # 计算收益率 ret_xom <- Delt(xom) colnames(ret_xom) <- "ret_xom" ret_cvx <- Delt(cvx) colnames(ret_cvx) <- "ret_cvx" # 转化为标准化收益率 norm_xom <- ret_normalize(ret_xom) norm_cvx <- ret_normalize(ret_cvx) # 标准化价格差,均值和标准差 diff <- norm_xom - norm_cvx me <- mean(diff) std <- sd(diff) # 标准差的上下边界,这是最重要的数据 n <- 1 ub <- me + n * std lb <- me - n * std # 回测信号,用向量化的ifelse,性能更好 # 1买XOM卖CVX,-1卖XOM买CVX,0空仓 signal <- NULL signal <- ifelse(diff > ub, -1, ifelse(diff < lb, 1, 0)) # 标准化价格差、价差和交易信号 par(mfrow = c(3, 1)) plot( cbind(norm_xom, norm_cvx), main = "埃克森美孚 & 雪佛龙 标准价格", col = c("black", "red"), ylim = c(0.5, 2), ylab = "标准价格" ) plot(diff,main="价格差") plot(signal,main="交易信号")
# 回测交易 # 不考虑全部费用和滑点 spread_return <- ret_xom - ret_cvx cost <- 0 trade_return <- spread_return*lag(signal)-cost names(trade_return) <- "TradStrat_PT#1" # 交易效果和绩效指标 summary(as.vector(trade_return)) cumm_ret <- Return.cumulative(trade_return) annual_ret <- Return.annualized(trade_return) par(mfrow=c(1,1)) charts.PerformanceSummary(trade_return,main="交易报告") maxDrawdown(trade_return) StdDev(trade_return) StdDev.annualized(trade_return) VaR(trade_return) SharpeRatio(trade_return,Rf=0,FUN="StdDev") SharpeRatio.annualized(trade_return,Rf=0)
> # 交易效果和绩效指标 > summary(as.vector(trade_return)) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's -0.0373405 0.0000000 0.0000000 0.0002067 0.0000000 0.0329959 1 > tail(cumm_ret) TradStrat_PT#1 Cumulative Return 0.3460039 > maxDrawdown(trade_return) [1] 0.1077101 > StdDev(trade_return) [,1] StdDev 0.004425325 > StdDev.annualized(trade_return) TradStrat_PT#1 Annualized Standard Deviation 0.07024986 > VaR(trade_return) TradStrat_PT#1 VaR -0.005450908 > SharpeRatio(trade_return,Rf=0,FUN="StdDev") TradStrat_PT#1 StdDev Sharpe (Rf=0%, p=95%): 0.04671048 > SharpeRatio.annualized(trade_return,Rf=0) TradStrat_PT#1 Annualized Sharpe Ratio (Rf=0%) 0.7241807 >
这个策略的优化关键是:优选股票对,寻找上下边界n的值优化
感谢阅读,欢迎关注和留言> 感谢阅读,欢迎关注和留言 量化投资与期货外汇散仙,基金保险水平也拿的出手