OK、これが別の「過去の株式データを取得するにはどうすればよいか」という質問であるという意味ではありません。
Google Finance、Yahoo、Finvizなどから直接CSVダウンロードにきちんとエクスポートされていても、すぐに利用できるソースをたくさん見つけました。
私が書いているソフトウェアは、YahooFinanceやDirkEddelbuettelのすばらしいBeancounterなどの便利なツールを積極的に使用しています。
私の質問は、おそらく特にbeancounterに精通している場合、単一の株式の1日の終わりの価格を照会するときに、すべての履歴データが(たとえば、ローカルテキストまたはsqliteファイルに)キャッシュされるようにするにはどうすればよいですか? Webへのアクセスを最小限に抑え、時間枠が重複する繰り返しクエリを高速化しますか?
利用可能な場合でも、今日のリアルタイム価格のネットワークルックアップを引き起こすことは避けられません。それ自体は問題ありません。私のpricehist.shスクリプトは、それをN日前の株式のOHLCV価格と組み合わせています。これは、たとえば、簡単に取得することもできます。正しいURL+適切なGET変数にwgetまたはcurlします。
$ ./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
上記の例では、pricehist.shに次のことを行います。
- 今日の現在の市場データがある場合はそれを調べます。したがって、セッションが終了していない場合、終値は実際には最終価格です。終わり
- そのティッカーシンボルに対して要求された残りの履歴がまだローカルに保存されていないかどうかを確認します。そうでない場合は、次のようにします。
- 6日前にさかのぼるVQT履歴を検索し、保存して、完成したテーブルを印刷します。終わり
私のすべての検索にもかかわらず、ポートフォリオに関係なく、beancounterに1つの株式のOHLCVテーブルを単純に出力させる方法がまだわかりません...この出力ではありません:
$ 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%
===============================================================================
代わりにPerlFinanceモジュールを使用すると、キャッシュをアクティブ化する場所や、ストレージに使用されるローカルデータファイルがわかりません。yahoofinance.rbを呼び出すたびに、squidプロキシログにそのWebトラフィックが表示されます。私のエンジンのいくつかの処理段階で何千ものEODクエリが重複していることが多いため、これらのWebルックアップが大きなボトルネックになっています。
このホイールはすでに発明されていると思います。必要に応じて完全なRDBMSバックエンドを使用しますが、MySQLクライアントでRuby、Perl、Bashスクリプトに負担をかけることになります。
比較すると、ポーランドの株式市場向けに作成したものは、約700のシンボルごとにテキストファイルのみを維持し、grep、sed、awkのみで処理されるため、非常に高速です。同等のスクリプトを何千回もループしているにもかかわらず、ほぼ瞬時に処理されます。 GPW交換のための私のソフトウェアの毎日の市販前の処理は、数時間ではなく数分で行われます。