111 lines
4.0 KiB
Plaintext
111 lines
4.0 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| 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.");
|
|
}
|
|
//+------------------------------------------------------------------+
|