Экспорт данных из Financial Times

Я новичок в Matlab и в настоящее время работаю над экспортом финансовых данных с веб-сайта Financial Times. Я хотел бы знать, как я могу получить, например, информацию о прогнозе цен акций с этой страницы

http://markets.ft.com/research/Markets/Tearsheets/Forecasts?s=DIS:NYQ

High    +34.7 % 85.00
Med     +15.7 % 73.00
Low      -9.6 % 57.00

И сохраните эту информацию как переменную.


person Claude Monet    schedule 03.06.2013    source источник
comment
Только эти шесть цифр? Вручную или автоматически?   -  person Rody Oldenhuis    schedule 03.06.2013
comment
автоматически, потому что было бы так здорово, если бы я мог прочитать список тикеров в строке AssetList, а затем автоматически применить этот алгоритм ко всем акциям в этом списке, а затем создать переменные, которые затем можно было бы использовать для анализа. Спасибо   -  person Claude Monet    schedule 03.06.2013
comment
Возможно, отказаться от Matlab и использовать quantmod R: quantmod.com. Также есть торговый инструментарий Matlab.   -  person Bull    schedule 03.06.2013
comment
Вы уверены, что хотите очистить этот конкретный сайт? Существует множество веб-API для загрузки рыночных данных практически в реальном времени в облегченных форматах, например CSV, XML, JSON и т. д. Например, это и это. Они в сочетании с urlread Matlab могут работать. Что касается urlread, обязательно прочитайте это.   -  person horchler    schedule 03.06.2013


Ответы (1)


Вот простое решение с использованием urlread и regexpi:

% Create URL string and read in HTML
ftbaseurl = 'http://markets.ft.com/research/Markets/Tearsheets/Forecasts?s=';
ticksym = 'DIS:NYQ';
s = urlread([ftbaseurl ticksym]);

% Create pattern string for regular expression matching
trspan = '<tr><td class="text"><span class="';
tdspan1 = '</span></td><td><span class="\w\w\w color ">'; % \w\w\w matchs pos or neg
matchstr1 = '(?<percent>[\+|\-]*\d+.\d+)'; % percent: match (+or-)(1+ digits).(1+ digits)
tdspan2 = ' %</span></td><td>';
matchstr2 = '(?<price>\d+\.\d\d)</td></tr>'; % price: match (1+ digits) . 2 digits
pat = [trspan 'high">High' tdspan1 matchstr1 tdspan2 matchstr2 '|' ...
       trspan 'med">Med' tdspan1 matchstr1 tdspan2 matchstr2 '|' ...
       trspan 'low">Low' tdspan1 matchstr1 tdspan2 matchstr2];

% Match patterns in HTML, case insensitive, put results in struct array
forecasts = regexpi(s,pat,'names');

В результате получается массив структур 1 на 3, где каждый элемент имеет два поля, 'percent' и 'price', каждое из которых содержит строки, извлеченные анализатором регулярных выражений. Например

>> forecasts(3)

ans = percent: '-10.3'
        price: '57.00'

>> str2double(forecasts(3).percent)

-10.3000

Я оставлю вам преобразование строк в числа (обратите внимание, что финансовое программное обеспечение обычно хранит цены в целых центах (или в любом другом наименьшем номинале), а не в долларах с плавающей запятой во избежание проблем с числами) и превратить это в общую функцию. Вот дополнительная информация о регулярных выражениях в Matlab.

Мой комментарий выше остается в силе. Это очень неэффективно. Вы загружаете весь HTML-код веб-страницы и анализируете его, чтобы найти несколько небольших фрагментов данных. Это нормально, если это не обновляется очень часто или если вам не нужно, чтобы это было очень быстро. Кроме того, эта схема является хрупкой. Если Financial Times обновит свой веб-сайт, код может быть взломан. И если вы пытаетесь очень часто загружать их обычные веб-страницы, они также могут заблокировать вас.

person horchler    schedule 03.06.2013
comment
Спасибо, Хорхлер! Но есть ли возможность использовать Markit Data API в матлабе? Я знаю, что FT использует все данные оттуда. - person Claude Monet; 04.06.2013
comment
См. это. Я думаю, вам просто нужно создать правильную строку URL для того, что вы хотите, сделать urlread этой строки, а затем проанализировать результат (с помощью regexp, синтаксического анализатора XML и т. д.). Я понятия не имею, поддерживают ли они прогнозные данные, которые вы привели в качестве примера. У меня нет реального опыта в этом. - person horchler; 04.06.2013
comment
Спасибо за помощь. Я попробую. - person Claude Monet; 04.06.2013