2013-07-09 4 views
1

Я получаю следующее сообщение об ошибке:RCaller & RQuantlib ошибка в Java

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" 

Так я предполагаю, что это работает отлично. Является ли что-то очевидным, что я не понимаю, что вы новичок в этом?

Большое спасибо

ответ

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()); 
        } 
       } 
      }