rmql47-bit

R Project and MQL4 convert forecast object in R to Vector


I am using the forecast package in R and this creates a forecast object.

I am wanting to convert the forecast into a vector so that I can use 7bits wrapper and use R in MQL4 code.

Example forecast code:

> forecast(fit, h=5)
     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
1057       1.605098 1.602110 1.608087 1.600528 1.609668
1058       1.605109 1.600891 1.609327 1.598658 1.611561
1059       1.604868 1.599723 1.610012 1.597000 1.612735
1060       1.604978 1.599037 1.610919 1.595892 1.614065
1061       1.605162 1.598511 1.611813 1.594990 1.615335

I would like to be able to somehow store those Forecast, lo 80, hi 80 etc. In a vector so I can pull them out of R and into MQL4 for use in an indicator.

I tried:

> test1 <- forecast(fit, h=5)
> test1
     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
1057       1.605098 1.602110 1.608087 1.600528 1.609668
1058       1.605109 1.600891 1.609327 1.598658 1.611561
1059       1.604868 1.599723 1.610012 1.597000 1.612735
1060       1.604978 1.599037 1.610919 1.595892 1.614065
1061       1.605162 1.598511 1.611813 1.594990 1.615335

However if I try to pull out forecast I get:

> test1$Forecast
NULL

If I run head the structure appears as:

> head(test1)
$method
[1] "ARIMA(2,1,2)                   "

$model
Series: mt4test$close 
ARIMA(2,1,2)                    

Coefficients:
          ar1      ar2     ma1     ma2
      -0.5030  -0.9910  0.4993  0.9783
s.e.   0.0123   0.0089  0.0202  0.0140

sigma^2 estimated as 5.437e-06:  log likelihood=4897.31
AIC=-9784.61   AICc=-9784.55   BIC=-9759.81

$level
[1] 80 95

$mean
Time Series:
Start = 1057 
End = 1061 
Frequency = 1 
[1] 1.605098 1.605109 1.604868 1.604978 1.605162

$lower
          80%      95%
[1,] 1.602110 1.600528
[2,] 1.600891 1.598658
[3,] 1.599723 1.597000
[4,] 1.599037 1.595892
[5,] 1.598511 1.594990

$upper
          80%      95%
[1,] 1.608087 1.609668
[2,] 1.609327 1.611561
[3,] 1.610012 1.612735
[4,] 1.610919 1.614065
[5,] 1.611813 1.615335

Any help would be appreciated. It is keeping me from moving ahead with my tinkering haha.

Thanks in advance.


Solution

  • Function forecast() produces list. With function str() you can check structure of this object and with function names() see the names of each element in this list.

    library(forecast)
    fit <- Arima(WWWusage,c(3,1,0))
    test1<-forecast(fit)
    
    names(test1)
    [1] "method"    "model"     "level"     "mean"      "lower"     "upper"     "x"        
    [8] "xname"     "fitted"    "residuals"
    
     #to extract forecast
    test1$mean
    
    Time Series:
    Start = 101 
    End = 110 
    Frequency = 1 
     [1] 219.6608 219.2299 218.2766 217.3484 216.7633 216.3785 216.0062 215.6326 215.3175 215.0749
    
     #or as vector
    as.vector(test1$mean)
     [1] 219.6608 219.2299 218.2766 217.3484 216.7633 216.3785 216.0062 215.6326 215.3175 215.0749
    
     #to extract upper interval
    test1$upper
    
               80%      95%
     [1,] 223.5823 225.6582
     [2,] 228.5332 233.4581
     [3,] 232.7151 240.3585
     .... .... ....
    [10,] 260.7719 284.9625
    
     #to extract lower interval
    test1$lower
    
     #to extract only 95% upper interval
    test1$upper[,2]