Материал: Спекулятивные стратегии на валютном рынке

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

В целом мы можем заключить, что хотя мы и не получили для развивающихся стран устойчивой доходности с высоким коэффициентом Шарпа для всех трёх стратегий, как авторы, рассматривавшие эти стратегии с долларом США в качестве базовой валюты инвестирования, но мы сумели воссоздать значительную доходность для портфеля из валют развивающихся стран и разработать улучшенную методологию для стратегии "вэлью" для развитых стран, дающую устойчивую доходность при самых различных внешних факторах. В качестве направления дальнейшего исследования можно рассмотреть более глубокий анализ взаимосвязи между доходностями по данным и подобным им стратегиям по валютам с "нулевыми инвестиционными издержками" и различными классами акций и кредитных инструментов, как российских, так и зарубежных, с целью оптимизации рублёвой доходности.

 

Список источников


.     Akram Q., Rime D., Sarno L., 2008. Arbitrage in the Foreign Exchange Market: Turning on the Microscope. Journal of International Economics, Vol. 76 (2): 237:253

2.       Asness S., Clifford S., Moscowitz T., Pedersen L., 2013. Value and Momentum Everywhere, The Journal of Finance 68:929:985.

.        Backus D., Gregory A., Telmer C., 1993. Accounting for Forward Rates in Markets for Foreign Currency.The Journal of Finance 48(5): 1887-1908

.        Ballie R., Bollerslev T., 2000. The forward premium anomaly is not as bad as you think. Journal of International Money and Finance 19 (2000):471-488

.        Barroso P., Clara P., 2015. Beyond Carry Trade: Optimal Currency Portfolios. Journal of Financial and Quantitative Analysis 50(5): 1037-1056

.        Burnside C., Eichenbaum I., Rebelo S., 2011. Carry Trade and Momentum in Currency Markets. Annual Review of Financial Economics 3:511-535

.        Bansal R., Dahlquist M., 2000. The forward premium puzzle: different tales from developed and emerging economies. Journal of International Economics 51: 115-144.

.        Bhatti R., 2014. The existence of uncovered interest parity in the CIS countries. Economic Modelling 40 (2014): 227-241

.        Bilson, J.F.O. (1981) The Speculative Efficiency Hypothesis. J. Bus.54, 435-51

.        Brunnermeier M., Nagel S., Pedersen L., 2008. Carry Trades and Currency Crashes. NBER Macroeconomics Annual 23: 313-347

.        Cassel, G (1918), "Abnormal deviations in international exchanges", Economic Journal, 28 (112), 413-415.

.        Ca’ Zorzi, M, J Muck and M Rubaszek (2015), "Real exchange rate forecasting and PPP: This time the random walk loses", An earlier version was published as ECB Working Paper No. 1576, 2013

.        Chinn M., Meredith G., 2004. Monetary Policy and Long-Horizon Uncovered Interest Parity. IMF Staff papers, 51:409-430

.        Copeland L., Lu W., 2016. Dodging the steamroller: Fundamentals versus the carry trade. Journal of International Financial Markets, Institutions & Money 42(2016): 115-131.

.        Engel C., 1996. The forward discount anomaly and the risk premium:a survey of recent evidence. Journal of Empirical Finance, 3 (1996): 123-192.

.        Engel C., Mark N. et al (2007). Exchange Rate Models Are Not As Bad As You Think. NBER Macroeconomics Annual 22: 381-441, 443-473

.        Fama, E.F. (1984) Forward and Spot Exchange Rates. JME 14,319-38.

.        Frankel J., Poonawala J., 2010. The forward market in emerging currencies: less biased than in major currencies. Journal of International Money and Finance 29 (2010): 585-598

.        Froot K., 1990. Short rates and expected asset returns. NBER Working paper №3247

.        Froot K., Thaler R., 1990. Anomalies: foreign exchange. The Journal of Economic Perspectives 4(3): 179-192

.        Froot K., Frankel J., 1989. Forward Discount Bias: Is It An Exchange Rate Premium?. Quarterly Journal of Economics 104:139-161

.        Fisher, I., 1930. The Theory of Interest. McMillan, New York.

.        Gurvich E., Sokolov V., Ulykaev A., 2009. Analysis of the Relationship Between the Exchange Rate Policy of the RussianCentral Bank and the Interest Rates:Uncovered and covered Parity

.        Jorion P., Sweeney R., 1996. Mean reversion in real exchange rates: evidence and implications for forecasting. Journal of International Money and Finance 15(4): 535:550

.        Keynes, J.M., 1923. A Tract on Monetary Reform. Macmillan, London.

.        Lothian R. and Taylor M., 1996. The Journal of Political Economy 104, pp.488-509

.        Lustig H., Roussanov N., Verdelhan A., 2011. Common Risk Factors in Currency Markets. Review of Financial Studies 24 (11): 3731-3777

.        McCallum B., 1992. A reconsideration of the uncovered interest parity relationship. Journal of Monetary Economics 33(1):105-132

.        Meese, R A and K Rogoff (1983), "Empirical exchange rate models of the seventies: Do they fit out of sample?", Journal of International Economics 14 (1-2), 933-948.

.        Menkhoff L., Sarno M., Shmeling M., Schrimpf A., 2012. Carry Trades and Global Foreign Exchange Volatility. The Journal of Finance, 67: 681-718

.        Rafferty B., 2011. Currency returns, skewness and crash risk. Duke University, working paper.

.        Rogoff K. (1996). The Purchasing Power Parity Puzzle. Journal of Economic Literature 34 (2): 647-668

.        Skinner S., Mason A., 2011. Covered Interest Rate Parity in Emerging Markets. International Review of Financial Analysis (20):355-363.

.        Taylor M., 1989. Covered Interest Arbitrage and Market Turublence. The Economic Journal 99 (June):376-391

.        Villanueva, O. Miguel (2007) Forecasting Currency Excess Returns: Can the Forward Bias Be Exploited? JFQA 42, 963-90.

.        db Currency returns - http://www.cbs.db.com/new/docs/dbCurrencyReturns_March2009.pdf.

.        iPath® Optimized Currency Carry ETN Prospectus- http://www.ipathetn.com/US/16/en/contentStore.app?id=4269506

.        PowerShares DB G10 Currency Harvest Fund Fact Sheet - https://www.invesco.com/static/us/financial-professional/contentdetail?contentId=dfd207c649400410VgnVCM10000046f1bf0aRCRD&dnsName=us

Приложение. Программный код на языке R для построения валютных стратегий


#############################################################

# Libraries---------------------------------------------------------------------(timeSeries)(ggplot2)(openxlsx)(xlsx)(sandwich)(lmtest)

#############################################################

#functions----------------------------------------------------------------------<- function(x){(na.omit(x)+1)}.timeSeries <- function(X) {<- timeSeries((X[, -1, drop = FALSE], 2, as.numeric)

)(res) <- as.timeDate(X[, 1])(res) <- colnames(X)[-1]

}.master.portfolio <- function(input.discount) {<- timeSeries(t(apply(.discount,

,(this.discount) {.order <- this.discount[order(this.discount)].quantiles <- quantile(this.order, seq(0, 1 - 0.2, 0.2))(.discount,(x) which.max(c(x < this.quantiles, TRUE)) - 1

)

}

)), time(input.discount), colnames(input.discount))(res)

}.portfolio <- function(some.discount){<- timeSeries(t(apply(some.discount,1,function(x) {

(as.numeric(x==max(x))-as.numeric(x==min(x)))

}

)))(res) <- time(some.discount)(res) <- colnames(some.discount)(res)

}.dependent.portfolios <- function(master.portfolio)

{<- lapply(

:5,(i) {(master.portfolio == i, 2, as.numeric)

}

)(res)

}.returns <- function(dependent.portfolios,returns_ts)

{ .returns <- lapply(.portfolios,(this.portfolio) {(this.portfolio) * returns_ts

}

) .performance <- lapply(.returns,(some.returns) {(some.returns)/rowSums(some.returns!=0)

}

)<- all.performance[[1]](i in 2:nport) {temp1 <- cbind(temp1,all.performance[[i]])}(temp1) <- c("V1","V2","V3","V4","V5")(temp1)

}<- function(y) {(1+y)^12-1} .table <- function(returns, annual=TRUE,rf=NULL){

mymean <-function(x){100*(mean(x)*(annual==FALSE)+ann(mean(x))*(annual==TRUE)) }<- function(x){100*(sd(x)*(annual==FALSE)+sd(x)*sqrt(12)*(annual==TRUE)) }

if (is.null(dim(returns))==FALSE) {<- apply(cbind(returns,returns[,5]-returns[,1]),2,function(x)

{c(mymean(x),mysd(x),skewness(x),kurtosis(x))}) (temp) <- c(colnames(returns),"V5-V1");(temp) <- c("Mean","Std.dev.","Skewness","Kurtosis")

}

else {temp <- t(c(mymean(returns),mysd(returns),skewness(returns),kurtosis(returns)))

colnames(temp) <- c("Mean","Std.dev.","Skewness","Kurtosis")

}(round(temp,2))

}

#############################################################

