Interpretação de Código

 
Estou com um código complicado vindo de um pedido no freelance.
O código funciona, mas gostaria de entender mais ele pra saber se há alguma possível falha escondido.
Gostaria de ajuda para entender alguns trechos, como este por exemplo :
double rs[]; int count = 0; int lastIndex = -1;
    while (true)
    {
      if (iBars(NULL, 0)<(count+1)*10) break;
      if (CopyBuffer(hrsi, 0, count*10+1, 10, tr)<10) return (-2);
      ArrayResize(rs, ArraySize(rs)+10);
      for (int i = 0; i < 10; i ++)
      {
        rs[i+count*10] = tr[10-i-1];
        if (rs[i+count*10]>=RsiSellResetLevel) { lastIndex = i+count*10; break; }
      }
      count ++;
      if (lastIndex!=-1) break;
    }

hrsi é o buffer de RSI.

tr é declarado um pouco mais acima. Double tr[].

 
Lucas Tavares:
Estou com um código complicado vindo de um pedido no freelance.
O código funciona, mas gostaria de entender mais ele pra saber se há alguma possível falha escondido.
Gostaria de ajuda para entender alguns trechos, como este por exemplo :

hrsi é o buffer de RSI.

tr é declarado um pouco mais acima. Double tr[].

Olá @Lucas Tavares, no mínimo é um bom exercício para quem está aprendendo MQL5.
Também não vi muita lógica em algumas partes, pois todo objetivo parece ser identificar determinado nível do indicador, e isso me parece estar sendo feito de forma redundante e no meu entender perigosa, com vários pontos de risco de entrar em loop.
Seja como for, se esse código estiver operando em conta real,  sua preocupação me parece muito apropriada e eu colocaria no mínimo um limitador de valor máximo para a variável cont.
Sds.,
Rogério Figurelli

 
Rogerio Figurelli:
Olá @Lucas Tavares, no mínimo é um bom exercício para quem está aprendendo MQL5.
Também não vi muita lógica em algumas partes, pois todo objetivo parece ser identificar determinado nível do indicador, e isso me parece estar sendo feito de forma redundante e no meu entender perigosa, com vários pontos de risco de entrar em loop.
Seja como for, se esse código estiver operando em conta real,  sua preocupação me parece muito apropriada e eu colocaria no mínimo um limitador de valor máximo para a variável cont.
Sds.,
Rogério Figurelli

O caso apresentado pelo @Lucas Tavares reforça  a importância do código bem comentado.

[ ]'s

 
Joscelino Celso de Oliveira:

O caso apresentado pelo @Lucas Tavares reforça  a importância do código bem comentado.

[ ]'s

Perfeito Joscelino, bem observado.
Sds.,
Rogério Figurelli
 
Meu código está funcionando como deveria, mas aparentemente pelos motivos errados.
Ele deveria contar topos e fundos, e dar entrada em situação XYZ específica, mas só há contagem após XYZ acontecer, e aí ele "olha pra trás" e conta os topos, por meio deste código que deixei aqui.
Aparentemente ele só conta os 10 ultimos candles, ou algo assim.
Esta é a parte simples do código, no mais está um caos. Mas funcionando.

Já tentei algumas vezes achar alguém pra reescrever ele, no freelance eu tentei de todas as formas, mas ninguém aceita o pedido.

Se tiverem sugestões de alguém que poderia reescrever, estou disposto à fazer o pedido via freelance.
 
Lucas Tavares:
Meu código está funcionando como deveria, mas aparentemente pelos motivos errados.
Ele deveria contar topos e fundos, e dar entrada em situação XYZ específica, mas só há contagem após XYZ acontecer, e aí ele "olha pra trás" e conta os topos, por meio deste código que deixei aqui.
Aparentemente ele só conta os 10 ultimos candles, ou algo assim.
Esta é a parte simples do código, no mais está um caos. Mas funcionando.

Já tentei algumas vezes achar alguém pra reescrever ele, no freelance eu tentei de todas as formas, mas ninguém aceita o pedido.

Se tiverem sugestões de alguém que poderia reescrever, estou disposto à fazer o pedido via freelance.

Bom dia Lucas,

esse trecho de código não conta nenhum topo / fundo, entendi que esse trecho faz o seguinte:

1) Popula o Array rs[] de 10/10 elementos a partir Array Tr[], começando em Tr[1] até o limite da qtd barras da janela de preços.

2) Interrompe a carga se encontrar dentre os últimos 10 elementos de rs[]  algum com valor superior a RsiSellResetLevel

 

Faz todo sentido, Rogério.

Ele analisa os ultimos candles para verificar se o RSI não fugiu de um valor que determino para parar de contar os topos e zerar.

Interessante que o programador poderia ter feito de infinitos métodos, e fez assim, tão cheio de vai e vem...
Realmente, comentar o código é vida.

Razão: