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
Visualizações:
102
Avaliação:
(6)
Publicado:
\MQL5\Scripts\fxsaber\ \MQL5\Include\fxsaber\TicksShort\
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Essa biblioteca implementa o trabalho com o formato de armazenamento de ticks, que tem uma boa relação entre desempenho (leitura/gravação) e tamanho.


Formato.

Somente os seguintes campos doMqlTick originalsão armazenados:

struct MqlTick
  {
   datetime     time;          // Hora da última atualização de preço
   double       bid;           // Preço atual Lance
   double       ask;           // Preço Ask atual
   double       last;          // Preço atual da última transação (Last)
   ulong        volume;        // Volume para o preço atual Last
   long         time_msc;      // Hora da última atualização de preço em milissegundos
   uint         flags;         // Sinalizadores de marcação
   double       volume_real;   // Volume para o preço atual Último com maior precisão
  };


Examples.

Você pode ver os métodos da biblioteca no MetaEditor usando a tecla de atalho ALT+M. Abaixo estão alguns exemplos de seu uso.


Gravação/leitura via arquivo.

#property script_show_inputs

input datetime inFrom = D'2024.12.01';

#include <fxsaber\TicksShort\TicksShort.mqh> // Formato de armazenamento de ticks curtos.

void OnStart()
{        
  MqlTick Ticks[]; // Para ticks de origem.

  if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0)
  {
    FileSave("Ticks.bin", Ticks); // Salvamos os ticks normais para podermos comparar os tamanhos dos arquivos.
    
    TICKS_SHORT::Save("TicksShort.bin", Ticks); // Salve os ticks em um formato compactado.

    MqlTick Ticks2[]; // Para carrapatos esmagados.
    TICKS_SHORT::Load("TicksShort.bin", Ticks2); // Baixou os ticks de um formato compactado.
    
    Print("Ratio = " + DoubleToString((double)FileGetInteger("Ticks.bin", FILE_SIZE) /
                                      FileGetInteger("TicksShort.bin", FILE_SIZE), 3));
    
    Print("Correct = " + (string)TICKS_SHORT::IsEqual(Ticks, Ticks2)); // Comparado.
  }
}

O script acima salva os ticks em um novo arquivo de formato e os carrega de um arquivo.


Resultado.

TicksShort_SaveLoad (EURUSD,M1) Ratio = 10.000
TicksShort_SaveLoad (EURUSD,M1) Correct = true

A saída para o registro mostra que a taxa de compressão é de 10 vezes. E quando descompactados, os ticks correspondem aos originais.


Desempenho.

#property script_show_inputs

input datetime inFrom = D'2024.12.01';

#include <fxsaber\TicksShort\TicksShort.mqh> // Formato de armazenamento de ticks curtos.

// Retorna o tamanho da matriz em bytes.
template <typename T>
ulong GetSize( const T &Array[] ) { return((ulong)sizeof(T) * ArraySize(Array)); }

// Critério de desempenho do formato de compactação.
template <typename T1, typename T2>
double Criterion( const T1 &Decompression[], const T2 &Compression[], const ulong Interval )
{
  const double Performance = (double)ArraySize(Decompression) / Interval;
  
  return(Performance * ((double)GetSize(Decompression) / GetSize(Compression)));
}

void OnStart()
{        
  MqlTick Ticks[]; // Para ticks de origem.

  if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0)
  {
    TICK_SHORT Ticks2[]; // Para ticks compactados.
    
    ulong Interval = GetMicrosecondCount();
    TICKS_SHORT::Compress(Ticks, Ticks2); // Espremido.
    Interval = GetMicrosecondCount() - Interval;
    const double Performance = (double)ArraySize(Ticks) / Interval;
    
    Print("Compress performance: " + DoubleToString(Performance, 1) + " Ticks (millions)/sec.");
    Print("Compress performance criterion: " + DoubleToString(Criterion(Ticks, Ticks2, Interval), 1));
    
    MqlTick Ticks3[]; // Para carrapatos esmagados.
    
    ulong Interval2 = GetMicrosecondCount();
    TICKS_SHORT::Decompress(Ticks2, Ticks3); // Sem apertar.
    Interval2 = GetMicrosecondCount() - Interval2;
    const double Performance2 = (double)ArraySize(Ticks3) / Interval2;
    
    Print("Decompress performance: " + DoubleToString((double)ArraySize(Ticks3) / Interval2, 1) + " Ticks (millions)/sec.");
    Print("Decompress performance criterion: " + DoubleToString(Criterion(Ticks3, Ticks2, Interval2), 1));
    
    Print("Correct = " + (string)TICKS_SHORT::IsEqual(Ticks, Ticks3)); // Comparado.
  }
}

Esse script converte uma matriz de origem de ticks em uma matriz compactada e vice-versa. Os dados de desempenho/eficiência são exibidos.


Resultado.

TicksShort_Performance (EURUSD,M1)      Compress performance: 67.7 Ticks (millions)/sec.
TicksShort_Performance (EURUSD,M1)      Compress performance criterion: 677.1
TicksShort_Performance (EURUSD,M1)      Decompress performance: 42.1 Ticks (millions)/sec.
TicksShort_Performance (EURUSD,M1)      Decompress performance criterion: 420.9
TicksShort_Performance (EURUSD,M1)      Correct = true

As gravações e leituras são realizadas preservando as informações originais em velocidades acima de 40 milhões de ticks por segundo.


Alternativas.

https://www.mql5.com/en/code/30791

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/61126

Symbol Swap Panel Utility Symbol Swap Panel Utility

Painel de troca de símbolo: Troque sem esforço o símbolo ativo em seu gráfico e, ao mesmo tempo, adicione o novo símbolo ao Market Watch. Essa ferramenta garante uma integração perfeita e acesso a dados de mercado em tempo real, otimizando seu fluxo de trabalho de negociação.

Checking the server time changes due to the daylight saving time (DST) changeover Checking the server time changes due to the daylight saving time (DST) changeover

Infelizmente, descobri que algumas corretoras são um pouco descuidadas com a mudança de horário do servidor devido ao horário de verão, o que eu não esperava e me surpreendeu muito. Aqui está um script com o qual qualquer pessoa pode verificar sua corretora.

Auto Tp Auto Tp

Set Auto TP and SL: O recurso "Set Auto TP and SL" (Take Profit e Stop Loss) é uma ferramenta crucial em qualquer estratégia de negociação, projetada para automatizar o gerenciamento de riscos e recompensas. Ele permite que os traders definam níveis de preços fixos em que uma negociação deve ser fechada automaticamente para garantir lucros (TP) ou limitar perdas (SL), eliminando a necessidade de monitoramento manual constante. Quando esse recurso estiver ativado, cada posição que você abrir incluirá automaticamente um nível predefinido de Take Profit e Stop Loss com base em seus parâmetros personalizados, como um número específico de pips, porcentagem de saldo ou níveis técnicos. Isso não apenas economiza tempo, mas também garante que suas negociações estejam protegidas contra movimentos repentinos do mercado e decisões emocionais.

Monthly VWAP Monthly VWAP

O VWAP (Preço médio ponderado por volume) mensal é um indicador essencial da MQL5 que calcula e exibe o Preço médio ponderado por volume para cada mês de negociação. É uma ferramenta poderosa para entender o sentimento de longo prazo do mercado, identificar o valor justo mensal e informar decisões estratégicas.