#Preliminaries-----------------------------------------------------------------<- 5.file <- "./new_data/portfolios/FX_data_v8.xlsx".master.file <- "./new_data/bidask_v4.xlsx".excess.returns <- read.xlsx(master.file, sheet=4,detectDates=T).diff <- read.xlsx(master.file, sheet=1,detectDates=T).PPP.value <- read.xlsx(master.file, sheet=6,detectDates=T).micex.returns <- read.xlsx(master.file,sheet=5, detectDates=T)

xlsx.trlong.excess.returns <- read.xlsx(bidask.master.file, sheet=1,detectDates=T).trshort.excess.returns <- read.xlsx(bidask.master.file, sheet=2,detectDates=T)

# for developing.master.file <- "./new_data/portfolios/developing_v1.xlsx"

new.xlsx.excess.returns <- read.xlsx(new.master.file, sheet=2,detectDates=T)

new.xlsx.fd <- read.xlsx(new.master.file, sheet=1,detectDates=T).xlsx.PPP.value <- read.xlsx(new.master.file, sheet=3,detectDates=T).series.excess.returns <- na.omit(to.timeSeries(new.xlsx.excess.returns));.series.fd <- na.omit(to.timeSeries(new.xlsx.fd));.series.PPP.value <- na.omit(to.timeSeries(new.xlsx.PPP.value)).obs <- dim(new.series.fd)[1];new.ncur <- dim(new.series.fd)[2](zoo);library(lmtest);('package:lmtest')('package:zoo').excess.returns <- na.omit(to.timeSeries(xlsx.excess.returns));.diff <- na.omit(to.timeSeries(xlsx.diff));.PPP.value <- na.omit(to.timeSeries(xlsx.PPP.value)).micex.returns <- na.omit(to.timeSeries(xlsx.micex.returns))

series.trlong.excess.returns <- na.omit(to.timeSeries(xlsx.trlong.excess.returns)).trshort.excess.returns <- na.omit(to.timeSeries(xlsx.trshort.excess.returns))

obs <- dim(series.diff)[1];ncur <- dim(series.diff)[2]

#############################################################

# Master portfolios --------------------------------------------------------------.master <- make.master.portfolio(-series.diff) .master <- make.master.portfolio(series.excess.returns).carry <- sign(-series.diff).momentum <- sign(series.excess.returns) .master <- make.master.portfolio(series.PPP.value)

# for developing.carry.master <- make.master.portfolio(-new.series.fd) .momentum.master <- make.master.portfolio(new.series.excess.returns).PPP.master <- make.master.portfolio(new.series.PPP.value)

#############################################################

# Dependent portfolios ---------------------------------------------------------.dependent <- make.dependent.portfolios(carry.master).dependent <- make.dependent.portfolios(momentum.master).dependent <- make.dependent.portfolios(PPP.master)

buyFX.dependent <- timeSeries(matrix(ncol=ncur,nrow=obs,rep(1,ncur*obs)),

time(carry.master),colnames(carry.master)).carry.dependent <- HiLo.portfolio(-series.diff).momentum.dependent <- HiLo.portfolio(series.excess.returns)

# for developing.carry.dependent <- make.dependent.portfolios(new.carry.master)

new.momentum.dependent <- make.dependent.portfolios(new.momentum.master)

new.PPP.dependent <- make.dependent.portfolios(new.PPP.master)

new.buyFX.dependent <- timeSeries(matrix(ncol=new.ncur,nrow=new.obs,rep(1,new.ncur*new.obs)),

time(new.carry.master),colnames(new.carry.master))

#############################################################

# Performance evaluation -------------------------------------------------------.returns <- na.omit(eval.returns(carry.dependent,series.excess.returns))

ew.carry.returns <- na.omit(rowSums(lag(ew.carry)*series.excess.returns))/ncur.returns <- na.omit(eval.returns(momentum.dependent,series.excess.returns)).momentum.returns <- na.omit(rowSums(lag(ew.momentum)*series.excess.returns))/ncur.returns <- na.omit(eval.returns(PPP.dependent,series.excess.returns)).returns <- na.omit(rowSums(lag(buyFX.dependent)*series.excess.returns))/ncur.carry.returns <- na.omit(rowSums(lag(HiLo.carry.dependent)*series.excess.returns))/2.momentum.returns <- na.omit(rowSums(lag(HiLo.momentum.dependent)*series.excess.returns))/2

# for developing.carry.returns <- na.omit(eval.returns(new.carry.dependent,new.series.excess.returns)).momentum.returns <- na.omit(eval.returns(new.momentum.dependent,new.series.excess.returns)).PPP.returns <- na.omit(eval.returns(new.PPP.dependent,new.series.excess.returns)).buyFX.returns <- na.omit(rowSums(lag(new.buyFX.dependent)*new.series.excess.returns))/new.ncur

