多項目の比率〜多通貨為替〜

  • 外国為替というのがある
  • 複数の外国通貨間で交換する比率を決めてやりとりする制度
  • 通貨を交換してぐるりと回るだけでお金の量が増えてしまうようなら、みんなそれをやってしまう、そんな生き馬の目を抜くような世界だから、そんなことはない
  • うまく辻褄があっている
  • この辻褄があっているというのはどういうことか
  • n種類の通貨がある
  • nxn行列を作って交換比率の行列を作ったとしよう
  • 対角成分は1
  • 対角成分に対して対称的な2つのセルの値は、掛け合わせると1になるように均衡している
  • 任意の3つの通貨を一巡すると、お金は増えずに元に戻る(手数料はないものとする)から、r12 * r23 * r31 = 1が、すべての3通貨トリオに成り立っている
  • 掛け算はちょっと面倒くさいので、対数を取ることにすると、t12 = log(r12)に対して、t12 + t23 + t31 = 0
  • 結局、n種類の通貨に対して、自由に決められる値は、n-1個になっていて、しかも、rの1との大小〜tの0との大小〜に応じて、n個の要素が1次元の実直線上に相対的な位置以外は一意に配されて、すべての通貨ペアの間のt的距離が満足される、ということがわかる
  • 多通貨外国為替の変動は、1次元数直線上の通貨種の位置の変遷としてとらえればよい
  • メモソース
n.currency <- 3

n.time <- 100

X <- matrix(rnorm(n.currency*n.time),ncol=n.currency) * 0.0001
X[1,] <- rep(0,n.currency)
X. <- apply(X,2,cumsum)

matplot(X.,type="l")

ex.mat <- function(x){
	n <- length(x)
	ret <- diag(rep(1,n))
	for(i in 1:n){
		for(j in 1:n){
			tmp <- x[i] - x[j]
			ret[i,j] <- exp(tmp)
			ret[j,i] <- exp(-tmp)
		}
	}
	ret
}
exchange.matrix <- list()
for(i in 1:n.time){
	exchange.matrix[[i]] <- ex.mat(X.[i,])
}
library(mwaytable)
my.finantial.rate <- function(r){ # 1USD=ayen,1Euro=byen...)
	tmp <- exp(r)
	pn <- 1/(1+sum(tmp))
	p <- exp(r) * pn
	tmp2 <- c(p,pn)
	R <- make.simplex.0(length(r)+1)
	return(R %*% tmp2)
}

my.finantial.rate(c(1.1,1.2))

data2 <- as.matrix(data[,3:5])
out <- matrix(0,length(data2[,1]),4)
for(i in 1:length(data2[,1])){
	out[i,] <- my.finantial.rate(c(data2[i,])*100)
}