Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

High-Performance Time Functions (TimeUtils) - biblioteca para MetaTrader 5

Visualizações:
32
Avaliação:
(11)
Publicado:
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Essa biblioteca contém mais de 80 funções diferentes para lidar com variáveis de tempo. O objetivo principal é fornecer funções de tempo de alto desempenho. O modo de desempenho (que pode ser controlado no momento da compilação por meio de uma #definição) é desativado por padrão. Esse modo não é um requisito para incluir a biblioteca em seus projetos, pois ela pode ser incluída normalmente sem ele.


TIMEUTILS_PERFORMANCE_MODE

Opcionalmente, o modo de desempenho pode ser ativado no momento da compilação por meio de #defines antes de #include:

// ativar o modo de desempenho para a biblioteca
#define  TIMEUTILS_PERFORMANCE_MODE
#include "TimeUtils.mqh"

Isso redirecionará todas as chamadas para as funções TimeToStruct e StructToTime incorporadas do MQL para alternativas mais eficientes.

Você pode compilar o script "performance_mode.mq5" com e sem TIMEUTILS_PERFORMANCE_MODE para verificar a diferença de velocidade em seu computador. Isso será benéfico para os programas de alto desempenho que executam tarefas pesadas ou relacionadas ao tempo (por exemplo, varredura de todo o histórico de cotações para barras H1 no início das semanas de negociação ou coleta de outras estatísticas).


Listagem de todas as funções da biblioteca:

Os nomes das funções devem ser autoexplicativos; além disso, você pode encontrar uma breve descrição de uma função específica no arquivo TimeUtils.mqh.

//+==================================================================+
//| Criar datetime a partir de componentes|
//+==================================================================+
datetime CreateDateTime(
   const int year,           // Ano
   const int mon,            // Mês
   const int day,            // Dia
   const int hour = 0,       // Hora
   const int min = 0,        // Minutos
   const int sec = 0         // Segundos
   )
datetime CreateDateTime(MqlDateTime&  dt_struct);  // alternativa rápida para StructToTime()

//+==================================================================+
//| Quebrar datetime para componentes|
//+==================================================================+
bool TimeToStructFast(
   datetime      dt,         // Valor de data a ser convertido
   MqlDateTime&  dt_struct   // estrutura para a adoção de valores
   )

//+==================================================================+
//| Extrair componentes de datetime: Sunday, yyyy.mm.dd hh:mm:ss |
//| Unidades Get()|
//+==================================================================+
int GetSecond(datetime t)
int GetMinute(datetime t)
int GetHour(datetime t)
int GetDay(datetime t)
int GetMonth(datetime t)
int GetYear(datetime t)

//+==================================================================+
//| Day() Número|
//+==================================================================+
int DayOfWeek(datetime t)
int DayOfYear(datetime t)
int DayIndex(datetime t)

//+==================================================================+
//| Week() Número|
//+==================================================================+
int WeekOfMonth(const datetime t, bool StartsOnMonday = false)
int WeekOfYear(const datetime t, bool StartsOnMonday = false)
int WeekIndex(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| Unidades StartOf()|
//+==================================================================+
datetime StartOfMinute(datetime t)
datetime StartOfHour(datetime t)
datetime StartOfDay(datetime t)
datetime StartOfWeek(datetime t, bool StartsOnMonday = false)
datetime StartOfMonth(datetime t)
datetime StartOfYear(datetime t)

//+==================================================================+
//| Unidades EndOf()|
//+==================================================================+
datetime EndOfMinute(datetime t)
datetime EndOfHour(datetime t)
datetime EndOfDay(datetime t)
datetime EndOfWeek(datetime t, bool StartsOnMonday = false)
datetime EndOfMonth(datetime t)
datetime EndOfYear(datetime t)

//+==================================================================+
//| Unidades SecsElapsedOf()|
//+==================================================================+
int SecsElapsedOfMinute(datetime t)
int SecsElapsedOfHour(datetime t)
int SecsElapsedOfDay(datetime t)
int SecsElapsedOfWeek(datetime t, bool StartsOnMonday = false)
int SecsElapsedOfMonth(datetime t)
int SecsElapsedOfYear(datetime t)

//+==================================================================+
//| Unidades RoundTo() / Nearest()|
//+==================================================================+
datetime RoundToMinute(datetime t)
datetime RoundToHour(datetime t)
datetime RoundToDay(datetime t)
datetime RoundToWeek(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| Unidades CeilTo() / Next()|
//+==================================================================+
datetime CeilToMinute(datetime t)
datetime CeilToHour(datetime t)
datetime CeilToDay(datetime t)
datetime CeilToWeek(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| Next() Dia da semana|
//+==================================================================+
datetime NextWeekday(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime NextSunday(datetime t)
datetime NextMonday(datetime t)
datetime NextTuesday(datetime t)
datetime NextWednesday(datetime t)
datetime NextThursday(datetime t)
datetime NextFriday(datetime t)
datetime NextSaturday(datetime t)

//+==================================================================+
//| Anterior() Dia da semana|
//+==================================================================+
datetime PreviousWeekday(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime PreviousSunday(datetime t)
datetime PreviousMonday(datetime t)
datetime PreviousTuesday(datetime t)
datetime PreviousWednesday(datetime t)
datetime PreviousThursday(datetime t)
datetime PreviousFriday(datetime t)
datetime PreviousSaturday(datetime t)

//+==================================================================+
//| Nth() Dia da semana do mês|
//+==================================================================+
datetime FirstWeekdayOfTheMonth(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime LastWeekdayOfTheMonth(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime NthWeekdayOfTheMonth(datetime t, int Nth, ENUM_DAY_OF_WEEK weekday = SUNDAY)

//+==================================================================+
//| Unidades Add()|
//+==================================================================+
datetime AddSeconds(datetime t, int amount)
datetime AddMinutes(datetime t, int amount)
datetime AddHours(datetime t, int amount)
datetime AddDays(datetime t, int amount)
datetime AddBusinessDays(datetime t, int amount)
datetime AddWeeks(datetime t, int amount)
datetime AddMonths(datetime t, int amount)
datetime AddYears(datetime t, int amount)

//+==================================================================+
Unidades //| Sub()|
//+==================================================================+
datetime SubSeconds(datetime t, int amount)
datetime SubMinutes(datetime t, int amount)
datetime SubHours(datetime t, int amount)
datetime SubDays(datetime t, int amount)
datetime SubBusinessDays(datetime t, int amount)
datetime SubWeeks(datetime t, int amount)
datetime SubMonths(datetime t, int amount)
datetime SubYears(datetime t, int amount)

//+==================================================================+
//| Unidades DifferenceIn()|
//+==================================================================+
int DifferenceInCalendarDays(datetime beginTime, datetime endTime)
int DifferenceInBusinessDays(datetime beginTime, datetime endTime)
int DifferenceInCalendarWeeks(datetime beginTime, datetime endTime, bool StartsOnMonday = false)
int DifferenceInCalendarMonths(datetime beginTime, datetime endTime)

//+==================================================================+
//| Unidades IsSame()|
//+==================================================================+
bool IsSameMinute(datetime t1, datetime t2)
bool IsSameHour(datetime t1, datetime t2)
bool IsSameDay(datetime t1, datetime t2)
bool IsSameWeek(datetime t1, datetime t2, bool StartsOnMonday = false)
bool IsSameMonth(datetime t1, datetime t2)
bool IsSameYear(datetime t1, datetime t2)

//+==================================================================+
//| Unidades IsCurrent()|
//+==================================================================+
bool IsCurrentMinute(datetime t)
bool IsCurrentHour(datetime t)
bool IsCurrentWeek(datetime t, bool StartsOnMonday = false)
bool IsCurrentMonth(datetime t)
bool IsCurrentYear(datetime t)
bool IsToday(datetime t)
bool IsTomorrow(datetime t)
bool IsYesterday(datetime t)

//+==================================================================+
//| Diversos|
//+==================================================================+
bool IsLeapYear(int year)
int  DaysInMonth(int year, int month)
datetime GetNthWeekdayInYearMonth(iYear, iMonth, Nth, weekday = SUNDAY)
datetime GetNthSundayInYearMonth(iYear, iMonth, Nth)

//+==================================================================+
//| Formando o tempo como string|
//+==================================================================+
string t2s(datetime t, const int mode = TIME_DATE | TIME_MINUTES)
string SecondsToString(int seconds)
string TimeFormat(datetime t, string format = "YYYY.MM.DD hh:mm")


Lista de todos os formatos de hora disponíveis:

//+------------------------------------------------------------------+
//| Obter a hora formatada de acordo com a cadeia de tokens passada. |
//| Lista de todos os formatos disponíveis:|
//| Descrição do formato de saída|
//| ------ ---------------- ------------------------------------- |
//| YY 18Ano com dois dígitos
//| YYYY 2018 Ano com quatro dígitos|
//| M 1-12O mês, começando em 1
//| MM 01-12 O mês, 2 dígitos
//| MMM Jan-Dez O nome abreviado do mês, 3 letras
//| MMMM Janeiro-Dezembro O nome completo do mês|
//| D 1-31O dia do mês
//| DD 01-31O dia do mês, 2 dígitos
//| DDD Sun-Sat O nome abreviado do dia da semana.
//| DDDD Domingo-Sábado O nome do dia da semana
//| h 0-23 A hora|
//| hh 00-23 A hora, 2 dígitos
//| H 1-12A hora, relógio de 12 horas
//| HH 01-12 A hora, relógio de 12 horas, 2 dígitos
//| m 0-59 O minuto|
//| mm 00-59 O minuto, 2 dígitos
//| s 0-59 O segundo|
//| ss 00-59 O segundo, de 2 dígitos
//| A AM PM|
//| a am pm|
//+------------------------------------------------------------------+
//| Formatos de amostra:|
//| "YYYY.MM.DD hh:mm" // "2024.12.08 22:05" (padrão)
//| "DDD, YYYY.MM.DD hh:mm:ss"   // "Sun, 2024.12.08 22:05:21"       |
//| "D MMMM YYYY, HH:mm a"       // "8 December 2024, 10:05 pm"      |
//| "DD/MM/YYYY" // "08/12/2024"|
//+------------------------------------------------------------------+
string TimeFormat(const datetime t, const string format = "YYYY.MM.DD hh:mm");


Os dois scripts anexados "basic.mq5" e "advanced.mq5" mostram os exemplos de uso básico e avançado.

Um exemplo de saída do script "advanced.mq5":

/*
 exemplo de saída:

 1. CreateDateTime(2022, 03, 25) = 2022.03.25 00:00:00
 [year] [mon] [day] [hour] [min] [sec] [day_of_week] [day_of_year]
 [0] 2024 12 18 17 27 25 3 352
 2. t2s(t, TIME_DATE|TIME_SECONDS) = Wed, 2024.12.18 18:27:25
 3. GetYear(t) = 2024
 4. GetMonth(t) = 12
 5. GetDay(t) = 18
 6. GetHour(t) = 18
 7. GetMinute(t) = 27
 8. GetSecond(t) = 25
 9. DayOfWeek(t) = 3
 10. DayOfYear(t) = 352
 11. DayIndex(t) = 20075
 12. WeekOfMonth(t) = 3
 13. WeekOfYear(t) = 51
 14. WeekIndex(t) = 2868
 15. WeekOfMonth(t, true) = 4
 16. WeekOfYear(t, true) = 51
 17. WeekIndex(t, true) = 2868
 18. StartOfMinute(t) = 2024.12.18 18:27:00
 19. StartOfHour(t) = 2024.12.18 18:00:00
 20. StartOfDay(t) = 2024.12.18 00:00:00
 21. StartOfWeek(t) = 2024.12.15 00:00:00
 22. StartOfWeek(t, true) = 2024.12.16 00:00:00
 23. StartOfMonth(t) = 2024.12.01 00:00:00
 24. StartOfYear(t) = 2024.01.01 00:00:00
 25. EndOfMinute(t) = 2024.12.18 18:27:59
 26. EndOfHour(t) = 2024.12.18 18:59:59
 27. EndOfDay(t) = 2024.12.18 23:59:59
 28. EndOfWeek(t) = 2024.12.21 23:59:59
 29. EndOfWeek(t, true) = 2024.12.22 23:59:59
 30. EndOfMonth(t) = 2024.12.31 23:59:59
 31. EndOfYear(t) = 2024.12.31 23:59:59
 32. SecsElapsedOfMinute(t) = 25
 33. SecsElapsedOfHour(t) = 1645
 34. SecsElapsedOfDay(t) = 66445
 35. SecsElapsedOfWeek(t) = 325645
 36. SecsElapsedOfWeek(t, true) = 239245
 37. SecsElapsedOfMonth(t) = 1535245
 38. SecsElapsedOfYear(t) = 30479245
 39. RoundToMinute(t) = 2024.12.18 18:27:00
 40. RoundToHour(t) = 2024.12.18 18:00:00
 41. RoundToDay(t) = 2024.12.19 00:00:00
 42. RoundToWeek(t) = 2024.12.22 00:00:00
 43. RoundToWeek(t, true) = 2024.12.16 00:00:00
 44. CeilToMinute(t) = 2024.12.18 18:28:00
 45. CeilTooHour(t) = 2024.12.18 19:00:00
 46. CeilToDay(t) = 2024.12.19 00:00:00
 47. CeilToWeek(t) = 2024.12.22 00:00:00
 48. CeilToWeek(t, true) = 2024.12.23 00:00:00
 49. NextSunday(t) = 2024.12.22 00:00:00
 50. NextMonday(t) = 2024.12.23 00:00:00
 51. NextTuesday(t) = 2024.12.24 00:00:00
 52. NextWednesday(t) = 2024.12.25 00:00:00
 53. NextThursday(t) = 2024.12.19 00:00:00
 54. NextFriday(t) = 2024.12.20 00:00:00
 55. NextSaturday(t) = 2024.12.21 00:00:00
 56. PreviousSunday(t) = 2024.12.15 00:00:00
 57. PreviousMonday(t) = 2024.12.16 00:00:00
 58. PreviousTuesday(t) = 2024.12.17 00:00:00
 59. PreviousWednesday(t) = 2024.12.11 00:00:00
 60. PreviousThursday(t) = 2024.12.12 00:00:00
 61. PreviousFriday(t) = 2024.12.13 00:00:00
 62. PreviousSaturday(t) = 2024.12.14 00:00:00
 63. FirstWeekdayOfTheMonth(t, SUNDAY) = 2024.12.01 00:00:00
 64. LastWeekdayOfTheMonth(t, SUNDAY) = 2024.12.29 00:00:00
 65. AddSeconds(t, 30) = 2024.12.18 18:27:55
 66. AddMinutes(t, 30) = 2024.12.18 18:57:25
 67. AddHours(t, 2) = 2024.12.18 20:27:25
 68. AddDays(t, 10) = 2024.12.28 18:27:25
 69. AddBusinessDays(t, 10) = 2025.01.01 18:27:25
 70. AddWeeks(t, 4) = 2025.01.15 18:27:25
 71. AddMonths(t, 2) = 2025.02.18 18:27:25
 72. AddYears(t, 5) = 2029.12.18 18:27:25
 73. SubSeconds(t, 30) = 2024.12.18 18:26:55
 74. SubMinutes(t, 30) = 2024.12.18 17:57:25
 75. SubHours(t, 2) = 2024.12.18 16:27:25
 76. SubDays(t, 10) = 2024.12.08 18:27:25
 77. SubBusinessDays(t, 10) = 2024.12.04 18:27:25
 78. SubWeeks(t, 4) = 2024.11.20 18:27:25
 79. SubMonths(t, 2) = 2024.10.18 18:27:25
 80. SubYears(t, 5) = 2019.12.18 18:27:25
 81. DifferenceInCalendarDays(t, AddWeeks(t, 9)) = 63
 82. DifferenceInBusinessDays(t, AddWeeks(t, 9)) = 45
 83. DifferenceInCalendarWeeks(t, AddWeeks(t, 9)) = 9
 84. DifferenceInCalendarWeeks(t, AddWeeks(t, 9), true) = 9
 85. DifferenceInCalendarMonths(t, AddWeeks(t, 9)) = 2
 86. IsSameMinute(t, AddHours(t, 25)) = false
 87. IsSameHour(t, AddHours(t, 25)) = false
 88. IsSameDay(t, AddHours(t, 25)) = false
 89. IsSameWeek(t, AddHours(t, 25)) = true
 90. IsSameWeek(t, AddHours(t, 25), true) = true
 91. IsSameMonth(t, AddHours(t, 25)) = true
 92. IsSameYear(t, AddHours(t, 25)) = true
 93. IsCurrentMinute(t) = false
 94. IsCurrentHour(t) = false
 95. IsCurrentWeek(t) = true
 96. IsCurrentWeek(t, true) = true
 97. IsCurrentMonth(t) = true
 98. IsCurrentYear(t) = true
 99. IsToday(t) = true
 100. IsTomorrow(t) = false
 101. IsYesterday(t) = false
 102. IsLeapYear(2100) = false
 103. DaysInMonth(2024, 2) = 29
 104. GetNthWeekdayInYearMonth(2024, 1, 1, SUNDAY) = 2024.01.07 00:00:00
 105. t2s(TimeCurrent()) = Wed, 2024.12.18 17:27
 106. SecondsToString(SecsElapsedOfDay(TimeCurrent())) = 17:27:25
 107. TimeFormat(TimeCurrent(), YYYY.MM.DD hh:mm) = 2024.12.18 17:27
 108. TimeFormat(TimeCurrent(), DDD, YYYY.MM.DD hh:mm:ss) = Wed, 2024.12.18 17:27:25
 109. TimeFormat(TimeCurrent(), D MMM YYYY, HH:mm a) = 18 Dec 2024, 05:27 pm

*/


Atualizações:

2024.12.03 - v.1.10 : Versão inicial.

2024.12.05 - v.1.15 : Funções adicionadas para dias úteis e para Nth() dia da semana do mês. Cálculos otimizados na função DaysInMonth().

2024.12.09 - v.1.20 : Adicionada a função TimeFormat() para formatar a hora de acordo com a string de tokens passada.

2024.12.09 - v.1.25: Cálculos otimizados na função TimeToStructFast().

2024.12.10 - v.1.30: Funções TimeFormat(), StartOfYear() e EndOfYear() otimizadas. Atualizadas as descrições de algumas funções.

2024.12.15 - v.1.35 : Otimizada a função GetNthWeekdayInYearMonth().

2024.12.18 - v.1.40 : Adicionadas as funções IsCurrentXXX(), IsToday(), IsTomorrow() e IsYesterday().

2024.12.19 - v.1.45 : Funções AddMonths() e GetNthWeekdayInYearMonth() otimizadas.

2024.12.20 - v.1.50: Mais limpeza de código.

2024.12.21 - v.1.55 : Cálculos simplificados em AddMonths(): substituiu a lógica complexa de ajuste de meses e anos por um cálculo mais simples do total de meses.



Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/53970

MarketPredictor MarketPredictor

MarketPredictor para o MetaTrader 5 O MarketPredictor é um Expert Advisor (EA) inovador para o MetaTrader 5 que utiliza modelos matemáticos como funções senoidais, Fast Fourier Transform (FFT), funções sigmoidais e simulações de Monte Carlo para analisar e prever os movimentos do mercado. Este projeto foi criado para desenvolvedores, entusiastas da matemática e operadores interessados em combinar inovações tecnológicas e financeiras. Sinta-se à vontade para sugerir, discutir e implementar ideias de código diretamente neste tópico. Sejam novos recursos, sugestões de aprimoramento ou estratégias, todas as contribuições são bem-vindas para desenvolver e otimizar ainda mais o MarketPredictor. Você também pode me adicionar para esclarecer dúvidas em particular, colaborar no projeto do GitHub ou enviar seus comentários diretamente. Vamos preparar algo incrível juntos e levar este projeto para o próximo nível!

Price increase Indicator Price increase Indicator

Indicador de aumento de preços

Accumulation/Distribution Accumulation/Distribution

O Indicador Accumulation/Distribution (Acumulação/Distribuição ou A/D) é determinado pelas mudanças de preço e volume.

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

O Indicador Acceleration/Deceleration (Aceleração/Desaceleração ou AC) mede a aceleração e a desaceleração da força motriz atual do mercado.