Discussão do artigo "Como se tornar um bom programador (Parte 1): cinco hábitos que devem ser abandonados para programar melhor em MQL5" - página 2

 

Bom artigo. O conceito do que fazer e do que não fazer está bem explicado.

Os erros em exemplos específicos, nesse caso, não reduzem o valor do artigo, pois sua tarefa é ajudar as pessoas a otimizar seu estilo de trabalho. Essa tarefa foi resolvida de forma brilhante, tudo foi escrito da forma mais simples e clara possível.

Obrigado, Omega!

 
fxsaber #:

  • O primeiro valor da variável no loop está errado.
  • Em vez de um if, há dois.
  • A comparação de strings (caractere) deve vir no final.
  • As expressões bool não estão entre colchetes.
  • A variável mágica está faltando nas funções de entrada.
  • O objeto de posição não foi criado.
Eu não vi o erro da primeira vez até que ele fosse publicado porque não o codifiquei no metaeditor, mas apenas enquanto o escrevia, mas não é um grande problema porque, a propósito, todos os exemplos de codificação usados deveriam ter especificado apenas
 

Interessante...

fxsaber #:

  • O primeiro valor de variável no loop está incorreto.
  • Em vez de um if, há dois ifs.
  • A comparação de strings (símbolo) deveria estar no final.
  • As expressões bool não estão marcadas com colchetes.
  • A variável Magic está faltando nas funções de entrada.
  • O objeto de posição não é criado.

Tornando-se um bom programador (parte 1): livrando-se de cinco hábitos para se tornar um programador MQL5 melhor

 
Aliaksandr Hryshyn #:

Interessante....


:)
 
Aliaksandr Hryshyn #:

Interessante...

Como se tornar um bom programador (parte 1): livrando-se de cinco hábitos para se tornar um programador MQL5 melhor

Isso é freelancer, os clientes geralmente não entendem o código e as avaliações ruins não são pela qualidade do código. Eu o escrevi, o programa não deu lucro, então aqui está a avaliação.

 

Uma leitura obrigatória para todos (e ainda mais para o autor do artigo): 97 Things Every Programmer Should Know (97 coisas que todo programador deve saber)

GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
  • github.com
Pearls of wisdom for programmers collected from leading practitioners. - GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitio...
 
Fonte:
int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

A variante funciona mais rápido e, em minha opinião, é mais clara:

int PositionsByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal()-1; i>=0; i--)
   {
      if(!m_position.SelectByIndex(i))
         return (INVALID_HANDLE);

      if(m_position.PositionType()!=type ||
         m_position.Magic()!=MagicNumber ||
         m_position.Symbol()!=Symbol())
         continue;

      counter++; 
   }
   return counter;
  }

1. o erro na inicialização do loop é que 1 deve ser subtraído da quantidade quando fazemos o backtracking.

2. Se não foi possível obter a posição pelo índice da função da biblioteca, é necessário sair do loop com um erro e, em seguida, se for necessário processar ou repetir a função novamente, caso contrário, há o risco de obter uma quantidade não confiável, e você ainda trabalha com finanças, e às vezes há grandes quantidades na posição, e uma coisa tão pequena pode levar a uma perda.

3. Primeiro você deve verificar as variáveis bool, depois as enumerações ENUM e só depois verificar int, double, string; se a verificação falhar, passe imediatamente para o próximo elemento do loop.

Se você fizer operações de comparação por meio de &&, o programa necessariamente verificará cada condição.

4. O nome da função também é importante, fica melhor PositionsByType, parece uma ninharia, mas quando você for usar essa função, não precisará ir à biblioteca e seu índice, basta começar a digitar o nome padrão Positions, e você terá várias opções para chamar PositionsTotal, PositionsByType.....

5. Você precisa respeitar a largura do código para não usar a rolagem horizontal, pois isso reduz muito a legibilidade e a velocidade de desenvolvimento.


 
Você está errado quanto a isso:
"Se você fizer operações de comparação com &&, o programa necessariamente verificará cada condição.".
A comparação é realizada em ordem até o primeiro falso.
A propósito, em tais situações, você também pode levar em conta a probabilidade de a condição não ser atendida.

 
Aliaksandr Hryshyn #:
Você está errado quanto a isso:
"Se você fizer operações de comparação via &&, o programa necessariamente verificará cada condição".
A comparação é feita em ordem até o primeiro falso.
A propósito, em tais situações, você também pode levar em conta a probabilidade de a condição não ser atendida.

Sim, você me corrigiu corretamente, a verificação será realizada até o primeiro falso, o principal é que os tipos de dados pequenos devem ser os primeiros.

Caso as condições consistam em funções, a menor delas deve ser a primeira e até a maior, do ponto de vista dos recursos consumidos, mas sem quebrar a lógica do programa...

Uso essa técnica em todos os meus projetos, e o ganho de velocidade é perceptível para um testador em modo de otimização.

[Excluído]  
Vitaly Muzichenko #:

Isso é trabalho freelancer, os clientes geralmente não entendem o código, e as avaliações ruins não se referem à qualidade do código. Você o escreveu, o programa não lhe deu lucro, essa é a avaliação.

Você informa o cliente sobre isso com antecedência ou o dinheiro é mais importante?