6
votes

Créez une série OHLC des données de ticker à l'aide de r

Cela semble être une chose commune, mais toute ma recherche apparaît avec des réponses à moitié ou inachevées.

J'ai un ensemble de données dans une CSV. Mais les données sont configurées, il est donc temps, prix, volume. Pour analyser correctement mes données, j'en ai besoin au format OHLCV: Ouvrir, haut, bas, Fermer, Volume.

Est-ce que quelqu'un a une idée de reformater en OHLCV?

ici est < Un href = "http://www.mediafire.com/?fyunce685ekuyo3" rel = "nofollow"> un échantillon d'un jeu de données : xxx


2 commentaires

Vous pouvez donner quelques premières lignes (avec l'en-tête) de vos données d'origine, puis un en-tête de la sortie souhaitée. Un vrai traitement serait une copie / code pastable pour importer des exemples de données que nous pouvons jouer avec.


Voir XTS :: to.Period .


3 Réponses :


2
votes

a zoo peut être reclassé comme OHLC avec classe (données) <- C ('zoo', 'ohlc', "une autre classe" ) .

de ? Quantimod :: Quantid.ohlc :

'quanmod.ohlc' est en réalité un nom de renommage d'un objet de classe 'zoo' , avec la convention de nom.open, nom.hager , ... pour les noms de colonne.

Si vous n'avez pas la colonne Volume, il n'y a aucun code que vous pouvez écrire qui ajoutera ces données. Il semble que vous ayez juste une série de prix intraday. Vous pouvez toujours les classer comme zoo ou XTS et effectuez une analyse de la série chère. Si vous souhaitez réduire la résolution de vos données, vous pouvez toujours numériser chaque jour et utiliser les fonctions d'abord , max , min , < Code> Dernier Pour obtenir votre O , h , l , c .


0 commentaires

5
votes

Pour illustrer @ Joshuauaulrich's Comment : xxx pré>

to.minutes code> est un de nombreux emballages pour à.Period code>. C'est équivalent, mais Plus général: P>

to.period(myxts, 'minutes', 1)


0 commentaires

2
votes

de http: //r.789695 .n4.non.com / Convert-Tick-Data-To-OHLC-TD926206.HTML

ohlc <- function(ttime,tprice,tvolume,fmt) {
    ttime.int <- format(ttime,fmt)
    data.frame(time = ttime[tapply(1:length(ttime),ttime.int,function(x) {head(x,1)})],
    .Open = tapply(tprice,ttime.int,function(x) {head(x,1)}), 
    .High = tapply(tprice,ttime.int,max),
    .Low = tapply(tprice,ttime.int,min),
    .Close = tapply(tprice,ttime.int,function(x) {tail(x,1)}),
    .Volume = tapply(tvolume,ttime.int,function(x) {sum(x)}),
    .Adjusted = tapply(tprice,ttime.int,function(x) {tail(x,1)}))
} 


2 commentaires

Ce sera beaucoup plus lent que à.Période surtout s'il y a des millions de lignes de données.


@Gsee a définitivement plus lentement, mais j'ai eu des problèmes lorsque j'ai expérimenté à l'envers. Période plus tôt. J'ai aussi inclus cela que je l'avais dans ma question initiale parce que la question était fermée par une personne qui ne pensait pas que c'était intéressant.