//+------------------------------------------------------------------+
//| KobRequisites.mq5 |
//| Copyright 2020, Jordi Llonch |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Jordi Llonch"
#property link "https://www.mql5.com"
#property version "1.00"
#property description "This script automates EURUSD bars and ticks download for the correct execution of Kiss on Billions on EURUSD."
#property description "It is required to run in a EURUSD chart"
#property script_show_inputs
/*
This script downloads bars and ticks required for the correct
execution of "Kiss on Billions on EURUSD" EA from Saeid Irani.
*/
//--- input parameters
input datetime StartDate = D'2018.01.01 00:00:00'; //Retrieve data since
input int getticks = 100000000; // The number of required ticks
input group "In case of error..."
input int retries = 3; //Retry attempts
input int retrypause = 1000; //Delay between retries in Milliseconds
ENUM_TIMEFRAMES timeframes[] = {
PERIOD_M1,
PERIOD_M5,
PERIOD_M15,
PERIOD_M30,
PERIOD_H1,
PERIOD_H4,
PERIOD_D1,
PERIOD_MN1
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart() {
//---
int attempt = 0; // Count of attempts
bool success = false; // The flag of a successful copying of ticks
MqlTick ticks[]; // Tick receiving array
MqlTick lasttick; // To receive last tick data
//--- Receive bars with retry
for (int i = 0; i < ArraySize(timeframes); i++) {
attempt = 0;
while(attempt < retries) {
ResetLastError();
Bars(Symbol(), timeframes[i], StartDate, TimeCurrent());
if(GetLastError() == 0) {
success = true;
break;
}
PrintFormat("%s: downloading bars:attempt %d/%d:error code:%d",
Symbol(), attempt, retries, _LastError);
attempt++;
Sleep(retrypause);
}
}
if(!success) {
PrintFormat("Error! Failed to receive bars of %s", Symbol());
Alert("Error! " + (string)_LastError + " retrieving bars for " + Symbol());
return;
}
attempt = 0;
//--- Make 3 attempts to receive ticks
while(attempt < retries) {
SymbolInfoTick(Symbol(), lasttick);
//--- Measuring start time before receiving the ticks
uint start = GetTickCount();
//--- Requesting the tick history since StartDate (parameter from=1 ms)
ResetLastError();
int received = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, 1, getticks);
if(received != -1) {
//--- Showing information about the number of ticks and spent time
PrintFormat("%s: received %d ticks in %d ms", Symbol(), received, GetTickCount() - start);
//--- If the tick history is synchronized, the error code is equal to zero
if(GetLastError() == 0) {
success = true;
break;
}
PrintFormat("%s: ticks are not synchronized yet, %d ticks received for %d ms. Error=%d",
Symbol(), received, GetTickCount() - start, _LastError);
}
//--- Counting attempts
attempt++;
//--- A retrypause pause to wait for the end of synchronization of the tick database
Sleep(retrypause);
}
//--- Receiving the requested ticks from the beginning of the tick history failed after attempts
if(!success) {
PrintFormat("Error! Failed to receive %d ticks of %s",
getticks, Symbol());
Alert("Error! " + (string)_LastError + " retrieving ticks for " + Symbol());
return;
}
Alert("Bars and Ticks succesfully downloaded.");
}
//+------------------------------------------------------------------+
Comments