Хорошо, я не хочу, чтобы это был еще один вопрос «как мне получить исторические данные об акциях».
Я уже нашел множество легкодоступных источников для этого, даже аккуратно экспортированных в прямые загрузки CSV из таких компаний, как Google Finance, Yahoo и Finviz.
Программное обеспечение, которое я пишу, активно использует удобные инструменты, включая YahooFinance и прекрасный Beancounter Дирка Эддельбюттеля.
Мой вопрос, возможно, особенно если кто-то знаком с 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, часто перекрывающихся на нескольких этапах обработки моего движка, делают эти поисковые запросы в Интернете серьезным узким местом.
Я полагаю, что это колесо должно быть уже изобретено, и я буду использовать полный бэкэнд РСУБД, если потребуется, хотя это будет означать обложение моих скриптов Ruby, Perl и Bash с клиентами MySQL.
Для сравнения, то, что я построил для польского фондового рынка, поддерживающий только текстовые файлы для каждого из примерно 700 символов и обрабатываемый только с помощью grep, sed и awk, невероятно быстр - почти мгновенно, несмотря на тысячи циклов цикла эквивалентных скриптов - так что Ежедневная предмаркетная обработка моего программного обеспечения для обмена GPW выполняется за минуты, а не часы.