доверительный интервал для американского опциона пут в программировании на R? - PullRequest
1 голос
/ 27 марта 2020

Я получаю оценку по пунктам для функции AmericanPutLSM (ie цена опциона на американский опцион), но не могу вычислить доверительный интервал. Кто-нибудь может подсказать, что можно сделать? Я использую метод Лонстаффа-Шварца, чтобы найти цену американских опционов пут.

AmerPutLSM_1a <- function (GBM,Strike=1.1, r=0.06, dr=0.0) {
#   GBM<-matrix(NA, nrow=n, ncol=m)
#   for(i in 1:n) {
#       GBM[i,]<-Spot*exp(cumsum(((r-dr)*(mT/m)-0.5*sigma*sigma*(mT/m))+(sigma*(sqrt(mT/m))*rnorm(m, mean= 0, sd=1))))
#   }


  n = nrow(GBM) ;
  m = ncol(GBM);
  mT = m;
    print(mT);
    X<-ifelse(GBM<Strike,GBM,NA)
    CFL<-matrix(pmax(0,Strike-GBM), nrow=n, ncol=m)
    Xsh<-X[,-m]
    X2sh<-Xsh*Xsh
    Y1<-CFL*exp(-1*r*(mT/m))
    Y2<-cbind((matrix(NA, nrow=n, ncol=m-1)), Y1[,m])
    CV<-matrix(NA, nrow=n, ncol=m-1)
    try(for(i in (m-1):1) {
    reg1<-lm(Y2[,i+1]~Xsh[,i]+X2sh[,i])
    print(summary(reg1))
    CV[,i]<-(matrix(reg1$coefficients)[1,1])+((matrix(reg1$coefficients)[2,1])*Xsh[,i])+((matrix(reg1$coefficients)[3,1])*X2sh[,i])
    CV[,i]<-(ifelse(is.na(CV[,i]),0,CV[,i]))
    Y2[,i]<-ifelse(CFL[,i]>CV[,i], Y1[,i], Y2[,i+1]*exp(-1*r*(mT/m)))
    }
    , silent = TRUE)
    CV<-ifelse(is.na(CV),0,CV)
    CVp<-cbind(CV, (matrix(0, nrow=n, ncol=1)))
    print(CVp)
    POF<-ifelse(CVp>CFL,0,CFL)

    FPOF<-firstValueRow(POF)
    dFPOF<-matrix(NA, nrow=n, ncol=m)
    dFPOF_test<-matrix(NA, nrow=n, ncol=m)
    for(i in 1:m) {
        dFPOF[,i]<-FPOF[,i]*exp(-1*mT/m*r*i)
        dFPOF_test[,i]<-FPOF[,i]
        print(dFPOF_test)
        }
    PRICE<-mean(rowSums(dFPOF))
    res<- list(price=(PRICE),Strike, n, m, r, dr, mT)
    class(res)<-"AmerPut"
    return(res)
}
...