Ajuda na codificação - página 408

 
airquest:
Bem, ainda... Aqui estão alguns testes :

- Configurações padrão (sem otimização, WriteCSV to True) : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h11-SA1.csv

- Otimizar conjunto para True, PeriodMin para 20 e PeriodMax para 20 : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h13-SA1.csv

O primeiro dá valores coerentes (arquivo CSV e resultados da tela coincidem). Isso é normal, pois ambos provêm das mesmas variáveis. Mas na segunda, os resultados do opti são multiplicados quase por 10 em comparação com os resultados da tela. No entanto, eles devem terminar nos mesmos resultados.

De qualquer forma, sem pressa, talvez com o tempo eu descubra o que está errado. Obrigado por sua gentil ajuda, Mladen.

Olá Airquest,

Obrigado por uma alternativa muito interessante ao Strategy Tester...uma peça de codificação muito criativa e talentosa de sua parte...!

Eu joguei um pouco com seu indicador...

E parece que você tem duas variáveis diferentes para os totais...

Uma para a execução normal = TotalTrades...

E uma para a execução de Otimização = TotalTrades...

Entretanto...seus Comentários mostram apenas sua execução normal TotalTrades...

Vá em frente e adicione seu Optimized...totalTrades...aos seus Comentários e veja se isso resolve o quebra-cabeça...

Isto, esperamos, possa responder à sua pergunta sobre o porquê da diferença entre a exibição da tela...e os totais da planilha...

Espero que isto ajude,

Robert

 
cosmiclifeform:
Olá Airquest,

Obrigado por uma alternativa muito interessante ao Strategy Tester...uma peça de codificação muito criativa e talentosa de sua parte...!

Eu joguei um pouco com seu indicador...

E parece que você tem duas variáveis diferentes para os totais...

Uma para a execução normal = TotalTrades...

E uma para a execução de Otimização = TotalTrades...

Entretanto...seus Comentários mostram apenas sua execução normal TotalTrades...

Vá em frente e adicione seu Optimized...totalTrades... aos seus Comentários e veja se isso resolve o quebra-cabeça...

Isto, esperamos, possa responder à sua pergunta sobre o porquê da diferença entre a exibição da tela...e os totais da planilha...

Espero que isto ajude,

Robert

Não tenho certeza se os resultados finais serão corretos. O problema é que ao mostrar o total de negócios provenientes da função opti, você pode ver se a função está funcionando bem ou não. Também não se tem certeza de como retornar mais de um parâmetro da função dupla (você precisa retornar o saldo e a taxa de ganho também). Mas a principal razão é ver que há uma diferença nos resultados e, portanto, algo deveria estar errado na função...

 

Olá a todos, acabei de escrever este indicador personalizado baseado no RSI.

Tenho uma idéia para usá-lo em um EA. Preciso de ajuda para escrevê-lo...

É uma estratégia de compra apenas.

Comprar em todos os sinais de up... Fechar tudo no sinal para baixo

O ideal seria que a EA aumentasse o tamanho do lote para cada sinal consecutivo sem um fechamento. (com um máximo, é claro)

O indicador funciona colocando uma seta no gráfico toda vez que o RSI cruza abaixo/abaixo de um nível definido.

seta_rsi.mq4

Arquivos anexados:
arrow_rsi.mq4  3 kb
 
airquest:
Não tenho certeza se os resultados finais serão corretos. O problema é que ao mostrar o total de negócios provenientes da função opti, você pode ver se a função está funcionando bem ou não. Também não se tem certeza de como retornar mais de um parâmetro da função dupla (você precisa retornar o saldo e a taxa de ganho também). Mas a principal razão é ver que há uma diferença nos resultados e, portanto, algo deveria estar errado na função...

airquest

Para "retornar" tantos parâmetros quanto você precisar de uma função, passe um parâmetro por referência a uma função. Algo como isto :

duplo a;

duplo b;

duplo c = testeFunção(a,b);

