Bibliotecas: MultiTester - página 44

 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Testando 'CopyTicks'

fxsaber, 2024.02.26 12:41 pm

Se o CopyTicks travar por 60 segundos e retornar o erro 4403, tente mudar o ponto de acesso ao servidor. Mesmo que o ping para ele seja menos favorável.

Nesse sentido, a seleção automática de um ponto de acesso pelo terminal é perigosa.

Sem lançar esse indicador (uma instância para todo o Terminal), eu não saio mais do Terminal de combate, onde o trabalho com CopyTicks está em andamento.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/pt/code/26132

#property indicator_chart_window
#property indicator_plots 0

input int inIntervalAlert = 5; // Intervalo de tempo limite de erro (seg.)
input int inMaxPoints = 5;     // Número de pontos do primeiro servidor

int OnCalculate( const int rates_total, const int prev_calculated, const int, const double &[] )
{
  static ulong StartTime = GetTickCount64();
  const ulong CurrTime = GetTickCount64();
  
  if (!prev_calculated)
  {
    Alert("Restarted!");
    
    StartTime = CurrTime;
  }
  else if (CheckCopyTicks() != ERR_HISTORY_TIMEOUT)
    StartTime = CurrTime;
  else if (CurrTime - StartTime > (ulong)inIntervalAlert * 1000)
  {
    static int Pos = 0;
    
    const int ServerPoint = Pos++ % inMaxPoints;
        
    Alert("CopyTicks error (timeout > " + (string)(CurrTime - StartTime) +
          " ms). Trying (" + (string)Pos + ") to switch to the " +
          (string)(ServerPoint + 1) + "/" + (string)inMaxPoints + " server point.");

    MTTESTER::SetServerPoint(ServerPoint);
  }

  return(rates_total);
}

int CheckCopyTicks( const string Symb = NULL )
{
  MqlTick Tick;
  MqlTick Ticks[];
  
  ResetLastError();
  
  if (SymbolInfoTick(Symb, Tick))
    CopyTicks(Symb, Ticks, COPY_TICKS_ALL, Tick.time_msc - 1000000, 1);
    
  return(_LastError);
}


2024.10.29 16:07:24.802 CopyTicksHelper (EURUSD,M1)     Alert: CopyTicks error (timeout > 5015 ms). Trying (8) to switch to the 3/5 server point.
2024.10.29 16:07:25.909 CopyTicksHelper (EURUSD,M1)     Alert: Restarted!


O indicador faz com que todos os Expert Advisors/scripts em execução saiam do erro de tempo limite correspondente de uma só vez. Em seguida, eles continuam a funcionar normalmente.

 
fxsaber #:

Sem executar esse indicador (uma instância para todo o Terminal), não saio mais do Terminal de combate, onde o trabalho com CopyTicks está sendo realizado.



O indicador força todos os Expert Advisors/scripts em execução a sair do erro de tempo limite correspondente de uma só vez. Em seguida, eles continuam a funcionar normalmente.

Por favor, me dê casos reais em que você precisa trabalhar com CopyTicks em um Expert Advisor o tempo todo. Eu realmente o utilizo apenas em OnInit() para obter alguns ticks históricos para executar filtros digitais. Na MQL4, eu tinha que esperar vários minutos para que os buffers ficassem cheios.

 
Alexey Volchanskiy #:

Por favor, me dê casos reais em que um Expert Advisor precisa trabalhar com CopyTicks o tempo todo.

Não pule (e não duplique) os ticks no Real, como acontece no Tester. O Expert Advisor no Real recebe exatamente a mesma sequência de dados de preço que receberá no Tester quando você decidir executá-lo no intervalo passado no futuro.

 

Devo ser um completo idiota ou estar perdendo alguma coisa.

Se eu tiver um EA que gostaria de executar um único teste não visual (não otimizado) de cada dia durante um ano... Então, cada dia é testado com os parâmetros codificados, como eu faria isso? Alguém poderia escrever um pequeno tutorial como.

1. Baixar a biblioteca - Instruções de instalação

2. Escreva este código para selecionar seu EA pelo nome em seu arquivo ea and such and such a file.

3. Selecione suas datas de início e término aqui

4. Especifique o período e a duração de cada back test aqui.

5. Adicione estes códigos adicionais para que tudo funcione corretamente, coloque seus #includes no lugar certo etc.

6. Especifique e salve os resultados em csv para cada backtest diário.

etc. etc. etc.

Não sei como implementar essa solução, pois parece que essa biblioteca foi criada especificamente para o @fxsaber . Li todos os seus exemplos curtos e examinei o código em cada arquivo, mas não consigo encontrar nenhuma documentação que descreva os casos de uso ou um guia passo a passo em lugar algum.


