Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 102
- Avaliação:
- Publicado:
-
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.
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/61126

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.

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.

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.

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.