Projeto do assessor

 
Olá.
À medida que a quantidade de código cresce, às vezes fica difícil e confusa.
Já vi código EA com um grande número de linhas de código, eu me pergunto como os EAs complexos são projetados, talvez existam algumas ferramentas ou técnicas para lidar com algoritmos tão complexos?
 
Gregory Kovalenko:
Olá.
À medida que a quantidade de código cresce, às vezes fica difícil e confusa.
Já vi código EA com um grande número de linhas de código, eu me pergunto como os EAs complexos são projetados, talvez existam algumas ferramentas ou técnicas para trabalhar com algoritmos tão complexos...

Quanto é demais? É assim tanto que não pode ser decomposto em arquivos?

 
Gregory Kovalenko:
Olá.
À medida que a quantidade de código cresce, às vezes fica difícil e confusa.
Já vi código EA com um grande número de linhas de código, me pergunto como os EAs complexos são projetados, talvez existam algumas ferramentas ou truques para lidar com algoritmos tão complexos...
Sim, é muito simples: você precisa documentar com precisão as funções individuais e alocá-las em um arquivo separado. O arquivo principal encolherá imediatamente e se tornará mais legível
 

Dois princípios básicos:

1. Dividir o código em funções. Uma função deve ser mais ou menos logicamente completa e não deve ser mais de uma tela a ser coberta em um único relance.

2. Reduzir o número de variáveis globais. A partir de variáveis globais, é desejável utilizar apenas parâmetros que não mudem enquanto o programa estiver em execução.

...e muito mais:

3. Programação orientada a objetos.

4. Colocar o código em vários arquivos (isto complica a depuração, mas há um sentido nele).

 
STARIJ:
É muito simples: precisamos documentar com precisão as funções individuais e alocá-las em um arquivo separado. O arquivo principal se tornará imediatamente menor e mais legível

Sempre tenho um arquivo mq4/mq5 e um monte de arquivos mqh com classes, para cada classe um arquivo separado. Em geral, é assim que eles fazem no desenvolvimento industrial. Sem arquivos com quilômetro de comprimento onde tudo está misturado.

Às vezes você pode ver uma obra-prima onde toda a EA é embalada no OnTick com os mesmos pedaços de código para abrir pedidos 20 vezes cada um nesta folha feia. Eu quero tirar o saco de vômito imediatamente ))

 
Gregory Kovalenko:
Olá.
À medida que a quantidade de código cresce, às vezes fica difícil e confusa.
Já vi código EA com um grande número de linhas de código, eu me pergunto como os EAs complexos são projetados, talvez existam algumas ferramentas ou truques para trabalhar com algoritmos tão complexos...

Não escreva funções que são sempre constantes e nunca mudam neste estilo

void CloseOrders(int cmd)
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY && cmd==OP_BUY)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue))
                 {
                  Print("Order BUY not close! Error = ",GetLastError());
                 }
              }
            if(OrderType()==OP_SELL && cmd==OP_SELL)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red))
                 {
                  Print("Order SELL not close! Error = ",GetLastError());
                 }
              }
           }
        }
     }
  }

Escreva-os concisamente, ninguém nunca olha para eles de qualquer maneira, e ocupam a metade do espaço.

void CloseOrders(int cmd) {
 for(int i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,SELECT_BY_POS)) {
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY && cmd==OP_BUY) {
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue)) Print("Order BUY not close! Error = ",GetLastError());
    }
     if(OrderType()==OP_SELL && cmd==OP_SELL) {
      if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red)) Print("Order SELL not close! Error = ",GetLastError());
    }
}}}}


Comente o código o tempo todo, o que este pedaço de código é responsável, não é difícil, e agora você sempre saberá o que é o código, e reduzirá o tempo para estudá-lo

 
Vitaly Muzichenko:

Não escreva funções que são sempre constantes e nunca mudam neste estilo

Escreva-os concisamente, ninguém nunca olha para eles de qualquer maneira, e ocupam a metade do espaço.

Comente o código o tempo todo, o que este pedaço de código é responsável, não é difícil, e agora você sempre saberá o que é o código, e reduzirá o tempo para estudá-lo

O comentário deve ocupar a metade do texto do programa

 
Vitaly Muzichenko:

Não escreva funções que são sempre constantes e nunca mudam neste estilo

Escreva-os concisamente, ninguém nunca olha para eles de qualquer maneira, e ocupam a metade do espaço.

Comente o código o tempo todo, o que este código é responsável por ele, não é difícil, e aqui na revisão sempre saberá o que o código, e reduzirá o tempo para estudá-lo

A rearranjo dos parênteses não faz com que o atraso seja menor. Antes de dar conselhos, pelo menos aumente seu nível para um nível médio.

 
STARIJ:

O comentário deve ocupar metade do texto do programa

Bem, nesse caso, 90% do código deve conter comentários. E você precisa do máximo de código sem sentido e mal legível possível para que possa fazer mais comentários!
 
Vasiliy Sokolov:
Não, bem, então 90% do código são comentários. E você precisa do máximo código inútil e mal legível possível, para que você possa fazer mais comentários!

Suas idéias também são dignas de nota. Você deveria discuti-los com mais freqüência

 

Há muito tempo que eu venho pedindo. Se no mcl5 você obtiver dados indicadores de arquivos, classes, a otimização será mais rápida?

Ou seja, nenhum cabo indicador é chamado no código do próprio Expert Advisor.