Obrigado por programar o que todos nós queríamos e precisávamos. Você é uma lenda e adoro alguns de seus comentários, como "!Did", quando alguém pede que você conserte algo.

 
CheckInputs - нахождение аварийных проходов при Оптимизации советника
CheckInputs - нахождение аварийных проходов при Оптимизации советника
  • www.mql5.com
Во время Оптимизации советника некоторые проходы могут завершаться аварийно. Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий Новая версия платформы MetaTrader 5
 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bibliotecas: MultiTester

fxsaber, 2022.12.12 13:20

Às vezes, você precisa fazer a mesma coisa nos terminais de trabalho. Automação dessa ação abaixo no exemplo.

Como resultado, um clique coletou dados de todos os terminais. Graças ao MTTESTER::RunEX5 - executa o EX5 no terminal necessário (portátil).

Aplicativo.

МультиТерминальный скрипт.
МультиТерминальный скрипт.
  • www.mql5.com
Здесь будет представлен новый вид MQL5-программ - мультитерминальный скрипт: скрипт, который сам запускается на всех открытых MT5-терминалах. Пример. Первым таким скриптом стал CustomReport по причине
 

O script mostra quais dos terminais em execução são portáteis.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/pt/code/26132
  
void OnStart()
{
  HANDLE Handles[];
  
// Percorrer todos os terminais
  for (int i = MTTESTER::GetTerminalHandles(Handles, false); (bool)i--;)
    Print("\"" + MTTESTER::GetTerminalPath(Handles[i]) +
          "\" - " +(MTTESTER::IsPortable(Handles[i]) ? "portable." : "NOT portable."));
}
 

Hi

Preciso executar um script(localizado em \MQL5\Scripts\) clicando em um objeto criado por um indicador (localizado em \MQL5\Indicators\)(não por teclas de atalho).

Tentei usar o MTTESTER::RunEX5 , mas há muitos erros básicos. O que estou fazendo de errado?

Passei por "MultiTester_Example1" e "MultiTester_Example2" em \MetaQuotes\Terminal\D..5\MQL5\Experts\fxsaber\MultiTester.

Passei o "MultiTester.mqh" e todos os outros arquivos .mqh em \MetaQuotes\Terminal\D...5\MQL5\Include\fxsaber\MultiTester

Estes são os erros que recebi

em EX1:

'sinput' - token inesperado Ex1.mq5 3 1

'=' - uso de atribuição ilegal Ex1.mq5 3 23

'sinput' - token inesperado Ex1.mq5 4 1

'=' - uso de atribuição ilegal Ex1.mq5 4 23

'sinput' - token inesperado Ex1.mq5 5 1

'=' - uso de atribuição ilegal Ex1.mq5 5 24

'sinput' - token inesperado Ex1.mq5 6 1

'=' - uso de atribuição ilegal Ex1.mq5 6 31


em EX2:

função de tratamento de eventos não encontrada Ex2.mq5 1 1


em MultiTester.mqh:

expressão não booleana TesterSettings.mqh 104 37

expressão não booleana TesterSettings.mqh 118 39

'SetTesterSettings' - identificador não declarado MultiTester.mqh 43 13

')' - expressão esperada MultiTester.mqh 43 31

'SetTesterSettings' - identificador não declarado MultiTester.mqh 51 10

')' - expressão esperada MultiTester.mqh 51 28


em Task.mqh:

Arquivo 'C:\Users\...\...\....\...\Terminal\D0...75\MQL5\Include\fxsaber\TesterCache\TesterCache.mqh' não encontrado Task.mqh 5 11

'TESTERCACHE' - declaração sem tipo Task.mqh 80 38

.

.

.

Veja a instanciação do modelo 'MTTESTER::TASK::GetMaxFitnessPos<unknown>' Task.mqh 244 29


 
Asa Social #:

Preciso executar um script(localizado em \MQL5\Scripts\) clicando em um objeto criado por um indicador (localizado em \MQL5\Indicators\) (não por teclas de atalho).

Veja o exemplo aqui.

Tentei usar o MTTESTER::RunEX5 , mas há muitos erros básicos. O que estou fazendo de errado?

Tecnicamente, o código não compilado não pode ser publicado no Codebase. O problema está do seu lado.
Библиотеки: Expert - Попробуйте использовать ChartApplyTemplate. Запустите советник на всех чартах, где уже есть запущенный советник.
Библиотеки: Expert - Попробуйте использовать ChartApplyTemplate. Запустите советник на всех чартах, где уже есть запущенный советник.
  • 2017.08.28
  • Automated-Trading
  • www.mql5.com
После этого задать ему нормальное значение через ChartSetInteger. Если же нужно еще и советник запустить на том же чарте. а оттуда запускать на нужном уже нам чарте советник. Библиотека работает без DLL - полностью удовлетворяет требованиям Маркета
 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bibliotecas: MultiTester

fxsaber, 2022.12.12 13:20

MTTESTER::RunEX5 - executa o EX5 no terminal necessário (portátil).

Restrição portátil removida.