我收到以下错误:
Exception in thread "main" rcaller.exception.RCallerExecutionException: RExecutable is not defined. Please set this variable to full path of R executable binary file.
话虽如此,我已经单独测试了 RCaller 并让它工作(基本的 1+1 示例)。
我试图在 Java 中运行的代码如下:
public void computeImpliedVol(siteCall.reqObj rO) {
try {
double price;
String modCP=callPut.contains("P")?"put":"call";
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
DecimalFormat df = new DecimalFormat("########");
Date dMat = sf.parse(df.format(maturity));
Date dt;
double diff;
caller.setRscriptExecutable("C:/Program Files/R/R-2.15.2/bin/Rscript");
String command;
for (Double d : hTimeSeries.keySet()) {
caller.addRCode("library(RQuantLib)");
dt = sf.parse(df.format(d));
diff=(dMat.getTime()-dt.getTime())/(60.0*60.0*1000.0*24.0)/365.0;
if (longShort > 0) {
price = hTimeSeries.get(minDate).ask;
} else {
price = hTimeSeries.get(minDate).bid;
}
command = "EOImpVol<-EuropeanOptionImpliedVolatility(\"" + modCP + "\","
+ price + "," + rO.requestObject.get(d).hAClose + "," + strike + ",0,.03," +
diff + ",.2)";
caller.addRCode(command);
caller.runAndReturnResultOnline("EOImpVol");
double rDbl[]=caller.getParser().getAsDoubleArray("EOImpVol");
rDbl=rDbl;
}
} catch (ParseException ex) {
Logger.getLogger(optionDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
如果我尝试command
在 RI 中运行得到:
EOImpVol<-EuropeanOptionImpliedVolatility("put",1.9,21.18,21.0,0,.03,0.10410958904109589,.2) EOImpVol $impliedVol [1] 0.7518471
$parameters
$parameters$type
[1] "put"
$parameters$value
[1] 1.9
$parameters$underlying
[1] 21.18
$parameters$strike
[1] 21
$parameters$dividendYield
[1] 0
$parameters$riskFreeRate
[1] 0.03
$parameters$maturity
[1] 0.1041096
$parameters$volatility
[1] 0.2
attr(,"class")
[1] "EuropeanOptionImpliedVolatility" "ImpliedVolatility"
所以我假设它工作正常。是否有明显的事情发生,我没有意识到这是新的?
非常感谢