R : i primi 30 minuti (dall’installazione al primo Trading-System)

...molti meno condividono i preziosi sorgenti...
Esagerato!

Vuoi paragonarlo a Io o a Delphi? :D

Anche come sorgenti in GitHub è comunque tra i primi venticinque, poi la vedo difficile competere con linguaggi che vanno bene per tutto come C#, C++, C, Java, Python etc., in fondo stiamo pur sempre parlando di un linguaggio nato da S per fare analisi di statistica e di matematica.
 
Ultima modifica:
Allora, mi fa diventare matto:

provo a usare apply.rolling(x, ......),

dove x è un normale vettore prezzi (non una time.Series) e mi da errore.

provo a trasformare x in una time.series con

x1 <- as.timeSeries(x), niente da fare...

Errore in checkData(R) :
The data cannot be converted into a time series. If you are trying to pass in names from a data object with one column, you should use the form 'data[rows, columns, drop = FALSE]'. Rownames should have standard date formats, such as '1985-03-15'.

mmmmmmm
 
Allora, mi fa diventare matto:

provo a usare apply.rolling(x, ......),

dove x è un normale vettore prezzi (non una time.Series) e mi da errore.

provo a trasformare x in una time.series con

x1 <- as.timeSeries(x), niente da fare...

Errore in checkData(R) :
The data cannot be converted into a time series. If you are trying to pass in names from a data object with one column, you should use the form 'data[rows, columns, drop = FALSE]'. Rownames should have standard date formats, such as '1985-03-15'.
Adesso mi odierai, Paolo, ma se x non è una time series devi usare rollapply() :D

Siccome, però, vedo che in realtà è una time series "mascherata", mi chiedo di cosa si tratti e in che formato siano le date per darti quel problema :mmmm:

Mi dai qualche dettaglio in più?
 
...è proprio un vettore di prezzi senza date......
E allora non puoi farlo diventare una time series se non ha le date :D

...sto scherzando!

Prova ts(data, start, end, frequency) se vuoi creare una serie storica oppure la cosa più comoda: se hai già un vettore di date da associare a quei prezzi, prova la funzione timeSeries(data, charvec), dove charvec è il tuo vettore di date.

Comunque mi suona strano perchè, quando cerchi di fare di un vettore qualsiasi una time series senza date, R semplicemente crea una time series identificata da un indice progressivo che parte da 1 :mumble:

Risolviamola 'sta cosa.

Mi alleghi i dati?
 
Ultima modifica:
Ti allego i dati in formato Txt.
Paolino...
Codice:
[COLOR=#000000][FONT=Lucida Console][COLOR=blue]> [/COLOR][COLOR=blue]head(x)

 [/COLOR][1] 12850 12840 12845 12900 12880 12880

[COLOR=blue]> [/COLOR][COLOR=blue]x1 <- as.timeSeries(x)

[/COLOR][COLOR=blue]> [/COLOR][COLOR=blue]head(x1)

 [/COLOR]      SS.1
 [1,] 12850
 [2,] 12840
 [3,] 12845
 [4,] 12900
 [5,] 12880
 [6,] 12880
[/FONT][/COLOR]
...me lo fa fare senza problemi, ovviamente anche senza date...

Non so perchè ti dia quel problema :(

Mi viene in mente una possibilità: non è che il vettore in cima ha un nome, e quindi R non lo legge come header del vettore ma come elemento del vettore e quindi... ti trasforma tutto il contenuto del vettore in variabile categorica anzichè numerica?
 
Ultima modifica:
A quel punto ci sono arrivato anch'io.

Ma quando passo quel vettore che tu hai chiamato x1 alla funzione applyrolling mi da errore
 
Ma quando passo quel vettore che tu hai chiamato x1 alla funzione applyrolling mi da errore
Hai ragionissima, Paolo: ho provato a specificare delle date a caso per x e adesso funziona perfettamente.

Media mobile semplice a 10 periodi:
Codice:
[COLOR=#000000][FONT=Lucida Console][COLOR=blue]> [/COLOR][COLOR=blue]tail(x1 <- timeSeries(data = x, charvec = x.dates))

 [/COLOR]GMT                      TS.1

 1993-09-08 22:00:00 14180
 1993-09-09 22:00:00 14245
 1993-09-10 22:00:00 14260
 1993-09-11 22:00:00 14290
 1993-09-12 22:00:00 14330
 1993-09-13 22:00:00 14340

[COLOR=blue]> [/COLOR][COLOR=blue]tail(apply.rolling(x1, width = 10, FUN = mean))

 [/COLOR]GMT                       calcs

 1993-09-08 22:00:00 14132.5
 1993-09-09 22:00:00 14145.5
 1993-09-10 22:00:00 14161.0
 1993-09-11 22:00:00 14179.0
 1993-09-12 22:00:00 14200.0
 1993-09-13 22:00:00 14225.0[/FONT][/COLOR]
Ma c'è una spiegazione: la comodità di apply.rolling() è quella di creare un altro oggetto time series già automaticamente allineato, in termini di date, all'oggetto di partenza (quindi non hai bisogno di allinearlo manualmente).

Infatti, se provi ad applicare rollapply() anzichè apply.rolling()(*), vedi che funziona anche senza date ma ti restituisce un oggetto che (eventualmente) va manualmente allineato a quello di partenza se hai intenzione di farci un back test o di visualizzarlo su un grafico, perchè ha una lunghezza differente.

Siccome apply.rolling() cerca automaticamente l'allineamento delle date delle due time series, quando non le trova si incazza e ti "suggerisce" di usare rollapply() per questo genere di cose :D

(*) rollapply() è semplicemente la funzione di partenza da cui è stata ricavata apply.rolling() per le serie storiche.
 
Ultima modifica:

Users who are viewing this thread

Back
Alto