Ajuda na codificação - página 407

 

Olá pessoal, preciso de sua ajuda em um indicador que eu fiz. Basicamente, é um testador que deve ser usado apenas para otimizar as configurações de uma estratégia (e também para testar seus desempenhos). No modo teste (Otimizar voltado para Falso), ele funciona muito bem e dá a taxa de ganho e o equilíbrio para os parâmetros padrão. Mas tenho dificuldade em fazer a função de otimização funcionar. O resultado para melhores configurações sempre acaba sendo o valor mais baixo (PeriodMin). Será que é assim que estou usando os buffers declarados dentro da função dupla de otimização (veja as linhas 616 e 617, e as linhas 746 e 747 usadas para liberar os buffers)? Acho que não é só isso, porque se eu não usar estes buffers (transformando AllowMultipleOpenTrades em False), ainda assim não dá resultados coerentes. Se alguém puder dar uma olhada e ajudar, eu ficaria grato. Muito obrigado.

Arquivos anexados:
 
airquest:
Não tenho certeza do que você está tentando fazer. Talvez isto ?

Não, receio que não. Deixe-me ilustrar com uma captura de tela. Na seta superior rosa você pode ver claramente que a barra vermelha do LOW é muito maior do que a barra azul do HIGH. No entanto, a saída correspondente no indicador Linear Bar Diff está acima de zero!! (veja a seta rosa inferior). Quando a barra vermelha da barra baixa é maior que a azul da barra alta, a diferença de ambas as barras deve ser negativa, não positiva. As setas verdes mostram outro exemplo do mesmo problema.

Atenciosamente

Arquivos anexados:
example.png  25 kb
 
mrcodix:
Não, receio que não. Deixe-me ilustrar com uma captura de tela. Na seta superior rosa você pode ver claramente que a barra vermelha do BAIXO é muito maior do que a barra azul do ALTO. No entanto, a saída correspondente no indicador Linear Bar Diff está acima de zero!! (veja a seta rosa inferior). Quando a barra vermelha da barra baixa é maior que a azul da barra alta, a diferença de ambas as barras deve ser negativa, não positiva. As setas verdes mostram outro exemplo do mesmo problema.

Então talvez isto ? Você precisa ver que os amortecedores 3 e 4 não estão relacionados ao VS High VS Open e Low VS Open, mas ao VS Open Close.

Arquivos anexados:
 
mrcodix:
Não, receio que não. Deixe-me ilustrar com uma captura de tela. Na seta superior rosa você pode ver claramente que a barra vermelha do LOW é muito maior do que a barra azul do HIGH. No entanto, a saída correspondente no indicador Linear Bar Diff está acima de zero!! (veja a seta rosa inferior). Quando a barra vermelha da barra baixa é maior que a azul da barra alta, a diferença de ambas as barras deve ser negativa, não positiva. As setas verdes mostram outro exemplo do mesmo problema.

Ou isto é com a opção de usar VS Alto/Baixo VS Aberto ou Fechado VS Aberto.

Arquivos anexados:
 
airquest:
Olá pessoal, preciso de sua ajuda em um indicador que eu fiz. Basicamente, é um testador que deve ser usado apenas para otimizar as configurações de uma estratégia (e também para testar seus desempenhos). No modo teste (Otimizar voltado para Falso), ele funciona muito bem e dá a taxa de ganho e o equilíbrio para os parâmetros padrão. Mas eu tenho dificuldade em fazer a função de otimização funcionar. O resultado para melhores configurações sempre acaba sendo o valor mais baixo (PeriodMin). Será que é assim que estou usando os buffers declarados dentro da função dupla de otimização (veja as linhas 616 e 617, e as linhas 746 e 747 usadas para liberar os buffers)? Acho que não é só isso, porque se eu não usar estes buffers (transformando AllowMultipleOpenTrades em False), ainda assim não dá resultados coerentes. Se alguém puder dar uma olhada e ajudar, eu ficaria grato. Muito obrigado.

airquest

Suas arrays recTP[] e recSL[] na linha 602 não são redimensionadas (são tamanho 0, a forma como são declaradas no início do loop), Tente redimensioná-las antes do loop for()

 
airquest:
Ou isto é com a opção de usar Alto/Baixo VS Abrir ou Fechar VS Abrir.

Não, isto é o que eu faço.

int start()

{

int counted_bars=IndicatorCounted();

int i;

//int UpDays, DownDays, NeutralDays;

BarH duplo, BarL, BarC;

//----

for(i=0; i<Bars; i++)

{

BarH = Alto - Aberto;

BarL = Aberto - Baixo;

BarC = Fechado - Aberto;

//if(BarC>0) UpDays +=1;

//else if(BarC<0) DownDays +=1;

//else if(BarC==0) NeutralDays +=1;

ExtMapBuffer1 = BarH;

ExtMapBuffer2 = BarL;

ExtMapBuffer5 = BarH - BarL;

}

//----

retorno(0);

}

Eu mesmo descobri isso agora, mas obrigado pelo esforço de qualquer forma.

Alguém pode me dizer por que este indicador: Razão de velas " Metatrader Files não mostra a saída para os últimos castiçais?? Não parece fazer isso na foto que é mostrada.

 
mladen:
airquest Your arrays recTP[] and recSL[] at line 602 are not resized (they are size 0, the way they are declared at the beginning of the loop), Try resizing them before the for() loop

Obrigado Mladen, eu fiz isso, mas ainda assim a otimização não dá resultados corretos. Se eu transformar a otimização em True, ela dá o valor mais baixo como a melhor configuração (período de banda = 5), enquanto no Falso e padrão período de banda em 40, por exemplo, ela mostra uma melhor taxa de ganho do que com 5. basicamente a idéia da otimização é encontrar quais configurações dão a melhor taxa de ganho. Já li o código cem vezes e não consigo achar o que está errado. se você tem alguma idéia, senão talvez seja uma causa perdida rs.

Isto é com o ArrayResize adicionado. Também corrigiu alguns erros, mas ainda não dando os mesmos resultados que sem otimização:

Arquivos anexados:
 
airquest:
Obrigado Mladen, eu fiz isso, mas ainda assim a otimização não dá resultados corretos. Se eu transformar o Optimize em True, ele dá o valor mais baixo como a melhor configuração (período de banda = 5), enquanto no False e default BandsPeriod em 40, por exemplo, ele mostra uma melhor taxa de ganho do que com 5. basicamente a idéia da otimização é encontrar quais configurações dão a melhor taxa de ganho. Eu li o código cem vezes e não consigo achar o que está errado. se você tem alguma idéia, caso contrário talvez seja uma causa perdida rs. Isto é com o ArrayResize adicionado. Também corrigi alguns bugs, mas ainda não dando os mesmos resultados que sem otimização:

Não sei por que, mas ao verificar os resultados escrevendo um arquivo CSV, o total de negócios, ganhos e saldo são multiplicados por um fator de 10 : http://clip2net.com/s/38YHODl...

 
airquest:
Não sei por que, mas ao verificar os resultados escrevendo um arquivo CSV, o total de negócios, ganhos e saldo são multiplicados por um fator de 10 : Microsoft Excel - BB+CCI_FX-EURUSD-H1-SA-1.csv...

airquest

Até onde eu vejo o total de negócios e ganhos são OK (caso contrário eles teriam que terminar em 0)

 
mladen:
airquestAs até onde eu vejo o total de negócios e ganhos são OK (caso contrário eles teriam que terminar em 0)

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

- Configurações padrão (sem otimização, WriteCSV to True) : http://clip2net.com/s/38YSV53

- Otimizar conjunto para True, PeriodMin para 20 e PeriodMax para 20 : http://clip2net.com/s/38YT2hN

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.

Razão: