[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 477

 
Dimka-novitsek:
Voilà, je suis désolé... J'ai revérifié les crochets huit fois - et bien, ils sont équilibrés ! Équilibré ! Ou le sont-ils ?


Dans ce code :

            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

déplacez les guillemets (ceux qui sont à la fin de la ligne).

 
Ouais... Bien.
 
Ouf ! !! Ça n'aide pas. Ah. Je vais compiler le chien dans la nouvelle EA morceau par morceau !
 
Dimka-novitsek:
Ouf ! !! Ça ne marche pas. Ah, je vais compiler le chien dans un nouvel EA morceau par morceau !


C'est ce que je fais dans des cas comme celui-ci :

- Je commente tout le texte de la fonction ;

- Je décompose le commentaire en plusieurs parties, je le compile et j'attends que l'erreur apparaisse.

 
   if (strela1>strela2&&BUY==0&&SELL==0)    {    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
          NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 

 
            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),  
     "    NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

donc

   for( int A=0; A<100 ; A++)
   {
       double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
       double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
       int BUY=0,SELL=0;int ticket; 
       Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
           
       for(int i=1; i<=OrdersTotal(); i++)
       {  
         if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
         {                                       // Анализ ордеров:
            if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
            if (OrderMagicNumber( ) !=magicnumber)continue;
            if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
            if (OrderType()==1) {SELL++;ticket=OrderTicket( );}
         }
       }
    }

comme ceci

      if (strela1<strela2&&BUY==0&&SELL==0)
      {  

         OrderSend( Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
         NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
         Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError()  ,"  Bid ",Bid,
         "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", NormalizeDouble( Ask- (stoplos*Point),Digits),
         "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble( Bid+( takeprofit*Point),Digits));
      }

et ainsi de suite

    Print (   "  Конец " );      

Conseil 1 : structurez votre programme avec des retraits

Conseil 2 : lors de la recherche de ces erreurs, et de bien d'autres, utilisez les commentaires des parties du code /* */ - les erreurs de syntaxe sont trouvées très rapidement.

 
Dimka-novitsek:
Merci ! !! Je ferais mieux de jeter un coup d'oeil au code... J'ai aussi les crochets sur une feuille de papier - équilibré ! !!

fragmentaire ne signifie pas correct - la règle d'imbrication doit être suivie

 
Dimka-novitsek:
Où est la ramification ? Ou je suis stupide... Je veux dire, nous venons d'ouvrir une commande sous les conditions !
L'opérateur if est un opérateur de branchement, mais la deuxième branche (else) est manquante dans votre code.
 

Merci ! !!

Tu sais, ça compile sans cette ligne.

Print( "strela1<strela2&&BUY==0&&SELL==   " ,   GetLastError(),    "  Bid ",  Bid,  "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", 
 NormalizeDouble( Ask- (stoplos*Point),Digits),  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ",  NormalizeDouble( Bid+( takeprofit*Point),Digits);

Et je ne vois pas cela comme un crime ! !! C'est moi qui ai transféré l'ensemble de l'EE en plusieurs parties et les ai compilées séparément jusqu'à ce que je trouve la racine, pour ainsi dire.

 
Dimka-novitsek:

Merci ! !!

Tu sais, ça compile sans cette ligne.

Et je ne vois pas ce qu'il y a de mal à cela ! !! J'ai transporté l'ensemble de l'EE en plusieurs parties et les ai compilées séparément jusqu'à ce que la racine soit trouvée, pour ainsi dire.

il manque le crochet de fermeture pour Print

Print( "strela1<strela2&&BUY==0&&SELL==   " ,   GetLastError(),    "  Bid ",  Bid,  "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", 
 NormalizeDouble( Ask- (stoplos*Point),Digits),  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ",  NormalizeDouble( Bid+( takeprofit*Point),Digits));
 

Bon après-midi... J'ai écrit un indicateur simple (voir fichier joint).

En un mot, l'essence de l'indicateur : l'indicateur se compose de 3 lignes :

Laligne 1 montre la différence de deux MAs sur Close avec les périodes a et b (conditionnellement).

La2e ligne montre la différence de deux MA sur Close avec les périodes c et d (sous conditions) ;a≠b≠c≠d.

Laligne 3 affiche la MA de la différence entre la ligne 1 et la ligne 2, c'est-à-dire la MA(ligne 1 - ligne 2) avec une certaine période.

Question: Pourquoi la ligne 3 (noire) est-elle représentée comme une ligne droite dans le graphique ?


Note sur l'image: le graphique supérieur montre le résultat souhaité, le graphique inférieur montre l'indicateur que j'ai créé.

Note: Si quelqu'un trouve d'autres bogues, je serai très reconnaissant pour un tuyau.

P.S. Afin de ne pas encombrer le forum, je vous remercie d'avance pour vos commentaires.

Dossiers :
aom3.mq4  12 kb