MQL5Book/Scripts/p5/SeriesStats.mq5

61 lines
2.3 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:09:41 +02:00
//+------------------------------------------------------------------+
//| SeriesStats.mq5 |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property script_show_inputs
#include "..\..\Include\PRTF.mqh"
input string WorkSymbol = NULL; // Symbol (leave empty for current)
input ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT;
input int BarOffset = 0;
input int BarCount = 10000;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
MqlRates rates[];
double range = 0, move = 0;
PrintFormat("Requesting %d bars on %s %s",
BarCount, StringLen(WorkSymbol) > 0 ? WorkSymbol : _Symbol,
EnumToString(TimeFrame == PERIOD_CURRENT ? _Period : TimeFrame));
// request complete BarCount bars as MqlRates array
const int n = PRTF(CopyRates(WorkSymbol, TimeFrame, BarOffset, BarCount, rates));
if(n <= 0)
{
return; // exit on error (details are shown in log by PRTF)
}
for(int i = 0; i < n; ++i)
{
range += (rates[i].high - rates[i].low) / n;
move += (fmax(rates[i].open, rates[i].close) - fmin(rates[i].open, rates[i].close)) / n;
}
PrintFormat("Stats per bar: range=%f, movement=%f", range, move);
PrintFormat("Dates: %s - %s", TimeToString(rates[0].time), TimeToString(rates[n - 1].time));
/*
output example 1:
Requesting 10000 bars on EURUSD PERIOD_H1
CopyRates(WorkSymbol,TimeFrame,BarOffset,BarCount,rates)=10000 / ok
Stats per bar: range=0.001439, movement=0.000700
Dates: 2020.03.03 14:00 - 2021.10.11 17:00
output example 2 (hitting TERMINAL_MAXBARS limit (20000)):
Requesting 100000 bars on EURUSD PERIOD_H1
CopyRates(WorkSymbol,TimeFrame,BarOffset,BarCount,rates)=20018 / ok
Stats per bar: range=0.001280, movement=0.000621
Dates: 2018.07.19 15:00 - 2021.10.11 17:00
*/
}
//+------------------------------------------------------------------+