Я использую этот URL
для получения контента с веб-сайта Quandl:
https://www.quandl.com/api/v3/datasets/FRED/PAYEMS.csv?exclude_column_names=true&rows=1&api_key=my_api_key
Сервер Quandl возвращает в ответ на вышеуказанный запрос следующее значение:
2016-08-01, 144598.0
Мне нужно использовать значение 144598.0
в пределах MQL4
Script
, поэтому:
Q1. Как получить содержимое по указанному выше URL-адресу для использования в MQL4
скрипте?
Очень полезный пользователь из SO (https://stackoverflow.com/users/3666197/user3666197
) предоставил следующее script
(оригинал находится по адресу MQL4: Чтение одного значения из CSV) (несколько частей добавлено мной), чтобы помочь мне в этом, однако я не смог заставить его работать:
// Code created with the help of Stack Overflow question
// https://stackoverflow.com/questions/39279634/mql4-read-single-value-from-csv/39284875#39284875
// Question by p.luck:
// https://stackoverflow.com/users/5551849/p-luck
// Answer by user3666197:
// https://stackoverflow.com/users/3666197/user3666197
void OnStart()
{
string cookie = NULL,
headers;
char post[],
result[];
int res;
/* TODO: *
* Must allow MT4 to access the server URL, *
* you should add URL "https://www.quandl.com/api/v3/datasets/FRED/PAYEMS.csv" *
* in the list of allowed URLs *
* ( MT4 -> Tools -> Options -> [Tab]: "Expert Advisors" ): */
string aDataSOURCE_URL = "https://www.quandl.com/api/v3/datasets/FRED/PAYEMS.csv";
string aDataSOURCE_API = "?exclude_column_names=true&rows=1&api_key=my_api_key";
//-- Create the body of the POST request for API specifications and API-authorization
ArrayResize( post,
StringToCharArray( aDataSOURCE_API, // string text |--> [in] String to copy.
post, // uchar &array[] <--| [out] Array of uchar type.
0, // int start = 0 |--> [in] Position from which copying starts. Default - 0.
WHOLE_ARRAY, // int count = -1 |--> [in] Number of array elements to copy. Defines length of a resulting string. Default value is -1, which means copying up to the array end, or till terminating '\0'. Terminating zero will also be copied to the recipient array, in this case the size of a dynamic array can be increased if necessary to the size of the string. If the size of the dynamic array exceeds the length of the string, the size of the array will not be reduced.
CP_UTF8 // uint cp = CP_ACP |--> [in] The value of the code page. For the most-used code pages provide appropriate constants.
)
- 1
);
//-- Reset the last error code
ResetLastError();
//-- Loading a html page from Quandl
int timeout = 5000; //-- Timeout below 1000 (1 sec.) is not enough for slow Internet connection
res = WebRequest( "POST", // const string method |--> [in] HTTP method.
aDataSOURCE_URL, // const string URL |--> [in] URL.
cookie, // const string cookie |--> [in] Cookie value.
NULL, // const string referrer |--> [in] Value of the Referer header of the HTTP request.
timeout, // int timeout |--> [in] Timeout in milliseconds.
post, // const char &data |--> [in] Data array of the HTTP message body
ArraySize( post ), // int data_size |--> [in] Size of the data[] array.
result, // char &result <--| [out] An array containing server response data.
headers // string &result_headers <--| [out] Server response headers.
);
//-- Check errors
if ( res == -1 )
{ Print( "WebRequest Error. Error code = ", GetLastError() ); //-- Perhaps the URL is not listed, display a message about the necessity to add the address
MessageBox( "Add the address '" + aDataSOURCE_URL + "' in the list of allowed URLs on tab 'Expert Advisors'", "Error", MB_ICONINFORMATION );
}
else //-- Load was successfull
{
PrintFormat( "The data has been successfully loaded, size = %d bytes.", ArraySize( result ) );
//-- parse the content ---------------------------------------
/*
"2016-08-01, 144598.0"
*/
//-- consume the content -------------------------------------
//...
}
}
Я добавил URL
изhttps://www.quandl.com/api/v3/datasets/FRED/PAYEMS.csv
в список allowed URLs
из MT4
.
Если я включаю AutoTrading
и перетаскиваю script
с именем (tutorial7
) на chart
из USDCAD,M1
,
я получаю следующие сообщения в пределах Experts
tab
:
Script tutorial7 USDCAD,M1: loaded successfuly
tutorial7 USDCAD,M1: initialized
tutorial7 USDCAD,M1: The data has been successfully loaded, size = 0 bytes
tutorial7 USDCAD,M1: uninit reason 0
Ведь если "The data has successfully loaded
", то не должно быть "size = 0 bytes
"?
Должен ли этот script
работать правильно, если я просто скопирую и вставлю его прямо в MetaQuotes Language Editor
и compile
?
Помимо добавления URL
к allowed URLs
в MT4
и копирования и вставки этого кода в script
, есть ли что-нибудь еще, что я должен сделать?
Если да, то как?
Я запускаю приведенный выше код как Script
не как Expert Advisor
; это нормально?
Вопрос 2. Могу ли я установить полученное значение 144598,0 в качестве переменной в моем скрипте?
Мне нужно сделать value
из 144598.0
переменной, чтобы ее можно было сравнить с другим value
.
Будет ли что-то вроде этой работы:
void OnStart()
{
... // above code which fetches the value from the .csv URL
double x = 155876.0 // value manually typed in
y = 144598.0 // value fetched from the .csv URL using the above code
// ignores column 1 consisting of 2016-08-01
if ( x > y ) {
// execute code
}
else {
// execute other code
}
}