Logique d'apprentissage - page 13

 
xrust:

a toujours tué la logique d'une telle construction en opérandes cycliques :

Les "if" imbriqués m'ont toujours tué - pourquoi faire une telle imbrication dans un espace vide ?

complètement incompréhensible ...

Si vous ne le comprenez pas, je ne peux que compatir.

Si vous voulez mon avis, la logique standard est plus claire et plus compréhensible :

Votre logique n'est pas standard. C'est faux.
 
xrust:

Je trouve qu'il est beaucoup plus logique de mettre les parenthèses soit sur une ligne, soit dans une colonne. Il est très difficile de comprendre un code dans lequel on ne sait pas clairement où commence ou finit un bloc. Si le but d'un tel formatage est de cacher le sens du code aux ennemis, alors le but est atteint.
 
TheXpert:
J'ai toujours été découragé par les ifs imbriqués - pourquoi faire une telle imbrication à la source ?

Si ce n'est pas clair, je ne peux que compatir.

Votre logique n'est pas standard. C'est faux.

Correction, c'est juste une phrase qui ressort :-)

--

Une logique non conventionnelle ne signifie pas qu'elle est fausse.

--

Lorsque le chemin de la logique non standard est plus court que celui de la logique standard - à conditions d'entrée et de sortie égales -...

alors au diable les normes !

Alors je suis pour une logique non standard.

--

oui le code crunch est difficile à lire...

...bien que j'aie vu des codes très courts et difficiles à lire ...

pour la maintenance - la réplication ce code n'est pas idéal .

Si vous l'écrivez pour le diffuser, vous devez généralement vous occuper de vos collègues pour l'entretenir .

si vous écrivez du code en vous attendant à ce que quelqu'un le casse !

Idéalement, il est LOGIQUE de se donner du mal - d'écrire un code correct mais de le rendre illisible.

 
drknn:

Je ne comprends pas où se trouve la perforation ? Et pourquoi le deuxième ? Si c'est le second, alors où est le premier ?

Le code qui a été grondé n'est pas vraiment super, il est parfait pour confondre !

 

2 Vinin . Victor, pourquoi appeler la fonction de sélection des commandes tout le temps ? Il est plus facile de remplir toutes les variables dans une seule boucle.

 

Je pense que c'est assez bon :

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);
}  
 

En MQL, le comportement des opérateurs && et || est différent de celui du C++, il est donc logique de séparer les conditions.

FION:

2 Vinin - Victor, pourquoi appeler la fonction de sélection des commandes tout le temps ? Il est plus facile de remplir toutes les variables dans une seule boucle.

C'est à chacun de décider.
 
TheXpert:

...ça dépend.


C'est clair. Quel est l'intérêt de l'optimisation du code de toute façon ? En réduisant le nombre de lignes ? Pour moi, le seul sens est d'augmenter la vitesse du code, ce qui peut être réalisé en réduisant le nombre d'appels de fonctions cycliques, par exemple. Ou en excluant les répétitions de calcul des indicateurs. A peu près comme ça.
 
FION:

Je ne vois que l'intérêt d'augmenter la vitesse du code

Dans l'ensemble, la vitesse n'est pas cruciale dans 90 % des cas. L'objectif est de concevoir le code de manière à ce qu'il soit aussi facile à construire et à lire que possible.

Ensuite, si le temps est crucial, nous optimisons la vitesse.

 

Transfert d'ici d'ici

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
         }
      }