[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 477

 
Dimka-novitsek:
Hier, es tut mir leid... Ich habe die Klammern achtmal nachgeprüft - nun, sie sind ausgewuchtet! Ausgewogen! Oder doch nicht?


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

verschieben Sie die Anführungszeichen (die am Ende der Zeile).

 
Ja... Richtig.
 
Puh!!! Nicht hilfreich. Ah. Ich werde den Hund im neuen EA Stück für Stück zusammenstellen!
 
Dimka-novitsek:
Puh!!! Funktioniert nicht. Ah, ich werde den Hund in einem neuen EA Stück für Stück zusammenstellen!


Das ist es, was ich in Fällen wie diesem tue:

- Ich kommentiere den gesamten Text der Funktion aus;

- Ich schreibe den Kommentar in Teilen auf, kompiliere ihn und warte, bis der Fehler auftaucht.

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

also

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

wie diese

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

und so weiter

    Print (   "  Конец " );      

Tipp 1: Strukturieren Sie Ihr Programm mit Einrückungen

Tipp 2: Verwenden Sie bei der Suche nach solchen und vielen anderen Fehlern die Kommentierung der Codeteile /* */ - Syntaxfehler werden so sehr schnell gefunden.

 
Dimka-novitsek:
Ich danke Ihnen!!! Ich schaue mir den Code besser mal an... Ich habe auch die Klammern auf einem Blatt Papier - ausgewogen!!!

Stückwerk ist nicht gleichbedeutend mit korrekt - die Schachtelungsregel muss befolgt werden

 
Dimka-novitsek:
Wo ist die Verzweigung? Oder bin ich dumm... Ich meine, wir eröffnen gerade einen Auftrag unter den Bedingungen!
Der if-Operator ist ein Verzweigungsoperator, aber die zweite Verzweigung (else) fehlt in Ihrem Code.
 

Ich danke Ihnen!!!

Sie wissen, dass es ohne diese Zeile kompiliert.

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

Und ich sehe es nicht als kriminell an!!! Ich war derjenige, der den gesamten EA in Teilen übertragen und separat zusammengestellt hat, bis ich sozusagen die Wurzel gefunden habe.

 
Dimka-novitsek:

Ich danke Ihnen!!!

Sie wissen, dass es ohne diese Zeile kompiliert.

Und ich sehe nicht, was daran falsch sein soll!!! Ich habe den ganzen EA in Teilen mitgenommen und separat kompiliert, bis ich sozusagen die Wurzel gefunden hatte.

es fehlt die schließende Klammer für 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));
 

Guten Tag... Ich habe einen einfachen Indikator geschrieben (siehe beigefügte Datei).

Kurz das Wesentliche des Indikators: Der Indikator besteht aus 3 Zeilen:

1 Zeile zeigt die Differenz von zwei MAs auf Close mit den Perioden a und b (bedingt).

Die zweite Zeile zeigt die Differenz zweier MAs auf Close mit den Perioden c und d (bedingt);a≠b≠c≠d.

Zeile 3 zeigt den MA der Differenz von Zeile1 und Zeile2, d.h. MA(Zeile1-Zeile2) mit einer bestimmten Periode.

Frage: Warum ist die Linie3 (schwarz) im Diagramm als gerade Linie dargestellt?


Anmerkung zum Bild: Der obere Chart zeigt das gewünschte Ergebnis, der untere Chart zeigt den von mir erstellten Indikator

Hinweis: Wenn jemand weitere Fehler findet, bin ich für einen Tipp sehr dankbar

P.S. Um das Forum nicht zu überfrachten, danke ich Ihnen im Voraus für Ihr Feedback

Dateien:
aom3.mq4  12 kb