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.
//---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.
- Executo somente em índices verdes - dreno. Obviamente, essa randomização endireita (reduz o número de ZZ) o gráfico final.
- Eu corro apenas com os roxos -o graal é mais forte, quanto maior a condição mínima. joelho ZZ.
- Eu corro em ambas as cores - ameixa.
- 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; }
мы хотим, чтобы 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.
- É criada uma matriz de incrementos logarítmicos (entre ticks vizinhos) bid/ask.
- Essa matriz é embaralhada. Ela é fortemente misturada.
- 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.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso

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.
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