#############################################################

#Tables -------------------------------------------------------.table <- make.table(carry.returns,ann=TRUE).table <- make.table(momentum.returns,ann=TRUE).table <- make.table(PPP.returns, ann=TRUE).table <- make.table(cbind(series.micex.returns,buyFX.returns));.singles <- make.table(na.omit(lag(ew.carry)*series.excess.returns))

momentum.singles <- make.table(na.omit(lag(ew.momentum)*series.excess.returns))

colnames(benchmark.table) <- c("MICEX","Buy FX").carry.table <- make.table(HiLo.carry.returns).momentum.table <- make.table(HiLo.momentum.returns).carry.table <- make.table(ew.carry.returns).momentum.table <- make.table(ew.momentum.returns).total <- cbind(cumul(HiLo.carry.returns), cumul(ew.carry.returns),(carry.returns[,5]-carry.returns[,1]),cumul(buyFX.returns))

momentum.total <- cbind(cumul(HiLo.momentum.returns), cumul(ew.momentum.returns),

cumul(momentum.returns[,5]-momentum.returns[,1]),cumul(buyFX.returns))

value.total <- cbind(cumul(PPP.returns[,5]-PPP.returns[,1]), cumul(buyFX.returns))

cum.total <- cbind(cumul(carry.returns[,5]-carry.returns[,1]),(momentum.returns[,5]-momentum.returns[,1]),(PPP.returns[,5]-PPP.returns[,1]), cumul(buyFX.returns)).total <- cbind(carry.returns[,5]-carry.returns[,1],.returns[,5]-momentum.returns[,1],.returns[,5]-PPP.returns[,1], buyFX.returns,.micex.returns) .table <- round(cor(returns.total),1)

# for developing.carry.table <- make.table(new.carry.returns,ann=TRUE).momentum.table <- make.table(new.momentum.returns,ann=TRUE).PPP.table <- make.table(new.PPP.returns,ann=TRUE)

#Plots -------------------------------------------------------(timeSeries(carry.total), main="Cumulative return on carry strategies",="Accumulated return",=c("blue","red","green","grey"),lty=c(1,1,1,2),plot.type="single")(x="bottomleft",legend=c("Carry HML", "EW Carry",

"Carry V5-V1","BuyFX"),col=c("blue","red","green","grey"),=c(1,1,1,2),cex=0.6)(timeSeries(momentum.total), main="Cumulative return on momentum strategies",="Accumulated return",=c("blue","red","green","grey"),lty=c(1,1,1,2),plot.type="single")(x="topleft",legend=c("Momentum HML", "EW Momentum",

"Momentum V5-V1","BuyFX"),col=c("blue","red","green","grey"),=c(1,1,1,2),cex=0.6)(timeSeries(value.total), main="Cumulative return on value strategy",="Accumulated return",=c("blue","grey"),lty=c(1,2),plot.type="single")

legend(x="topleft",legend=c("Value V5-V1","BuyFX"),col=c("blue","grey"),

lty=c(1,1,1,2),cex=0.6)(timeSeries(cum.total), main="Cumulative returns",="Accumulated return",=c("blue","green","red","grey"),lty=c(1,1,1,2),plot.type="single")(x="topleft",legend=c("Carry V5-V1","Momentum V5-V1",

"Value V5-V1","BuyFX"),col=c("blue","green","red","grey"),=c(1,1,1,2),cex=0.6)

#############################################################

#Table: breakdown by periods ---------------------------------------------------<- 1:49;per2 <- 50:72; per3 <- 73:134;per4 <- 135:152;wh_per <- 1:152;<- wh_per;.bkd <- make.table(cbind((carry.returns[per,5]-carry.returns[per,1]),

(momentum.returns[per,5]-momentum.returns[per,1]),

(PPP.returns[per,5]-PPP.returns[per,1]),

(buyFX.returns[per]),series.micex.returns))[,1:5](per.bkd) <- ("Carry","Momentum","Value","Buy FX", "Micex").bkd

#############################################################

#Adjustment for transaction costs ----------------------------------------------.returns <- function(dependent) {<- na.omit(eval.returns(dependent,series.trlong.excess.returns))<- na.omit(eval.returns(dependent,series.trshort.excess.returns))<- cbind(b[,1],a[,2:5])<- make.table(c)[,c(1,5,6)]

}.returns(carry.dependent).returns(momentum.dependent).returns(PPP.dependent)

Источник: https://www.bibliofond.ru/view.aspx?id=904589