Um checklist dos riscos dos robôs antes de operar em conta real - página 5

 
figurelli :

Estou acrescentando um novo item no checklist, que é o segunte: 17.Existe proteção de limite nos loops do código fonte?

Isso se deve ao que tenho percebido com alguns clientes, e seus códigos fonte, onde não existe nenhuma proteção de limites dentro dos loops utilizados.

Para maior entendimento, vamos analisar um exemplo de código fonte, sem proteção, como o abaixo:

Aparentemente não existe nenhum problema nesse loop, mas o que aconteceria se por algum motivo o valor da variável 'periodo_media' fosse alterado de forma errônea para um valor absurdamente alto?

Em termos técnicos, chamamos essa como uma situação de overflow. 

Para proteger contra situações não esperadas, principalmente em conta real, seria mais prudente limitar o valor de varredura e testar as situações de overflow, como por exemplo no código abaixo:

Nesse caso, além de uma proteção contra variação errônea do valor da variável 'periodo_media', o sistema irá alertar o trader quando a situação de não conformidade ocorrer.

Sem dúvida é mais trabalhoso pensar e fazer dessa forma, mas considero essencial esse tipo de proteção em qualquer código de robô.

Se você não tem certeza que periodo_media é constante, a melhor prática em programação é a contagem decrescente.

   for ( int periodo=periodo_media-1; periodo>= 0 ; periodo--) 
     {
       // ...
     }
 
angevoyageur:

Se você não tem certeza que periodo_media é constante, a melhor prática em programação é a contagem decrescente.

O que muda isso se 'periodo_media' assumir por engano um número muito alto, acima do máximo esperado?
 
figurelli :
O que muda isso se 'periodo_media' assumir por engano um número muito alto, acima do máximo esperado?
Adicionar um cheque antes do loop.
 
angevoyageur:
Adicionar um cheque antes do loop.
Discordo completamente, a solução que você propõe, invertendo a ordem, como dentro das melhores práticas, não resolve, apenas troca seis por meia dúzia, e o problema e risco permanecem para quem utilizar ela.

 
figurelli :
Discordo completamente, a solução que você propõe, invertendo a ordem, como dentro das melhores práticas, não resolve, apenas troca seis por meia dúzia, e o problema e risco permanecem para quem utilizar ela.

Discordo com o quê? Qual o risco? Não há nenhum risco em tudo, apenas em sua mente.

 
angevoyageur:

Discordo com o quê? Qual o risco? Não há nenhum risco em tudo, apenas em sua mente.

Já foi explicado o que está na minha mente, não vou ficar aqui discutindo com você coisas que considero sem pé nem cabeça.
 
figurelli :
Já foi explicado o que está na minha mente, não vou ficar aqui discutindo com você coisas que considero sem pé nem cabeça.

Você escreveu que você não concordar com o meu código, e ainda há um risco:

    if(periodo_media>MAX_VALUE) periodo_media=x;                   // Add this test if your are unsure of periodo_media
    for ( int periodo=periodo_media-1; periodo>= 0 ; periodo--) 
     {
       // ...
     }

Na ciência da computação (programação) como em qualquer ciência você tem que provar o que diz. Repetindo "Já foi explicado o que está na minha mente" não é um argumento.

Mas parece que você não aceita contradição em qualquer um dos seus temas.

PS: Para todos os leitores, desculpe se a tradução é ruim, eu estou usando a tradução automática.

 
angevoyageur:

Você escreveu que você não concordar com o meu código, e ainda há um risco:

Na ciência da computação (programação) como em qualquer ciência você tem que provar o que diz. Repetindo "Já foi explicado o que está na minha mente" não é um argumento.

Mas parece que você não aceita contradição em qualquer um dos seus temas.

PS: Para todos os leitores, desculpe se a tradução é ruim, eu estou usando a tradução automática.

Ah, você mudou o seu código e colocou uma nova linha, assim não vale :-)
 
figurelli :
Ah, você mudou o seu código e colocou uma nova linha, assim não vale :-)

Eu não muda nada.

angevoyageur:
Adicionar um cheque antes do loop.
Discordo completamente, a solução que você propõe, invertendo a ordem, como dentro das melhores práticas, não resolve, apenas troca seis por meia dúzia, e o problema e risco permanecem para quem utilizar ela.
 
angevoyageur:
Adicionar um cheque antes do loop.

Note, se você afirma isso, está reconhecendo que faltou essa parte no seu código, e que a simples reversão não era suficiente.

Além disso está afirmando que é necessário fazer um 'cheque' antes do loop, reconhecendo a necessidade apontada no novo item proposto, portanto o risco não estava apenas em minha mente, estava na sua também e percebeu, só depois de criticar, que realmente precisava desse código.

Seja como for, para mim é suficiente que você reconheça que no seu código original faltava esse 'cheque' e que sua premissa de inversão não era suficiente, porque o mais importante não é a nossa divergência, mas a preocupação em passarmos uma mensagem correta para os desenvolvedores que utilizam ou utilizarem loops como esses em contas reais para se protegerem contra possíveis situações de overflow, o que eu realmente considero uma situação de risco.


Razão: