[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 477

 
Dimka-novitsek:
Ecco, mi dispiace... Ho ricontrollato le staffe otto volte: bene, sono equilibrate! Equilibrato! O lo sono?


In questo codice:

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

spostare le virgolette (quelle alla fine della riga).

 
Già... Giusto.
 
Uff!!! Non aiuta. Ah. Compilerò il cane nella nuova EA pezzo per pezzo!
 
Dimka-novitsek:
Uff!!! Non funziona. Ah, compilerò il cane in una nuova EA pezzo per pezzo!


Questo è quello che faccio in casi come questo:

- Commento tutto il testo della funzione;

- Prendo il commento in parti, lo compilo e aspetto che l'errore si manifesti.

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

così

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

come questo

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

e così via

    Print (   "  Конец " );      

Suggerimento 1: strutturare il programma con i rientri

Suggerimento 2: quando si cercano tali errori, e molti altri, utilizzare il commento delle parti di codice /* */ - gli errori di sintassi vengono trovati molto rapidamente

 
Dimka-novitsek:
Grazie!!! È meglio che dia un'occhiata al codice... Ho anche le staffe su un pezzo di carta - in equilibrio!!!

frammentario non significa corretto - la regola di annidamento deve essere seguita

 
Dimka-novitsek:
Dov'è la ramificazione? O sono stupido... Abbiamo appena aperto un ordine alle condizioni!
L'operatore if è un operatore di ramificazione, ma il secondo ramo (else) manca nel tuo codice.
 

Grazie!!!

Si compila senza quella linea.

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

E non lo vedo come un crimine!!! Sono stato quello che ha trasferito l'intero EA in parti e le ha compilate separatamente fino a quando ho trovato la radice, per così dire.

 
Dimka-novitsek:

Grazie!!!

Si compila senza quella linea.

E non vedo cosa ci sia di male!!! Ero io che portavo l'intero EA in parti e le compilavo separatamente fino a trovare la radice, per così dire.

manca la parentesi di chiusura per 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));
 

Buon pomeriggio... Ho scritto un semplice indicatore (vedi file allegato).

In poche parole, l'essenza dell'indicatore: l'indicatore consiste in 3 linee:

1 linea mostra la differenza di due MA su Close con periodi a e b (condizionalmente).

La 2a linea mostra la differenza di due MA su Close con periodi c e d (condizionalmente);a≠b≠c≠d.

Lalinea 3 mostra il MA della differenza tra Linea1 e Linea2, cioè MA(Linea1-Linea2) con un certo periodo.

Domanda: Perché la linea 3 (nera) è mostrata come una linea retta nel grafico?


Nota all'immagine: il grafico superiore mostra il risultato desiderato, il grafico inferiore mostra il mio indicatore creato

Nota: se qualcuno troverà qualche altro bug, sarò molto grato per un suggerimento

P.S. Per non sporcare il forum, vi ringrazio in anticipo per il vostro feedback

File:
aom3.mq4  12 kb
Motivazione: