O auto-engano do comerciante: desconfiança em relação aos atacantes. - página 2

 
Youri Tarshecki:

Qualquer pessoa pode fazer a experiência mais simples - obter resultados comerciais em uma conta demo e executar o mesmo sistema com as mesmas configurações em seu testador durante o mesmo período. Isto é, obter um avanço real e um teste virtual e compará-lo.

Esta não é uma comparação válida, pois o testador de estratégia usa apenas 4 aspas para o bar aberto, fechado, máximo e mínimo. Como regra, os Expert Advisors trabalham com todas as aspas intra-bar em contas demo ou reais.

Youri Tarshecki:

Na verdade, a simulação do comportamento do sistema, executando-o em um período não otimizado da história, é a forma mais eficiente de análise para um comerciante. A verificação da realidade é, naturalmente, o caminho mais confiável, mas infelizmente é preciso viver para sempre para passar por todas as variantes em contas reais. Isto é, a modelagem como o avanço para o passado é a forma mais eficaz de pesquisa. Mas então por que estão completamente ausentes das discussões? Talvez seja porque não existe um software prático para processar e analisar os resultados de múltiplos testes, tanto para trás como para frente?

Eu concordo com você. Você parece fazer muito disso. Por favor, diga-me qual ferramenta financeira você prefere para tal análise. Eu tenho um EA que é acionado somente na abertura do bar e quero testá-lo com este tipo de modelagem.

 

 Скажите пожалуйста какой финансовый инструмент Вы предпочитаете для подобного анализа. У меня есть советник который срабатывает только на открытие бара. Хочу проверить его подобным моделированием.

O que eu quero dizer é que, independentemente da ferramenta, a metodologia de teste deve incluir o forward. Mas as pessoas os ignoram em massa. Aqueles que os utilizam geralmente os estimam a olho nu. Em outras palavras, não há programas que introduzam padrões objetivos na avaliação dos avanços.
 
Youri Tarshecki:
O que eu quero dizer é que, independentemente da ferramenta, a metodologia de teste deve incluir o forward. Mas as pessoas os ignoram em massa. Aqueles que os utilizam, em geral, os estimam a olho nu. Ou seja, não existem programas que introduzam padrões objetivos na avaliação dos avanços.
Diferentes instrumentos têm diferentes propriedades de comportamento de mercado. Incluindo a "inércia da lucratividade" no teste a termo. É por isso que eu queria perguntar: você encontrou um instrumento (ou um tipo de instrumento) mostrando o melhor resultado em suas experiências, sendo todas as outras coisas iguais?
 
Youri Tarshecki:
O que eu quero dizer é que, independentemente do instrumento, a metodologia de teste deve incluir o forward. Mas as pessoas os ignoram em massa. Aqueles que os utilizam, como regra, estimam a olho nu. Ou seja, não há programas que introduzam padrões objetivos nos preços futuros.

Ignorando em massa os testes de avanço. A razão é simples - o sucesso na transmissão indica apenas que o mercado na seção de exportação é semelhante ao da seção de otimização. O Strategy Tester se ajusta perfeitamente à dinâmica atual do mercado. Como resultado, após dividirmos o segmento de otimização em 12 partes dianteiras, obteremos 12 conjuntos de parâmetros não relacionados, cada um dos quais irá perder 11 de 12 seções de tempo. Em vez disso, é melhor encontrar um conjunto de parâmetros, embora médio, para uma longa história, do que apressar de um conjunto de parâmetros para outro.

O mercado não muda, é apenas que cada sistema comercial captura apenas um estado particular do mercado, e o mercado tem muitos desses estados.

 
É melhor não confiar nos atacantes do que confiar neles. E se você o fizer, é apenas se você usar o WFA
 
Vasiliy Sokolov:

Ignorando em massa os testes de avanço. A razão é simples - o sucesso na transmissão indica apenas que o mercado na seção de exportação é semelhante ao da seção de otimização. O Strategy Tester se ajusta perfeitamente à dinâmica atual do mercado. Como resultado, após dividirmos o segmento de otimização em 12 partes dianteiras, obteremos 12 conjuntos de parâmetros não relacionados, cada um dos quais irá perder 11 de 12 seções de tempo. Em vez disso, é melhor encontrar um conjunto de parâmetros, embora médio, para uma longa história, do que apressar de um conjunto de parâmetros para outro.

O mercado não muda, é apenas que cada sistema comercial captura apenas um estado particular do mercado, e há muitos desses estados no mercado.

Você não pode dividir a "seção otimizada em 12 partes dianteiras" porque uma parte dianteira é, por definição, uma seção não otimizada. Ou seja, você está contrastando o método de controle a si mesmo e simplesmente a noção de média.

O objetivo de um consultor é descobrir como o consultor se comporta em uma situação de futuro não otimizado. O que você está falando tem mais a ver com encontrar o melhor pedaço de história para otimização. Isto é, se você acredita que a longa história funciona melhor, sem problemas, vamos carregar o testador com 2 anos para trás - 1 ano para frente. E depois 2 meses para trás -1 mês para a frente 12 vezes. Se a primeira abordagem for melhor do que a soma da segunda abordagem, então a primeira abordagem é melhor, e vice versa. O próprio fato de você otimizar o Expert Advisor sugere que você acredita na inércia do mercado, mas simplesmente acredita que ela se manifesta em um período de tempo significativamente maior. Mas não é como se você estivesse otimizando ao longo de TODO o histórico disponível de 30 anos, então você também está levando em conta a volatilidade do mercado. É uma eterna contradição de constância e variabilidade, mas ao comparar períodos de teste diferentes você pode entender com mais precisão como esta contradição é resolvida na realidade. Até que você tenha verificado - é sua declaração puramente intuitiva ou apenas habitual.

 
Youri Tarshecki:
Suponha que eu use o OnTesterPass no código de um EA que estou testando. Como ele saberá que esta corrida é uma corrida de otimização de variáveis e não uma corrida de otimização de variáveis comum? E mesmo que ele consiga fazer isso, serão arquivos diferentes, e precisamos de uma tabela para muitos encaminhamentos de uma EA . E depois outra mesa, e outra para outra, e tudo isso em um arquivo.

Até onde me lembro, foi o que fiz - economizei o tempo da primeira troca no quadro - este é o "equilíbrio". Assim, ao registrar parâmetros e indicadores de todas as execuções em um único arquivo, é fácil distinguir o backtest do forward por duas datas distintas. Salvei todas as execuções em exatamente um arquivo (aberto no OnTesterInit e fechado no OnTesterDeinit).

Os detalhes estavam aqui:

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

Trabalhando com molduras

Stanislav Korotky, 2014.11.07 15:23

No manipulador OnTester você pode adicionar seus próprios quadros com dados usando o FrameAdd - o importante é que tudo isso seja feito no agente de teste, que pode ser remoto (por exemplo, na nuvem).

OnTesterInit, OnTesterDeinit, OnTesterPass são chamados no terminal onde o processo de teste/optimização é iniciado e de onde as tarefas são distribuídas aos agentes. Dentro do OnTesterPass você pode acessar todos aqueles quadros que foram adicionados aos agentes de teste usando o FrameAdd, mais ou menos assim (mordido do antigo EA, pode não compilar):

void OnTesterPass()
{
  string  name;
  ulong   pass;
  long    id;
  double  value, data[];
  string  params[];
  uint    par_count;
  string  output = "";
  ushort eq = StringGetCharacter("=", 0);

  while(FrameNext(pass, name, id, value, data)) // data - массив положенный во фрейм с помощью FrameAdd
  {
    output = pass + ";" + (data[0]);
    
    for(int i = 1; i < 10; i++) output += ";" + data[i];
    
    if(FrameInputs(pass, params, par_count))
    {
      for(uint i = 0; i < par_count; i++)
      {
        string pair[];
        int n = StringSplit(params[i], eq, pair);
        if(n == 2)
        {
          long pvalue, pstart, pstep, pstop;
          bool enabled = false;
          if(ParameterGetRange(pair[0], enabled, pvalue, pstart, pstep, pstop))
          {
            if(enabled)
            {
              output += ";" + pair[1];
            }
          }
        }
      }
    }
    
    output += "\n";
    // TODO: FileWriteString(fhandle, output);
  }
}

