Как программно получить заполненные внутридневные данные FOREX?

Я искал данные о внутридневных котировках в реальном времени для основных валютных пар FOREX, заполненные до нескольких дней. Я хочу использовать его программно для Android или веб-приложения, поэтому веб-сервис в формате CSV или XML был бы идеальным.

Пока я нашел несколько веб-сайтов по запросу, таких как finam.ru. Но он на русском языке, и мне не удалось найти ни одного четко документированного источника по точному формату URL, как его получить.

Может ли кто-нибудь помочь мне, как это сделать?


person Joe Qi    schedule 25.05.2014    source источник


Ответы (1)


По адресу: http://www.finam.ru/analysis/profile041CA00007/ можно выберите данные для экспорта в csv.

Вы должны выбрать «Мировые валюты» (Международные валюты) в левом выпадающем списке, и вы можете выбрать валюту справа.

Затем вы нажимаете на кнопку и загружаете CSV-файл. Вот пример с минутными данными:

http://195.128.78.52/AUDCAD_140501_140526.txt?market=5&em=181410&code=AUDCAD&df=1&mf=4&yf=2014&dt=26&mt=4&yt=2014&p=2&f=AUDCAD_140501_140526&e=.txt&cn=AUDCAD&dtf=1&tmf=1&MSOR=0&mstime=on&mstimever=1&sep=1&sep2=1&datf=2&at=1

Я никогда не видел документации для него. Просто экспериментировал с датой и получил нужный период.

Вы можете добавить заголовок:Referer:http://www.finam.ru/analysis/profile2C4A000007/, чтобы получить тиковые данные. Код на C#, позволяющий обойти ограничения, находится в конце ответа.

По форме периоды следующие:

<select id="issuer-profile-export-period" name="p" style="width: 135px; display: none;">
<option value="1">тики</option> ticks
<option value="2">1 мин.</option> 1 minute
<option value="3">5 мин.</option> 5 minutes
<option value="4">10 мин.</option> 10 minutes
<option value="5">15 мин.</option> 15 minutes
<option value="6">30 мин.</option> 30 minutes
<option value="7" selected="selected">1 час</option> 1 hour
<option value="8">1 день</option> 1 day
<option value="9">1 неделя</option> 1 week
<option value="10">1 месяц</option> 1 month
</select>

mstimer=1 - время московское mstimer=0 - время не московское f - имя файла

Скорее всего, для смены валюты нужно менять ее в трех местах: em=(это коды из кода ниже), code=, cn=

Валюты:

<ul>
<li><a href="#" index="1" value="181410" class="">Aud/Cad</a></li>
<li><a href="#" index="2" value="181411" class="">Aud/Chf</a></li>
<li><a href="#" index="3" value="181418" class="">Aud/Dkk</a></li>
<li><a href="#" index="4" value="181408" class="">Aud/Jpy</a></li>
<li><a href="#" index="5" value="181417" class="hover">Aud/Nok</a></li>
<li><a href="#" index="6" value="181409" class="">Aud/Nzd</a></li>
<li><a href="#" index="7" value="181419">Aud/Sek</a></li>
<li><a href="#" index="8" value="181416">Aud/Sgd</a></li>
<li><a href="#" index="9" value="66699">Aud/Usd</a></li>
<li><a href="#" index="10" value="181389">Cad/Chf</a></li>
<li><a href="#" index="11" value="181390">Cad/Jpy</a></li>
<li><a href="#" index="12" value="181455">Cad/Usd</a></li>
<li><a href="#" index="13" value="181403">Chf/Dkk</a></li>
<li><a href="#" index="14" value="21084">Chf/Jpy</a></li>
<li><a href="#" index="15" value="181396">Chf/Sgd</a></li>
<li><a href="#" index="16" value="181454">Chf/Usd</a></li>
<li><a href="#" index="17" value="181402">Dkk/Usd</a></li>
<li><a href="#" index="18" value="181414">Eur/Aud</a></li>
<li><a href="#" index="19" value="176166">Eur/Byr</a></li>
<li><a href="#" index="20" value="181413">Eur/Cad</a></li>
<li><a href="#" index="21" value="106">Eur/Chf</a></li>
<li><a href="#" index="22" value="83226">Eur/Cny</a></li>
<li><a href="#" index="23" value="88">Eur/Gbp</a></li>
<li><a href="#" index="24" value="181407">Eur/Hkd</a></li>
<li><a href="#" index="25" value="181422">Eur/Huf</a></li>
<li><a href="#" index="26" value="84">Eur/Jpy</a></li>
<li><a href="#" index="27" value="176172">Eur/Kzt</a></li>
<li><a href="#" index="28" value="176177">Eur/Lvl</a></li>
<li><a href="#" index="29" value="176179">Eur/Mdl</a></li>
<li><a href="#" index="30" value="181401">Eur/Nok</a></li>
<li><a href="#" index="31" value="181415">Eur/Nzd</a></li>
<li><a href="#" index="32" value="66860">Eur/Rub</a></li>
<li><a href="#" index="33" value="181406">Eur/Sek</a></li>
<li><a href="#" index="34" value="181395">Eur/Sgd</a></li>
<li><a href="#" index="35" value="176174">Eur/Tjs</a></li>
<li><a href="#" index="36" value="176168">Eur/Uah</a></li>
<li><a href="#" index="37" value="83">Eur/Usd</a></li>
<li><a href="#" index="38" value="176170">Eur/Uzs</a></li>
<li><a href="#" index="39" value="181412">Gbp/Aud</a></li>
<li><a href="#" index="40" value="181388">Gbp/Cad</a></li>
<li><a href="#" index="41" value="181387">Gbp/Chf</a></li>
<li><a href="#" index="42" value="181386">Gbp/Jpy</a></li>
<li><a href="#" index="43" value="181400">Gbp/Nok</a></li>
<li><a href="#" index="44" value="181405">Gbp/Sek</a></li>
<li><a href="#" index="45" value="181394">Gbp/Sgd</a></li>
<li><a href="#" index="46" value="86">Gbp/Usd</a></li>
<li><a href="#" index="47" value="181420">Hkd/Usd</a></li>
<li><a href="#" index="48" value="181421">Huf/Usd</a></li>
<li><a href="#" index="49" value="181450">Jpy/Usd</a></li>
<li><a href="#" index="50" value="181385">Mxn/Usd</a></li>
<li><a href="#" index="51" value="181399">Nok/Usd</a></li>
<li><a href="#" index="52" value="181392">Nzd/Cad</a></li>
<li><a href="#" index="53" value="181391">Nzd/Jpy</a></li>
<li><a href="#" index="54" value="181398">Nzd/Sgd</a></li>
<li><a href="#" index="55" value="181425">Nzd/Usd</a></li>
<li><a href="#" index="56" value="181423">Pln/Usd</a></li>
<li><a href="#" index="57" value="176165">Rub/Eur</a></li>
<li><a href="#" index="58" value="176176">Rub/Lvl</a></li>
<li><a href="#" index="59" value="176164">Rub/Usd</a></li>
<li><a href="#" index="60" value="181404">Sek/Usd</a></li>
<li><a href="#" index="61" value="181397">Sgd/Jpy</a></li>
<li><a href="#" index="62" value="181393">Sgd/Usd</a></li>
<li><a href="#" index="63" value="176167">Usd/Byr</a></li>
<li><a href="#" index="64" value="66700">Usd/Cad</a></li>
<li><a href="#" index="65" value="85">Usd/Chf</a></li>
<li><a href="#" index="66" value="83225">Usd/Cny</a></li>
<li><a href="#" index="67" value="82">Usd/Dem</a></li>
<li><a href="#" index="68" value="182106">Usd/Idr</a></li>
<li><a href="#" index="69" value="181873">Usd/Inr</a></li>
<li><a href="#" index="70" value="87">Usd/Jpy</a></li>
<li><a href="#" index="71" value="176173">Usd/Kzt</a></li>
<li><a href="#" index="72" value="176178">Usd/Lvl</a></li>
<li><a href="#" index="73" value="176180">Usd/Mdl</a></li>
<li><a href="#" index="74" value="901">Usd/Rub</a></li>
<li><a href="#" index="75" value="176175">Usd/Tjs</a></li>
<li><a href="#" index="76" value="176169">Usd/Uah</a></li>
<li><a href="#" index="77" value="176171">Usd/Uzs</a></li>
<li><a href="#" index="78" value="181426">Xag</a></li>
<li><a href="#" index="79" value="181427">Xau</a></li>
<li><a href="#" index="80" value="181424">Zar/Usd</a></li></ul>

Единственная разница в запросах, обходящих ограничения и не обходящих, заключается в заголовке: «Referer:http://www.finam.ru/analysis/profile2C4A000007/"

Вот ссылка на тиковые данные

