1

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交換のための私のソフトウェアの毎日の市販前の処理は、数時間ではなく数分で行われます。

4

1 に答える 1

0

私は何かに取り組んでいます。

Beancounter が使用する SQLite ファイルには、次の OHLCV の日次レコードを含むテーブルが含まれています。

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   

次に、必要に応じて beancounter を使用して株式を追加および更新するようにプロセスを書き直します。その EOD データ レポートが不足しているか、機能していないため、DB から直接取得するための適切な sqlite コマンドを学習しています。必要に応じて sed/awk で出力をマッサージし、ここに投稿します。

最後に、今日のライブ価格 (利用可能な場合) +キャッシュされた過去の 1 日の終わりのレコードを組み合わせた単純な pricehist.sh クエリが必要です。

于 2011-12-16T15:22:19.460 に答える