e aqui:

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

Trabalhando com molduras

Stanislav Korotky, 2014.11.07 20:15

Você deve adicionar quadros, como escrevi acima, durante a corrida. Em teoria, se a EA tem parâmetros, você deve colocá-los dentro do quadro junto com seus dados, ou seja, os parâmetros não devem estar vazios. Aqui estão mais alguns códigos do mesmo Expert Advisor.

int fhandle = -1;

void OnTesterInit()
{
  // готовим каким-то образом файл, как нам нужно
  fhandle = FileOpen("tester-" + _Symbol + GetTickCount() + ".csv", FILE_WRITE|FILE_CSV|FILE_ANSI);
  FileWriteString(fhandle, "Pass;First;LR;Profit;Expected Payoff;Profit Factor;Recovery Factor;Sharpe Ratio;Custom;Equity DD %;Trades\n");
}

void OnTesterDeinit()
{
  FileClose(fhandle);
}

double OnTester()
{
  // собираем данные по эквити
  double LR = CountChannels(Equity);
  
  // конструируем собственный критерий оптимизации
  double result = MathAbs(LR) * TesterStatistics(STAT_PROFIT) * TesterStatistics(STAT_PROFIT_FACTOR) * TesterStatistics(STAT_TRADES) * (100 - TesterStatistics(STAT_EQUITY_DDREL_PERCENT));

  // рассчитываем еще какие-то данные
  //...

  // складываем все в массив
  double data[10];
  // data[0] = first;
  // data[1] = LR;
  // data[2] = TesterStatistics(STAT_PROFIT);
  // ...
  // data[7] = result;
  // ...
  // data[9] = ...

  // отправляем данные в терминал
  if(!FrameAdd(MQL5InfoString(MQL5_PROGRAM_NAME), 1, LR, data))
    Print("Frame add error: ", GetLastError());
  else
    Print("Frame added, Ok");

  return(result);
}

 

Pessoalmente, acho mais lógico verificar os resultados no passado do que no futuro, porque as mudanças mais recentes do mercado são as mais significativas.

Durante 15 minutos eu otimizei, crivei resultados desnecessários e salvei os 5-10 restantes para o conjunto e os corri na história até o momento da otimização - e escolhi os melhores pelo gráfico.

Também estava pensando no processo de automatização dessas ações...

Uma solução simples parece estar simplesmente colocando restrições ao comércio no intervalo de tempo que pode ser trocado na própria EA, como resultado teremos duas corridas virtuais no histórico para uma corrida real, que pode ser facilmente comparada em excelência.

 
-Aleks-:

Pessoalmente, acho mais lógico verificar os resultados no passado do que no futuro, porque as mudanças mais recentes do mercado são as mais significativas.

Durante 15 minutos eu otimizei, crivei resultados desnecessários, salvei os 5-10 restantes para o conjunto e os corri na história até o momento da otimização - e escolhi os melhores pelo gráfico.

Também estava pensando no processo de automatização dessas ações...

Uma solução simples parece estar simplesmente colocando restrições ao comércio no intervalo de tempo que pode ser trocado na própria EA, como resultado teremos duas corridas virtuais no histórico para uma corrida real, que pode ser facilmente comparada em excelência.

O foco na ÚLTIMA mudança é outro tipo de auto-engano. Naturalmente, você precisa usar novos ambientes para a comercialização. Mas limitando-se a otimizar para o período mais recente, você nunca será capaz de entender se seu Expert Advisor é resistente a mudanças futuras. Veja a segunda foto no meu post - você pode vê-la claramente. O forward é uma comparação do passado com o passado. Seu método não tem nada a ver com análise prévia. Praticamente qualquer Expert Advisor pode ser otimizado para um bom backtest. O padrão aqui é o seguinte - quanto mais os ajustes são otimizados, mais bonito é o backtest. E o mais feio é o atacante. Os avanços ajudam a encontrar exatamente a lógica que utiliza padrões mais duradouros e, portanto, é mais promissora.
 
Adiantar é um controle útil, mas não uma panaceia. É possível selecionar uma variante de parâmetros nos resultados de otimização que proporcionam um bom avanço, mas isto não garante bons resultados no real.
Razão: