Watch how to download trading robots for free
Find us on Facebook!
Join our fan page
Interesting script?
So post a link to it -
let others appraise it
You liked the script? Try it in the MetaTrader 5 terminal
Libraries

Benchmark - library for MetaTrader 5

Views:
2584
Rating:
(14)
Published:
2023.04.17 19:24
Updated:
2023.04.27 08:59
\MQL5\Include\Benchmark\
Benchmark.mqh (9.43 KB) view
Stopwatch.mqh (11.37 KB) view
\MQL5\Scripts\
Need a robot or indicator based on this code? Order it on Freelance Go to Freelance

The include file "Benchmark.mqh" has a set of macros to benchmark various functions for their execution speeds to decide which is the fastest one.

//+------------------------------------------------------------------+
//| Macro to measure the execution time a function.                  |
//| Prints the elapsed time in microseconds per call (µsec/call).    |
//| TimeIt(sum += ArrayBsearch(arr, value));                         |
//+------------------------------------------------------------------+
#define TimeIt(func_invocation)


//+------------------------------------------------------------------+
//| Macro to execute a function for a fixed number of times.         |
//| Prints the elapsed time in milliseconds (msec).                  |
//| Benchmark(repeats, sum += ArrayBsearch(arr, value));             |
//+------------------------------------------------------------------+
#define Benchmark(repeats, func_invocation)


//+------------------------------------------------------------------+
//| Macro to execute a function for a fixed duration in msec.        |
//| Prints the number of operations per second (ops/sec).            |
//| Benchmark_opsec(msec, sum += ArrayBsearch(arr, value));          |
//+------------------------------------------------------------------+
#define Benchmark_opsec(msec, func_invocation)


The library is based on public source codes of timeit module in python https://docs.python.org/3/library/timeit.html and Stopwatch Class from C# https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.stopwatch 


Here is an example script for usage:

//+------------------------------------------------------------------+
//|                                               benchmark_test.mq5 |
//|                                        Copyright © 2018, Amr Ali |
//|                             https://www.mql5.com/en/users/amrali |
//+------------------------------------------------------------------+
#include <Benchmark\Benchmark.mqh>

//+------------------------------------------------------------------+
//| The function returns integer numeric value closest from below.   |
//+------------------------------------------------------------------+
double FastFloor(const double v)
  {
   double k = (double)(long)v;
   return k - (v < k);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart(void)
  {
   int repeats = 1e8;
   Print("repeats=",repeats);

//--- if result of the expression is not used, compiler optimizes out
//--- (i.e., ignores) the function call.
   double sum = 0;

   Benchmark(repeats, sum += MathFloor(__i));
   Benchmark(repeats, sum += FastFloor(__i));

   Print("sum=",sum);
  }
//+------------------------------------------------------------------+

// sample output:
/*
 repeats=100000000
 sum+=MathFloor(__i) -> 599 msec
 sum+=FastFloor(__i) -> 138 msec
 sum=9999999922280040.0
*/
    Money Management Money Management

    Close trades when the percentage profit or risk of the account is reached

    Tick Speed Indicator Tick Speed Indicator

    This example was created to see how long it takes to reach 100 ticks. So this indicator is a seconds / "centick" (centick = 100 ticks). It helps you trade orders flow.

    Volume Average Groups For Comparison Volume Average Groups For Comparison

    Learn how to split the volume data into different groups so that you can compare them and create a strategy based on volume average.

    ChartButton Class MT5 ChartButton Class MT5

    This class allows you to create buttons on the chart as if they were chart objects(have time and price coordinates) these objects can be dragged on the chart and when scrolling they stay at the same place. If you wan't to learn some Object Oriented Programming or if you wan't to understand how chartevents work or you wan't to create graphical interfaces, you can learn a lot from this.