CSV의 데이터가 포함 된 통화 옵션에 대한 Black-Scholes 기능과 이등분 모델이 있습니다. 그것은 관용을 초과하기 때문에 안쪽 루프에 갇혀있는 것처럼 보입니다. 내 Black-Scholes는 정확하게 계산하지 않으며 입찰가 평균을 사용하고 옵션의 실제 가격 대신 시장 가격을 요구합니다. 몇 시간 동안이 작업을하고 나면 분명히 뭔가 빠져있는 것일 수도 있습니다.R : Black-Scholes 및 이분법을 사용하여 IV 계산, 루프 작동을 거부 함
CSV에 대한 링크는 여기에 있습니다 : 당신은 true의 경우, 항상 사실이다,하는 조건에 while
루프를 사용하고
while(abs(bsmCall(as.numeric(as.character(myData[i,17])),
as.numeric(as.character(myData[i,1])),
as.numeric(as.character(myData[i,22])),
volMid,
as.numeric(as.character(myData[i,23])))-(as.numeric(as.character(myData[i,5])))) >= tol)
: http://s000.tinyupload.com/?file_id=06213890949979926112는
########################################################################
#Black-Scholes-Merton Call
bsmCall <- function(S, K, M, sig, r) {
yrTime=(M/252)
d1 <- (log(S/K)+(r+(sig^2/2))*(yrTime))/(sig*(sqrt(yrTime)))
d2 <- d1-sig*(sqrt(yrTime))
C <- (S*(pnorm(d1)))-((pnorm(d2))*K*(exp(-r*yrTime)))
return(C)
}
########################################################################
myData = read.csv("09-26-16.csv", stringsAsFactors=FALSE) #DATA
myData <- myData[,2:24] #omit first column
####### start bisection method of CALLS and put IV in database #######
i <- 1 # reset counter
tol <- 0.000001 #tolerance
while(i <= nrow(myData)) {
if((myData[i,5] != 0) & (myData[i,6] != 0)) {
volLower <- .0001 #will need to reset with each iteration
volUpper <- 1 #will need to reset with each iteration
volMid <- (volLower + volUpper)/2 #will need to reset with each iteration
while(abs(bsmCall(as.numeric(as.character(myData[i,17])),as.numeric(as.character(myData[i,1])),as.numeric(as.character(myData[i,22])),volMid,as.numeric(as.character(myData[i,23])))-(as.numeric(as.character(myData[i,5])))) >= tol) {
if((bsmCall(as.numeric(as.character(myData[i,17])),as.numeric(as.character(myData[i,1])),as.numeric(as.character(myData[i,22])),volMid,as.numeric(as.character(myData[i,23])))-(as.numeric(as.character(myData[i,5])))) < 0) {
volLower <- volMid
volMid <- (volUpper + volMid)/2
} else {
volUpper <- volMid
volMid <- (volLower + volMid)/2
}
}
myData[i,8] <- volMid
} else { myData[i,8] <- 0 }
i=i+1
}
csv에 링크하는 대신 (링크가 작동하지 않으며 SO가 리소스를 만드는 방법에 대해) 최소한의 재현 가능한 예제를 제공하십시오. http://stackoverflow.com/questions/5963269/how-to-make-a-great -r-reproducible-example. – Shape
귀하의 질문이 실제로 무엇인지 명확하지 않습니다. 이 코드를 실행할 때 실제 R 오류가 있습니까? 아니면 예상대로 행동하지 않는 것입니까? 그렇다면 예상대로 작동하지 않는 이유는 무엇입니까? (그것이 "관용"보다 위에 머물러있는 것은 무엇입니까? "그것은 관용을 넘어선 채로 남아 있습니까?"bmsCall이 예상 한 숫자를 반환하지 않는 문제입니까? 많은 사람들이 Black Scholes eqn과 호출 옵션에 대한 이분법 모델) –
무한 루프로 끝납니다. 다음은 CSV의 데이터 프레임 레크 리 에이션입니다. – Probability1