2011-12-15 5 views
1

OK, je ne veux pas dire que ce soit une autre question "comment puis-je obtenir des données historiques".Mise en cache et mise à jour des cotations boursières historiques OHLC localement

J'ai déjà trouvé beaucoup de sources facilement disponibles pour cela, même soigneusement exportées dans des téléchargements CSV directs comme Google Finance et Yahoo et Finviz.

Le logiciel que j'écris utilise activement des outils pratiques, y compris YahooFinance et Beancounter de Dirk Eddelbuettel. Ma question est, peut-être surtout si quelqu'un est familier avec beancounter, quand je demande des prix de fin de journée, comment puis-je m'assurer que toutes ces données historiques sont mises en cache (par exemple dans des fichiers locaux de texte ou sqlite) afin de minimiser autant de frapper le web et d'accélérer les demandes de répétition qui chevauchent les délais? Provoquer une recherche de réseau pour le prix en temps réel d'aujourd'hui si disponible est inévitable, ce qui en soi est très bien. Mon script pricehist.sh combine cela avec des prix OHLCV d'un stock N jours, qui peuvent également être facilement saisis avec par exemple. wget ou curl à droite URL + bonnes variables GET.

$ ./pricehist.sh VQT 6 
VQT 2011-12-14 125.50 125.50 124.43 124.49 20360 
VQT 2011-12-13 128.00 128.00 125.28 125.39 24400 
VQT 2011-12-12 127.50 127.50 126.36 126.66 9100 
VQT 2011-12-09 128.00 128.31 127.82 128.14 12100 

Dans le cas ci-dessus, je voudrais pricehist.sh à:

  • rechercher des données actuelles du marché pour aujourd'hui le cas échéant, si le cours de clôture est en fait dernier cours si la session pas terminée. FAIT
  • Vérifiez si le reste de l'historique demandé pour ce symbole de téléscripteur n'est pas déjà stocké localement, sinon:
  • Recherchez l'historique de VQT depuis 6 jours, enregistrez-le et imprimez le tableau terminé. FAIT

Malgré toute ma recherche, je ne sais toujours pas comment obtenir beancounter simplement la sortie d'une table stock OHLCV quel que soit portefeuille ... pas cette sortie:

$ setup_beancounter -l beancounter.stockdata.sqlite 
$ beancounter addstock VQT ACPW 
$ beancounter backpopulate --prevdate '1 month ago' --date 'today' VQT ACPW 
    Adding VQT from 20111114 to 20111214 
    Adding ACPW from 20111114 to 20111214 

$ beancounter dayendreport --prevdate '1 month ago' --date 'today' VQT 
## ..... hoping for OHLCV table of VQT only but get this instead: 
=============================================================================== 
Profit/loss   from 12 Dec 2011 to 14 Dec 2011 abs, rel change 
------------------------------------------------------------------------------- 
Citigroup, Inc. N USD 2690.00 26.90 2605.00 26.05 -85.00 -3.16% 
Exxon Mobil Corpo USD 6039.75 80.53 5958.00 79.44 -81.75 -1.35% 
Google Inc.  USD 15640.75 625.63 15451.75 618.07 -189.00 -1.21% 
International Bus USD 9557.50 191.15 9436.00 188.72 -121.50 -1.27% 
------------------------------------------------------------------------------- 
Grand Total  USD 33928.00   33450.75   -477.25 -1.41% 
=============================================================================== 

En utilisant le module Perl Finance place , Je ne vois pas où activer la mise en cache, ni quels fichiers de données locaux seraient utilisés pour le stockage. Chaque appel à yahoofinance.rb me montre son trafic web dans les journaux de proxy squid. Des milliers de requêtes EOD, qui se chevauchent souvent, au cours de plusieurs étapes de traitement de mon moteur, font que ces recherches sur le Web constituent un goulot d'étranglement majeur. Je pense que cette roue doit déjà être inventée, et j'utiliserai un backend RDBMS complet si je le dois, bien que cela reviendrait à taxer mes scripts Ruby, Perl et Bash avec des clients MySQL. En comparaison, ce que j'ai construit pour le marché boursier polonais pour l'entretien des fichiers texte pour chacun des quelque 700 symboles et traité seulement par grep, sed et awk est incroyablement rapide - presque instantané malgré des milliers de cycles de bouclage l'équivalent scripts - ainsi le pré-marketing quotidien de mon logiciel pour l'échange GPW est fait en quelques minutes et non en heures.

Répondre

0

Je suis sur quelque chose.

Le Beancounter fichier SQLite utilise comprend une table avec ces OHLCV dossiers quotidiens:

Table: stockprices 
# |symbol|date |previous_close|day_open  |day_low   |day_high  |day_close|day_change|bid |ask |volume  
----+------+--------+--------------+----------------+----------------+----------------+---------+----------+------+------+---------- 
1 |C  |20111214|26.9   |26.45   |25.92   |27.19   |26.05 |-0.85  |  |  |68284528 
2 |IBM |20111214|191.15  |189.84   |188.0   |190.28   |188.72 |-2.43  |  |  |5031717 
3 |GOOG |20111214|625.63  |621.49   |612.49   |624.32   |618.07 |-7.56  |617.59|618.95|3892889 
31 |HD |20111214|39.51   |39.45   |38.84   |39.57   |39.14 |-0.37  |  |  |12021824 
32 |IBM |20111213|    |193.46   |190.64   |194.3   |191.15 |   |  |  |5008400 
33 |IBM |20111212|    |193.64   |191.22   |193.9   |192.18 |   |  |  |3796100 
34 |IBM |20111209|    |192.91   |192.4   |194.87   |194.56 |   |  |  |4847900 

Alors, la prochaine, je vais réécris mon processus d'utiliser beancounter ajouter & actions de mise à jour au besoin, et depuis ses données EOD les rapports manquent ou ne fonctionnent pas pour moi, j'apprends les commandes sqlite appropriées pour les extraire directement de la base de données, masser la sortie au besoin avec sed/awk, et les poster ici.

À la fin, je devrais avoir une requête simple pricehist.sh qui combine les prix en direct d'aujourd'hui (si disponible) + mis en cache historique des dossiers de fin de journée.

Questions connexes