MetaTrader 5 Strategy Tester: bugs, bugs, sugestões para melhorias - página 23

 
Slava:

O testador parou porque o OnInit devolve um código diferente de zero

É por isso que não existem estatísticas.

Obrigado, vou mantê-lo informado. É interessante que os gráficos ainda sejam construídos com os ofícios realizados.

 
Andrey Pogoreltsev:

Os agentes sobrecarregam a memória quando tentam passar pelo mexicano e não fazem nada, e a sua tarefa só aumenta. Os registos mostram os seguintes erros:

É necessário consultar os registos dos agentes.

O erro 14 significa preço de oferta zero para esta ferramenta. Ou seja, há uma barra esquerda na história

PS É melhor fazer um único teste. Então o erro é certo de atingir o registo do agente testador. Ao optimizar, os erros só são exibidos até que o OnInit esteja terminado

 

O ícone do grupo desaparece quando todos estão fechados, a opção de seleccionar um parâmetro para optimização desaparece.


input group "ORDER"
input double K = 30;
input double TP_0 = 500;
input double MaxLoss = 0.25;
input group "FUNCTIONS"
input bool MultipleStopOrders = true;
input bool CloseAllPosReversSig = true;
input group "MONEY MANAGEMENT SETTING"
input double StartLot = -0.01;
input group "ORDERS SETTING"
input int MagicNumber_ = 2000; // Magic Number
input int Slippage = 50;       // Slippage
 
Slava:

Grande pedido para não alterar os parâmetros de entrada da EA, que não estão definidos na prancheta.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Bibliotecas: MultiTester

fxsaber, 2019.11.06 11:24

Quando se olha para um grande número de caches de optimização após uma série de multitesters, faz-se a mesma coisa.

  1. Escolhe-se o melhor passe para realizar uma única corrida (via PCM).
  2. Se gostar, desactiva a optimização e aumenta o intervalo.
  3. Pressiona Start.

A maior parte do tempo é gasto no passo 2, o que muitas vezes resulta em erros. Gostaríamos de semi-automatar. E há uma solução!


Copiar este texto para a prancheta.

[Tester]
Optimization=0
FromDate=2019.01.01


Depois basta premir CTRL+V no separador Definições. Isto irá desactivar automaticamente a optimização e definir a data certa.


A ZZZ estava com pressa de se entusiasmar. Os parâmetros de entrada da EA são redefinidos para o padrão com este buffer.

 
fxsaber:

Um grande pedido para não alterar os parâmetros de entrada de uma EA que não esteja definida na prancheta.

Sim. Corrigir o comportamento.

PS O comportamento descrito não é reprodutível. Se não houver secção [TesterInputs] no texto inserido, o separador de definições do Expert Advisor não é de todo tocado

 
Slava:
Sim. corrigir o comportamento

Obrigado!

 
fxsaber:

Obrigado!

Não jogar
 
Slava:

PS O comportamento descrito não é reproduzido. Se não houver secção [TesterInputs] no texto a inserir, o separador Expert Advisor settings não é de todo tocado

Conselheiro especializado

input int Range = 0; // 0 .. 100

double OnTester() { return(Range); }


Reprodução


 
Provavelmente, esta funcionalidade padrão não irá piorar a situação de ninguém.

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Características da linguagem mql5, dicas e truques

fxsaber, 2019.11.06 16:57

Por vezes, na optimização genética, os primeiros milhares de passagens são suficientes para já compreender mais ou menos o resultado.

Quando se executam automaticamente muitas optimizações, quer-se que tudo funcione mais rapidamente. É por isso que vamos precisar de um mecanismo para interromper a optimização.

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

// Выключает Оптимизацию ( и одиночный проход)
bool OptimizationStop( void )
{
  return(!MTTESTER::IsReady() && MTTESTER::ClickStart(false));
}


Aplicação.

// Демонстрация прерывания Оптимизации.

sinput int inAmountPasses = 20; // Через сколько проходов закончить
input int Range = 0; // 0..10000

double OnTester()
{
  int Data[];
  
  return(FrameAdd(NULL, 0, 0, Data)); // Сгенерировали TesterPass
}

void OnTesterPass()
{
  static int Amount = 0;
  
  ulong Pass;
  string Name;
  long ID;
  double Value;
  int Data[];

  while (FrameNext(Pass, Name, ID, Value, Data))
    if (++Amount > inAmountPasses)
    {
      OptimizationStop(); // Как достигли нужного количества проходов, выключили оптимизатор.
      
      break;
    }
}
 
fxsaber:

Conselheiro


Reprodução


Vamos ao fundo da questão