Discussão do artigo "Testes de permutação de Monte Carlo no MetaTrader 5"

 

Novo artigo Testes de permutação de Monte Carlo no MetaTrader 5 foi publicado:

Este artigo explora o uso de testes de permutação, aplicando-os a qualquer Expert Advisor através da reorganização de dados de ticks, recorrendo exclusivamente aos recursos disponíveis no MetaTrader 5.

Depois de exportar o arquivo, lembre-se de registrar onde foi salvo. Abra-o com qualquer aplicativo de planilha eletrônica. A imagem a seguir mostra o uso do OpenOffice Calc, onde uma nova linha foi adicionada no final da tabela. Antes de continuar, pode ser prudente excluir as linhas referentes aos símbolos que não serão considerados nos cálculos. Abaixo de cada coluna apropriada, o valor-p é calculado por meio de um macro personalizado. Este macro utiliza tanto os indicadores de desempenho do símbolo permutado (na linha 18 do documento exibido) quanto os indicadores de desempenho de todos os símbolos permutados correspondentes. A fórmula exata do macro é mostrada na imagem.

Cálculo dos valores-p no OpenOffice Calc

Além do uso de um aplicativo de planilha eletrônica, Python é outra opção viável, com seus vários módulos para análise de arquivos XML. Se familiarizado com MQL5, os arquivos também podem ser processados usando um script simples. Apenas certifique-se de escolher um diretório facilmente acessível ao exportar os resultados da otimização do testador.

Autor: Francis Dube

 
Olá! Este artigo fornece insights valiosos, e eu estava procurando por ele há algum tempo. No entanto, encontrei um problema ao usar o exemplo que você compartilhou. O spread parece ser muito grande devido ao preço de venda. Poderia me informar se há algo que eu esteja deixando passar ou se há algum erro?
 
Le Huu Hai #:
Olá! Este artigo fornece insights valiosos, e eu estava procurando por ele há algum tempo. No entanto, encontrei um problema ao usar o exemplo que você compartilhou. O spread parece ser muito grande devido ao preço de venda. Poderia me informar se há algo que eu esteja deixando passar ou se há algum erro?

Até onde sei, não consigo encontrar um erro. Em meus próprios testes, também encontrei variações de séries de preços com grandes spreads. Isso pode acontecer. Se isso for inaceitável, você pode simplesmente fazer mais permutações e testar em séries com spreads mais realistas.

 
Testei o script algumas vezes em contratos futuros, tanto os mais recentes quanto os contínuos, sem sucesso. Além de os símbolos gerados serem visualmente idênticos no gráfico, seus valores de volume de tick/volume real estão concentrados em apenas algumas velas ao longo do dia, e o testador engasga e congela nesses símbolos, não produzindo resultados.
 
Firstly, time and tick flag information will be left untouched so our permutation routine should not alter this information. We are interested in only the bid, ask and volume.
Não está totalmente claro por que você decidiu usar o logaritmo dos volumes. Especialmente o volume de ticks.
 
Autor, você não usa muitos recursos da linguagem, portanto, seu código é muitas vezes maior e mais difícil de ler.

Por exemplo, essas linhas podem ser substituídas por uma única linha.
 //---troca de dados de ticks aleatoriamente
      tempvalue.bid_d=m_differenced[i].bid_d;
      tempvalue.ask_d=m_differenced[i].ask_d;
      tempvalue.vol_d=m_differenced[i].vol_d;
      tempvalue.volreal_d=m_differenced[i].volreal_d;

      m_differenced[i].bid_d=m_differenced[j].bid_d;
      m_differenced[i].ask_d=m_differenced[j].ask_d;
      m_differenced[i].vol_d=m_differenced[j].vol_d;
      m_differenced[i].volreal_d=m_differenced[j].volreal_d;

      m_differenced[j].bid_d=tempvalue.bid_d;
      m_differenced[j].ask_d=tempvalue.ask_d;
      m_differenced[j].vol_d=tempvalue.vol_d;
      m_differenced[j].volreal_d=tempvalue.volreal_d;
Swap(m_differenced[i], m_differenced[j]);


template < typename T>
void Swap( T &Value1, T &Value2 )
{
  const T Value = Value1;
  
  Value1 = Value2;
  Value2 = Value;
}


A mesma observação se aplica aos métodos de logaritmo e transformação inversa de dados estruturais. etc.

 

A conversão de ticks é um tópico raro. Normalmente, isso é feito com apenas um preço (oferta, por exemplo) e em barras.

Sou grato ao autor por levantar esse tópico.


Recentemente, houve um tópico em um tópico em russo sobre esse assunto. Lá, usando os melhores métodos de aprendizado de máquina, eles tentaram gerar um histórico de ticks para que ele não perdesse os padrões do mercado. Havia um critério claro.

Infelizmente, todas as tentativas de não perder os padrões terminaram em fracasso. Havia métodos muito mais sofisticados do que apenas misturar os ticks.


Algo bem-sucedido aconteceu somente aqui.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Машинное обучение в трейдинге: теория, модели, практика и алготорговля

fxsaber, 2023.09.07 07:33

Tentei vários algoritmos. Para maior clareza, aqui estão alguns deles.

O OP está sendo construído ao preço médio com a condição de ser fixo.

  • Os pontos verdes são índicesde 3Z vértices na matriz de teca.
  • Roxo - o índice médio entre os vértices.

A ideia é percorrer a matriz de ticks e atribuir aleatoriamente incrementos adicionais nos locais dos índices encontrados.

Acontece que os registros de data e hora, os valores absolutos dos incrementos (Avg-price) e os spreads são completamente preservados.


De acordo com os resultados.

  1. Executo somente em índices verdes - dreno. Obviamente, essa randomização endireita (reduz o número de ZZ) o gráfico final.
  2. Eu corro apenas com os roxos -o graal é mais forte, quanto maior a condição mínima. joelho ZZ.
  3. Eu corro em ambas as cores - ameixa.
Presumo que, se você construir um 3Z baseado em Bid/Ask ao mesmo tempo, o ponto 2 será um graal mais forte.

O tempo reverso preserva muito bem os padrões do mercado.
Проверка обратного времени.
Проверка обратного времени.
  • 2023.09.03
  • www.mql5.com
Мною была поставлена задача разобраться в причинах получения прибыли определенной ТС (торговая система). Для этого требовалось изучить историю котировок, подтвердив или опровергнув возникающие
 
//+------------------------------------------------------------------+
//|Método auxiliar que aplica a transformação de registro
//+------------------------------------------------------------------+
bool CPermuteTicks::LogTransformTicks(void)
  {
//---redimensionar m_logticks, se necessário 
   if(m_logticks.Size()!=m_ticks.Size())
      ArrayResize(m_logticks,m_ticks.Size());
//---log transforma somente os membros de dados relevantes, evita valores negativos e zero
   for(uint i=0; i<m_ticks.Size(); i++)
     {
      m_logticks[i].bid_d=(m_ticks[i].bid>0)?MathLog(m_ticks[i].bid):MathLog(1 e0);
      m_logticks[i].ask_d=(m_ticks[i].ask>0)?MathLog(m_ticks[i].ask):MathLog(1 e0);
      m_logticks[i].vol_d=(m_ticks[i].volume>0)?MathLog(m_ticks[i].volume):MathLog(1 e0);
      m_logticks[i].volreal_d=(m_ticks[i].volume_real>0)?MathLog(m_ticks[i].volume_real):MathLog(1 e0);
     }
//---
   return true;
  }
Por que fazer o logaritmo dos volumes?
 

мы хотим, чтобы p-значения были как можно ближе к нулю, в диапазоне 0,05 и ниже.

A fórmula completa é apresentada a seguir:

z+1/r+1

em que r é o número de permutações realizadas e z é o número total de testes com o melhor desempenho.

Esse critério não funcionará nesse caso - otimizado no símbolo original e depois executado em permutações.

 
Процедура перестановки важна для правильного проведения теста.

O algoritmo de permutação usado.

  1. É criada uma matriz de incrementos logarítmicos (entre ticks vizinhos) bid/ask.
  2. Essa matriz é embaralhada. Ela é fortemente misturada.
  3. Uma nova matriz de ticks é criada por meio de incrementos a partir do item 2.

Essa abordagem elimina todas as regularidades (se houver alguma) que estavam na série inicial. Porque o resultado é um passeio aleatório.


Isso não deve ser feito dessa forma.

 
Existe uma maneira de fazer uma análise Monte Carlo, mas com um EA de várias moedas?