1

我收到以下错误:

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" 

所以我假设它工作正常。是否有明显的事情发生,我没有意识到这是新的?

非常感谢

4

1 回答 1

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());
                    }
                }
            }
于 2013-07-14T18:25:56.697 回答