Кэширование и обновление исторических котировок акций OHLC локально - PullRequest
1 голос
/ 15 декабря 2011

ОК, я не хочу, чтобы это был еще один вопрос «как мне получить исторические данные о запасах».

Я уже нашел множество легкодоступных источников для этого, даже аккуратно экспортированных в прямыеCSV загружает с таких сайтов, как Google Finance, Yahoo и Finviz.

Программное обеспечение, которое я пишу, активно использует удобные инструменты, включая YahooFinance и прекрасный Beancounter Дирка Эддельбюттеля.

Мой вопрос, возможно, особенно если кто-то знаком сКогда я запрашиваю цены на конец дня для одной акции, как я могу убедиться, что все эти исторические данные кэшируются (например, в локальные текстовые или sqlite файлы), чтобы свести к минимуму попадание в сеть и ускорить повторениезапросы перекрывают временные рамки?

Вызывает поиск сети по сегодняшней цене в реальном времени, если она доступна, но неизбежна, что само по себе хорошо.Мой скрипт pricehist.sh сочетает это с ценами OHLCV на акции N дней назад, которые также можно легко получить, например, с помощью.wget или curl на правильный URL + правильные переменные 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  

В приведенном выше примере я бы хотел, чтобы pricehist.sh:

  • посмотрел текущие рыночные данные на сегодня, еслилюбая, поэтому цена закрытия фактически является последней ценой, если сессия не окончена.СОВЕРШЕНО
  • Убедитесь, что остаток запрошенной истории для этого символа тикера еще не сохранен локально, в противном случае:
  • Просмотрите историю VQT за 6 дней, сохраните ее и распечатайте заполненную таблицу.Совершено

Несмотря на все мои поиски, я все еще не уверен, как заставить beancounter просто выводить таблицу 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%
===============================================================================

ИспользованиеВместо этого в модуле Perl Finance я просто не вижу, где активировать кэширование и какие локальные файлы данных будут использоваться для хранения.Каждый вызов yahoofinance.rb показывает мне свой веб-трафик в логах прокси-сервера squid.Тысячи запросов EOD, часто накладывающиеся друг на друга, на нескольких этапах обработки моего движка, делают эти поиски в Интернете серьезным узким местом.

Я полагаю, что это колесо уже изобретено, и я буду использовать полную серверную часть RDBMS.если бы мне пришлось, хотя это означало бы облагать налогами мои сценарии Ruby, Perl и Bash с клиентами MySQL.

Для сравнения, то, что я создал для польского фондового рынка, поддерживало только текстовые файлы для каждого из примерно 700 символов иобрабатывается только grep, sed и awk невероятно быстро - почти мгновенно, несмотря на тысячи циклов зацикливания эквивалентных сценариев - поэтому ежедневный анализ моего программного обеспечения для обмена GPW выполняется за минуты, а не часы.

1 Ответ

0 голосов
/ 16 декабря 2011

Я к чему-то отношусь.

Файл SQLite, который использует Beancounter, содержит таблицу с этими ежедневными записями 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 отсутствуют или не работают для меня, я изучаю соответствующие команды sqlite, чтобы извлекать их непосредственно из db, массируйте вывод при необходимости с помощью sed / awk и отправьте сюда.

В конце у меня должен быть простой запрос pricehist.sh, который объединяет текущие цены в реальном времени (если доступны) + кэшированные исторические записи на конец дня.

...