forked from airat77786/MQL5Book
58 lines
2.3 KiB
MQL5
58 lines
2.3 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| QuoteRefresh.mqh |
| |||
//| Copyright (c) 2021, Marketeer |
| |||
//+------------------------------------------------------------------+
| |||
#ifndef PRTF
| |||
#define PRTF
| |||
#endif
| |||
//+----------------------------------------------------------------------+
| |||
//| Helper function to ensure data is downloaded and timeseries is built |
| |||
//+----------------------------------------------------------------------+
| |||
bool QuoteRefresh(const string asset, const ENUM_TIMEFRAMES period, const datetime start)
| |||
{
| |||
if(MQL5InfoInteger(MQL5_PROGRAM_TYPE) == PROGRAM_INDICATOR
| |||
&& _Symbol == asset && _Period == period)
| |||
{
| |||
return (bool)SeriesInfoInteger(asset, period, SERIES_SYNCHRONIZED);
| |||
}
| |||
| |||
if(Bars(asset, period) >= TerminalInfoInteger(TERMINAL_MAXBARS))
| |||
{
| |||
return (bool)SeriesInfoInteger(asset, period, SERIES_SYNCHRONIZED);
| |||
}
| |||
| |||
datetime times[1];
| |||
datetime first = 0, server = 0;
| |||
if(PRTF(SeriesInfoInteger(asset, period, SERIES_FIRSTDATE, first)))
| |||
{
| |||
if(first > 0 && first <= start)
| |||
{
| |||
// applied data is present, it's already or going to be synchronized
| |||
return (bool)SeriesInfoInteger(asset, period, SERIES_SYNCHRONIZED);
| |||
}
| |||
else
| |||
if(PRTF(SeriesInfoInteger(asset, period, SERIES_TERMINAL_FIRSTDATE, first)))
| |||
{
| |||
if(first > 0 && first <= start)
| |||
{
| |||
// raw data is present in the terminal base, need to build timeseries
| |||
return PRTF(CopyTime(asset, period, first, 1, times)) == 1;
| |||
}
| |||
else
| |||
{
| |||
if(PRTF(SeriesInfoInteger(asset, period, SERIES_SERVER_FIRSTDATE, server)))
| |||
{
| |||
// raw data is present on the server, need to request it
| |||
if(first > 0 && first < server)
| |||
PrintFormat("Warning: %s first date %s on server is less than on terminal ",
| |||
asset, TimeToString(server), TimeToString(first));
| |||
// can't request more than the server has
| |||
return PRTF(CopyTime(asset, period, fmax(start, server), 1, times)) == 1;
| |||
}
| |||
}
| |||
}
| |||
}
| |||
| |||
return false;
| |||
}
| |||
//+----------------------------------------------------------------------+
|