duplo tectFunção(double& _a,double& _b)

{

_a = 1;

_b = 2;

retorno(_a+_b);

}

após o que a e b serão atribuídos valores 1 e 2 pelo testeFunção (implicitamente "retornando" 3 valores neste caso exemplo - usei _a e _b nomes na função apenas para mostrar que eles não precisam ter o mesmo nome quando passados por referência, caso contrário, não há necessidade de fazer isso de forma alguma)

 
airquest:
Não tenho certeza se os resultados finais serão corretos. O problema é que ao mostrar o total de negócios provenientes da função opti, você pode ver se a função está funcionando bem ou não. Também não se tem certeza de como retornar mais de um parâmetro da função dupla (você precisa retornar o saldo e a taxa de ganho também). Mas a principal razão é ver que há uma diferença nos resultados e, portanto, algo deveria estar errado na função...

Olá Airquest,

Pelo que vejo... seu indicador parece estar funcionando muito bem.

Eu ainda acho que é um problema de "exibir valores"...e não qualquer problema de cálculo.

Eis o que eu vejo acontecendo no indicador...

O programa tem 2 opções - 1) Execução Normal 2) Execução Otimizada

NÃO são escolhas/ou exclusivas...

Quando a Otimização NÃO é selecionada...o programa faz apenas a Execução Normal...

Quando a Otimização é selecionada...o programa STILL faz a Execução Normal...E...então a Otimização é executada...então ele está obtendo os dois valores...

Entretanto...apenas os valores da Execução Normal são exibidos na tela Comentários...e não exibe os valores da Otimização de forma alguma.

Em anexo, meu teste mostra a tela exibida Os valores de Otimização são os mesmos que os valores da planilha...

Isto me mostra que todos os seus cálculos estão bem...

Também parece que usa o último registro da planilha para obter os valores finais da Otimização...

Também recomendo executá-lo sem outros gráficos/indicadores carregados... e usar apenas alguns valores selecionados para testar de cada vez.

Tenho mais de 20 gráficos rodando...e o MT4 se torna não-responsivo, pois ele faz seus cálculos para este indicador...

É melhor usar uma configuração MT4 limpa para executar os testes de Otimização...

Mas a boa notícia é que...não bloqueia meu sistema, pois posso fazer outras coisas enquanto ele está apertando os números e fazendo o relatório.

Enquanto isso...até onde posso dizer nas imagens abaixo...seu indicador parece funcionar muito bem...

BTW...é uma peça de codificação incrível... Muito obrigado por compartilhá-lo...!

Espero que isto ajude,

Robert

 
cosmiclifeform:
Olá Airquest, pelo que vejo... seu indicador parece estar funcionando muito bem.

De nada, muito obrigado por suas palavras. A idéia é de fato substituir a otimização do testador de estratégias mt4 (que eu acho uma porcaria e é muito lento) para testar estratégias simples. E sim, você precisa esperar um pouco para carregar e fazer o cálculo, mas pelo que vi já é mais rápido e conveniente do que uma otimização regular.

Mas, ainda acho que há um problema com o indicador e que ele não está funcionando corretamente. Substituir o texto da tela pelos resultados provenientes da otimização não mostra de forma alguma se estes resultados estão certos ou errados. É como pintar um carro enferrujado.

Eu acho que a função opti dá resultados errados. Você pode ver em sua captura de tela que os resultados no CSV dão 5'307 negócios. Isso é muito longe do telhado. Depende de quantas barras você tem em sua tela, mas não é possível que a estratégia tenha dado 5'307 negócios. Para ter certeza, você não precisa contar as setas, você pode reduzir o número de barras para testar como eu fiz nesta captura de tela (eu a defini para 100 barras) :

Você pode ver aqui que, para 100 barras, há apenas 10 trocas a serem feitas, com 4 vencedores (contando as flechas), enquanto os resultados da opti mostram 89 trocas feitas. Portanto, com base em um backtest visual, os resultados da tela estão certos (para o melhor período que a opti disse), enquanto o CSV está errado. Isto mostra que não devemos confiar nos resultados do CSV, seja para a contagem das operações OU para determinar quais são as melhores configurações.

Portanto, coloquei o problema de uma maneira mais simples. Fiz um indicador simples (anexo) que mostra na tela os resultados que saem da função dupla otimização e da função Start int (cálculo principal). Portanto, não é necessário escrever um CSV para ver que ambos os resultados são diferentes.

Com base neste indicador, minha pergunta (simples) é : POR QUE NA TERRA DOIS CÁLCULOS EXATOS (um na função Iniciar e outro na função Dupla Otimização) DÃO RESULTADOS DIFERENTES ? Se alguém pode me ajudar a entender isso, isso seria fantástico, porque eu realmente não entendo. Tanto quanto vejo, os dois são exatamente os mesmos e devem sair com os mesmos resultados. Muito obrigado.

PS : o indicador ainda está um pouco lento e você provavelmente terá que esperar alguns segundos para que ele mostre os resultados. No entanto, ele emitirá um som quando os resultados saírem.

Arquivos anexados:
sa1.png  78 kb
sa3.png  41 kb
 

Olá Airquest,

Tentei seu "Teste de Amostra", mas não consegui colocá-lo para funcionar. Eu olhei o código e ele tinha mais de 400 linhas apagadas...então deixei-o em paz.

Eu voltei a testar seu código original... e acho que estou começando a ver o que você está dizendo sobre o problema com "demasiados ofícios"...

Para continuar testando simples e rápido...eu testei usando apenas Bandas...e minimizei as configurações (Bandas 10 e Bandas 20) para ter apenas duas (2) execuções para ver os resultados mais rapidamente.

Também me concentrei no "BarsToCount", já que isso deve parecer estar diretamente relacionado ao número de negócios...

Embora eu não tenha encontrado nenhuma resposta...posso ter mais algumas pistas para vocês...

"BarsToCount"...não parece funcionar...

Eu verifiquei seu código com 1 Barra...2 Barras...e 100 Barras de Volta...

E todas tiveram exatamente os mesmos resultados...o que não deveria ser...já que mais barras deveriam ser iguais a mais trocas...e menos barras deveriam ser iguais a menos trocas.

Anexei minhas capturas de tela das 3 corridas que fiz...mudando apenas as "BarsToCount"...

Talvez esta pista o ajude a rastrear os outros problemas... Boa sorte em encontrar suas respostas.

Espero que isto ajude,

Robert

Arquivos anexados:
 

Finalmente, consegui fazer uma versão funcional. Agora os resultados da opti estão corretos e correspondem aos resultados da tela. Acabei de deixar a função dupla e colocar tudo na função Start. Portanto, agora você só tem uma opção entre executá-la no modo Testador (para que ele use as configurações padrão) ou no modo otimizador (que não vai traçar nada, mas apenas escrever um arquivo CSV). Após executar uma otimização, você pode voltar ao modo Testador e verificar se os resultados estão corretos.

Por favor, avise-me se encontrar algum problema, por PM é melhor, pois não queremos estragar este tópico. Rapazes, muito obrigado por sua ajuda. Este fórum é ótimo, as pessoas motivam e se ajudam umas às outras (na maioria das vezes) e essa é a razão pela qual eu o publico aqui. Agora vamos começar os testes

 
cosmiclifeform:
Olá Airquest,

Robert, obrigado por sua ajuda. Veja a versão que coloquei acima, agora deve funcionar.

PS : Para limitar o número de barras, você precisa transformar o UseAllBars em False. Você provavelmente não o viu.

Cumprimentos.

 

Olá Airquest,

Bom trabalho para localizá-lo e pô-lo a funcionar...!

Aguardo ansiosamente para brincar com ele esta semana...

Obrigado e tome cuidado,

Robert

Razão: