Article-20147-MQL5-Terminal.../Test_STARTED_FROM_CONFIG_2.mq5
2026-03-26 17:44:46 +07:00

76 lines
6.1 KiB
MQL5

//+------------------------------------------------------------------+
//| Test_STARTED_FROM_CONFIG_2.mq5 |
//| Copyright 2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#define SYMBOL "AUDUSD"
#define PERIOD PERIOD_H1
#define COUNT 10000
#define ATTEMPTS 3
#define WAIT 1000
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Объявим переменные и распечатаем в журнал способ запуска терминала
int err_code=0, received=0;
bool config_start=(bool)MQLInfoInteger(MQL_STARTED_FROM_CONFIG);
string text=(config_start ? "Started from config" : "Started manually");
Alert(StringFormat("MT5 Automation Test Script: %s",text));
//--- Если запуск из командной строки с конфигурационным файлом
if(config_start)
{
//--- В цикле по количеству ATTEMPTS попыток
for(int i=0;i<ATTEMPTS;i++)
{
//--- распечатаем в журнале номер попытки
PrintFormat("Receiving %s data. Attempt %d",SYMBOL,i+1);
//--- Получаем данные символа SYMBOL в количестве COUNT и сохраняем код возврата
//--- Если всё успешно - прерываем цикл, иначе - ждём WAIT секунд и повторяем
err_code=GetSymbolData(received);
//--- Распечатаем количество полученных данных
PrintFormat("Received: %d",received);
if(err_code==0)
break;
Print("...");
Sleep(WAIT);
}
Print("All attempts completed");
//--- По завершении всех попыток получения данных символа
//--- закрываем терминал с указанием кода возврата err_code
TerminalClose(err_code);
}
}
//+------------------------------------------------------------------+
//| Получает данные по символу SYMBOL в количестве COUNT |
//+------------------------------------------------------------------+
int GetSymbolData(int &data_received)
{
int err=0, copied=0;
double array[];
//--- Запрашиваем данные символа SYMBOL в количестве COUNT
ResetLastError();
copied=CopyClose(SYMBOL,PERIOD,0,COUNT,array);
err=GetLastError();
//--- Если количество скопированных данных не равно запрошенному
if(copied!=COUNT)
{
//--- Если нет ошибки, значит ещё не все данные получены.
//--- Укажем код ошибки ERR_HISTORY_NOT_FOUND
if(err==0)
err=ERR_HISTORY_NOT_FOUND;
PrintFormat("%s: CopyClose(%s, H1, 0 - %d) failed. Error %d",__FUNCTION__,SYMBOL,COUNT,err);
}
data_received=copied;
return err;
}
//+------------------------------------------------------------------+