我收到以下错误: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);
}
}
如果我尝试在R中运行
command
,则会得到:EOImpVol 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"
所以我认为它工作正常。是否有明显的事情发生,我不知道对此陌生?
非常感谢你
最佳答案
工作示例:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package intelopts;
import java.io.File;
import rcaller.RCaller;
import rcaller.RCode;
/**
*
* @author Jason
*/
public class rTest {
public void test() {
try {
RCaller caller = new RCaller();
caller.setRscriptExecutable("C:/Program Files/R/R-2.15.2/bin/Rscript");
RCode code = new RCode();
code.clear();
code.addRCode("library(RQuantLib)");
code.addRCode(" EOImpVol<-EuropeanOptionImpliedVolatility(\"put\",1.9,21.18,21.0,0,.03,0.10410958904109589,.2)");
caller.setRCode(code);
caller.runAndReturnResult("EOImpVol");
double[] d=caller.getParser().getAsDoubleArray("impliedVol");
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
关于java - Java中的RCaller和RQuantlib错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17538489/