http://195.128.78.52/AUDJPY_140526_140526.txt?market=5&em=181408&code=AUDJPY&df=26&mf=4&yf=2014&dt=26&mt=4&yt=2014&p=1&f=AUDJPY_140526_140526&e=.txt&cn=AUDJPY&dtf=1&tmf=1&MSOR=0&mstime=on&mstimever=1&sep=1&sep2=1&datf=6&at=1

Вот заголовки исходного запроса, который работал:

Remote Address:195.128.78.52:80
Request URL:http://195.128.78.52/AUDJPY_140526_140526.txt?market=5&em=181408&code=AUDJPY&df=26&mf=4&yf=2014&dt=26&mt=4&yt=2014&p=1&f=AUDJPY_140526_140526&e=.txt&cn=AUDJPY&dtf=1&tmf=1&MSOR=0&mstime=on&mstimever=1&sep=1&sep2=1&datf=6&at=1
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,it;q=0.2
Connection:keep-alive
Host:195.128.78.52
Referer:http://www.finam.ru/analysis/profile2C4A000007/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36

Вот заголовки запроса, который не сработал:

Remote Address:195.128.78.52:80
Request URL:http://195.128.78.52/AUDJPY_140526_140526.txt?market=5&em=181408&code=AUDJPY&df=26&mf=4&yf=2014&dt=26&mt=4&yt=2014&p=1&f=AUDJPY_140526_140526&e=.txt&cn=AUDJPY&dtf=1&tmf=1&MSOR=0&mstime=on&mstimever=1&sep=1&sep2=1&datf=6&at=1
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,it;q=0.2
Connection:keep-alive
Host:195.128.78.52
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36

Код для обхода ограничений и получения тиковых данных:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new WebClient();
            client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36");
            client.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,it;q=0.2");
            client.Headers.Add("Referer", "http://www.finam.ru/analysis/profile2C4A000007/");


            string url = "http://195.128.78.52/AUDJPY_140526_140526.txt?market=5&em=181408&code=AUDJPY&df=26&mf=4&yf=2014&dt=26&mt=4&yt=2014&p=1&f=AUDJPY_140526_140526&e=.txt&cn=AUDJPY&dtf=1&tmf=1&MSOR=0&mstime=on&mstimever=1&sep=1&sep2=1&datf=6&at=1";
            string htmlString = client.DownloadString(url);

            Console.WriteLine(htmlString);
            Console.ReadLine();
        }
    }
}
person keiv.fly    schedule 25.05.2014
comment
Спасибо за быстрый ответ. Однако, когда я вставил вашу ссылку в браузер, он загрузил Cadjpy_140516_140525.tx - person Joe Qi; 26.05.2014
comment
Более того, я не могу написать программу для взаимодействия с веб-формами finam. Мне понадобится URL-адрес со строками запроса, как в примере, который вы мне дали. Хотя это не сработало, если это сработает, не могли бы вы объяснить различные параметры, переданные в строку URL, чтобы я мог создать свой собственный запрос? - person Joe Qi; 26.05.2014
comment
Автоматическая (Download-менеджеры и программы собственного изготовления) загрузка тиковых данных недоступна Автоматическая (менеджерами загрузок и собственными программами) загрузка тиковых данных запрещена - person keiv.fly; 26.05.2014
comment
Это означает, что он где-то проверяет, получили ли вы файл из формы или нет. - person keiv.fly; 26.05.2014
comment
Я изменил ссылку на 195.128.78.52/ Это почасовые данные и, вероятно, могут работать, так как не хотели давать галочку данные. - person keiv.fly; 26.05.2014
comment
Спасибо. Ссылка заработала. Однако у меня уже есть часовые данные. Я не мог понять, просто взглянув на ссылку, как получить минутные данные, чего я действительно хочу. Спасибо. - person Joe Qi; 26.05.2014
comment
Я загрузил ссылку с минутами. Я также попытался расшифровать некоторые поля. - person keiv.fly; 26.05.2014
comment
Я все еще не могу надежно получить данные. Предоставленный вами URL-адрес, по-видимому, исправлен для предоставления данных с 2014-5-1 по 2014-5-26. Когда я меняю параметры, он по-прежнему возвращает тот же диапазон данных. - person Joe Qi; 03.07.2014
comment
Я предполагаю, что мой вопрос таков: как вы получаете 1-минутные, 5-минутные, 10-минутные ценовые бары за последние X дней, где X может быть 1, 2, 3, .. 10? - person Joe Qi; 03.07.2014