Lógica de aprendizagem - página 13

 
xrust:

sempre matou a lógica de tal construção em operandos cíclicos :

Sempre fui morto por um ninho de "se" - por que fazer tal ninho em um espaço vazio?

completamente incompreensível ...

Se você não entender, eu só posso simpatizar com isso.

Se você me perguntar, a lógica padrão é mais clara e mais compreensível:

Sua lógica não é padrão. É errado.
 
xrust:

Acho muito mais lógico colocar colchetes ou em uma linha ou em uma coluna. É muito difícil entender o código no qual não está claro onde um bloco começa ou termina. Bem, se o objetivo de tal formatação é esconder o sentido do código dos inimigos, então o objetivo é alcançado.
 
TheXpert:
Sempre fui morto por um ninho, se é - por que fazer tal ninho na fonte?

Se não estiver claro, eu só posso simpatizar.

Sua lógica não é padrão. Está errado.

Correção, é apenas uma frase que se destaca :-)

--

Lógica não convencional não significa que esteja errada.

--

Quando o caminho da lógica não padrão é mais curto do que o da lógica padrão -- com condições iguais de entrada e saída --

então para o inferno com as normas!

Então eu sou a favor da lógica não-padronizada.

--

sim, o código de crocante é difícil de ler...

...embora eu tenha visto código muito curto e difícil de ler ...

para manutenção - a replicação deste código não é ideal .

Se você o escreve para circulação, geralmente você tem que cuidar de seus colegas para mantê-lo.

se você escrever código com a expectativa de que alguém o quebre!

Idealmente, é LOGIC passar pelo trabalho - escrever corretamente, mas fazer um código que não seja legível.

 
drknn:

Eu não entendo onde está o furo? E por que o segundo? Se é o segundo, então onde está o primeiro?

O código que foi repreendido realmente não é super, é perfeito para confundir!

 

2 Vinin . Victor, por que chamar a função de seleção de pedidos o tempo todo? É mais fácil preencher todas as variáveis em um loop.

 

Eu acho que é muito bom:

int time;
int FindLastOpenTime(int type, int imagic)
{
  
  for(int i = OrdersTotal() -1 ;i>=0;i--)
  {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        if(OrderSymbol()==Symbol() && OrderType()==type && OrderMagicNumber()==magic && OrderOpenTime()>time)
                 {     
                    time=OrderOpenTime();
                 }
  }
  return(time);
}  
 

Na MQL, o comportamento dos && e || operadores é diferente do que em C++, portanto, faz sentido separar as condições.

FION:

2 Vinin - Victor, por que chamar a função de seleção de pedidos o tempo todo? É mais fácil preencher todas as variáveis em um loop.

Depende de todos.
 
TheXpert:

...Depende.


Está claro. De qualquer forma, qual é o objetivo da otimização do código? Ao reduzir o número de linhas? Vejo o único sentido em aumentar a velocidade do código, e isto pode ser alcançado reduzindo o número de chamadas de funções cíclicas, por exemplo. Ou pela exclusão de repetições de cálculo de indicadores. Aproximadamente assim.
 
FION:

Só vejo o interesse em aumentar a velocidade do código

De modo geral, a velocidade não é crucial em 90% dos casos. O objetivo é inicialmente fazer o código para que seja o mais fácil de construir e ler possível.

Então, se o tempo é crucial, otimizamos a velocidade.

 

Transferindo daqui para

int AnaliseFunc (string sy, int tf)
{
   
   CurAsk   =MarketInfo(Symbol(),MODE_ASK);
   CurBid   =MarketInfo(Symbol(),MODE_BID);
   OpnPrice =iOpen(NULL,PERIOD_M5,0);
   OpnPrice1=iOpen(NULL,PERIOD_M5,1);
   ClsPrice1=iClose(NULL,PERIOD_M5,1);
         
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB_1  =iCustom(sy,tf,"BB_MA",13,1,1,1),
   BB_2  =iCustom(sy,tf,"BB_MA",13,1,1,2),
   BB_3  =iCustom(sy,tf,"BB_MA",13,1,1,3),
   AO1   =iAO(sy,tf,1),
   AO2   =iAO(sy,tf,2),
   AO3   =iAO(sy,tf,3),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8)*1000,
   AC2   =NormalizeDouble(iAC(sy,tf,2),8)*1000,
   AC3   =NormalizeDouble(iAC(sy,tf,3),8)*1000,
   AC4   =NormalizeDouble(iAC(sy,tf,4),8)*1000,
   AC5   =NormalizeDouble(iAC(sy,tf,5),8)*1000,
   SpMan1=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,1),
   SpMan2=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,2),
   DeM_1 =iDeMarker(sy,tf,14,1),
   DeM_2 =iDeMarker(sy,tf,14,2),
   Mom_1 =iMomentum(sy,tf,14,PRICE_CLOSE,1),
   Mom_2 =iMomentum(sy,tf,14,PRICE_CLOSE,2),
   Mom_3 =iMomentum(sy,tf,14,PRICE_CLOSE,3);
   
//---------------- Проверка на разворот BB_MA -------------------------------------------------------   
   
   if (BB_1>BB_2 && BB_2<=BB_3 && BB_1<0)                               // Найден разворот BB вверх
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =true;  TrBBTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrBBTurnUP_M5 =true;  TrBBTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrBBTurnUP_M15=true;  TrBBTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrBBTurnUP_M30=true;  TrBBTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrBBTurnUP_H1 =true;  TrBBTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrBBTurnUP_H4 =true;  TrBBTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrBBTurnUP_D1 =true;  TrBBTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrBBTurnUP_W1 =true;  TrBBTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrBBTurnUP_MN =true;  TrBBTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
   if (BB_1<BB_2 && BB_2>=BB_3 && BB_1>0)                               // Найден разворот BB вниз
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =false;  TrBBTurnDN_M1=true;      // Флаг разворота вниз на М1
            case 5:     TrBBTurnUP_M5 =false;  TrBBTurnDN_M5=true;      // Флаг разворота вниз на М5
            case 15:    TrBBTurnUP_M15=false;  TrBBTurnDN_M15=true;     // Флаг разворота вниз на М15 
            case 30:    TrBBTurnUP_M30=false;  TrBBTurnDN_M30=true;     // Флаг разворота вниз на М30 
            case 60:    TrBBTurnUP_H1 =false;  TrBBTurnDN_H1=true;      // Флаг разворота вниз на H1
            case 240:   TrBBTurnUP_H4 =false;  TrBBTurnDN_H4=true;      // Флаг разворота вниз на H4
            case 1440:  TrBBTurnUP_D1 =false;  TrBBTurnDN_D1=true;      // Флаг разворота вниз на D1
            case 10080: TrBBTurnUP_W1 =false;  TrBBTurnDN_W1=true;      // Флаг разворота вниз на W1
            case 43200: TrBBTurnUP_MN =false;  TrBBTurnDN_MN=true;      // Флаг разворота вниз на MN
         }
      }
//---------------------- Проверка на разворот Momentum -----------------------------------------------
   
   if (Mom_1>Mom_2 && Mom_2<=Mom_3 && Mom_1<100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =true;  TrMomTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =true;  TrMomTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=true;  TrMomTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=true;  TrMomTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =true;  TrMomTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =true;  TrMomTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =true;  TrMomTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =true;  TrMomTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =true;  TrMomTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
      
   if (Mom_1<Mom_2 && Mom_2>=Mom_3 && Mom_1>100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =false;  TrMomTurnDN_M1=true;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =false;  TrMomTurnDN_M5=true;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=false;  TrMomTurnDN_M15=true;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=false;  TrMomTurnDN_M30=true;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =false;  TrMomTurnDN_H1=true;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =false;  TrMomTurnDN_H4=true;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =false;  TrMomTurnDN_D1=true;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =false;  TrMomTurnDN_W1=true;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =false;  TrMomTurnDN_MN=true;      // Флаг разворота вверх на MN
         }
      }
Razão: