forked from rosh/MQL5Book
75 lines
3.8 KiB
MQL5
75 lines
3.8 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| SeriesCopy.mq5 |
| |
//| Copyright 2021, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#include "..\..\Include\PRTF.mqh"
| |
| |
// The macro provides more convenient datetime output without seconds
| |
#define ArrayPrintM(A) \
| |
ArrayPrint(A, _Digits, NULL, 0, -1, \
| |
ARRAYPRINT_INDEX | ARRAYPRINT_DATE | ARRAYPRINT_MINUTES)
| |
| |
//+------------------------------------------------------------------+
| |
//| Script program start function |
| |
//+------------------------------------------------------------------+
| |
void OnStart()
| |
{
| |
// Define the array to receive requested data
| |
datetime times[];
| |
| |
Print(""); // separator line
| |
| |
// Request 10 bars from 5-th of September and earlier
| |
// because it's Sunday, we'll get bars for Friday
| |
PRTF(CopyTime("EURUSD", PERIOD_H1, D'2021.09.05', 10, times));
| |
ArrayPrintM(times);
| |
PRTF(ArraySetAsSeries(times, true)); // switch to timeseries order
| |
ArrayPrintM(times);
| |
PRTF(ArraySetAsSeries(times, false)); // restore default ordering mode
| |
| |
// Request some bars (we can't be sure that all H1 bars exist in the range)
| |
// between 2 timestamps, and do it in 2 ways:
| |
// first - from future to past, second - from past to future
| |
// both results will be the same FROM TO
| |
PRTF(CopyTime("EURUSD", PERIOD_H1, D'2021.09.06 03:00', D'2021.09.05 03:00', times));
| |
ArrayPrintM(times); // FROM TO
| |
PRTF(CopyTime("EURUSD", PERIOD_H1, D'2021.09.05 03:00', D'2021.09.06 03:00', times));
| |
ArrayPrintM(times);
| |
// Change direction of indexing
| |
PRTF(ArraySetAsSeries(times, true));
| |
ArrayPrintM(times);
| |
// Despite the fact that 2 timestamps define 24-hour range,
| |
// the function will return 4 bars, not 25 (25 is expected because FROM/TO are both included)
| |
// This is because 5-th of September is Sunday,
| |
// so only early morning of September 6-th is counted
| |
| |
// Also note that the array was shrinked to 4 elements from 10
| |
| |
// Request 10 bars from 100-th bar
| |
PRTF(CopyTime("EURUSD", PERIOD_H1, 100, 10, times));
| |
// Remember the array is still in timeseries mode
| |
ArrayPrintM(times);
| |
}
| |
//+------------------------------------------------------------------+
| |
/*
| |
example output
| |
| |
CopyTime(EURUSD,PERIOD_H1,D'2021.09.05',10,times)=10 / ok
| |
[0] 2021.09.03 14:00 2021.09.03 15:00 2021.09.03 16:00 2021.09.03 17:00 2021.09.03 18:00
| |
[5] 2021.09.03 19:00 2021.09.03 20:00 2021.09.03 21:00 2021.09.03 22:00 2021.09.03 23:00
| |
ArraySetAsSeries(times,true)=true / ok
| |
[0] 2021.09.03 23:00 2021.09.03 22:00 2021.09.03 21:00 2021.09.03 20:00 2021.09.03 19:00
| |
[5] 2021.09.03 18:00 2021.09.03 17:00 2021.09.03 16:00 2021.09.03 15:00 2021.09.03 14:00
| |
ArraySetAsSeries(times,false)=true / ok
| |
CopyTime(EURUSD,PERIOD_H1,D'2021.09.06 03:00',D'2021.09.05 03:00',times)=4 / ok
| |
2021.09.06 00:00 2021.09.06 01:00 2021.09.06 02:00 2021.09.06 03:00
| |
CopyTime(EURUSD,PERIOD_H1,D'2021.09.05 03:00',D'2021.09.06 03:00',times)=4 / ok
| |
2021.09.06 00:00 2021.09.06 01:00 2021.09.06 02:00 2021.09.06 03:00
| |
ArraySetAsSeries(times,true)=true / ok
| |
2021.09.06 03:00 2021.09.06 02:00 2021.09.06 01:00 2021.09.06 00:00
| |
CopyTime(EURUSD,PERIOD_H1,100,10,times)=10 / ok
| |
[0] 2021.10.04 19:00 2021.10.04 18:00 2021.10.04 17:00 2021.10.04 16:00 2021.10.04 15:00
| |
[5] 2021.10.04 14:00 2021.10.04 13:00 2021.10.04 12:00 2021.10.04 11:00 2021.10.04 10:00
| |
*/
| |
//+------------------------------------------------------------------+
|