我收到以下错误:
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&LT; -EuropeanOptionImpliedVolatility( “放”,1.9,21.18,21.0,0,.03,0.10410958904109589,0.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"
所以我假设它工作正常。是否有明显的事情发生,我没有意识到对此不熟悉?
非常感谢
答案 0 :(得分:1)
工作示例:
/*
* 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());
}
}
}