Rejoignez notre page de fans
Benchmark - bibliothèque pour MetaTrader 5
- Vues:
- 3226
- Note:
- Publié:
- 2023.04.17 19:24
- Mise à jour:
- 2023.04.27 08:59
- Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur 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 */
Close trades when the percentage profit or risk of the account is reached
Tick Speed IndicatorThis 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.
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 MT5This 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.