[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 513

 

Suggerimenti professionali su come ottimizzare i prezzi di apertura nell'auto-ottimizzatore:

https://forum.mql4.com/ru/42125

 
Ciao, sono un principiante che cerca di capire come scrivere un EA
consigliare come scrivere "se un ordine precedentemente chiuso era un ordine di acquisto e chiuso con uno stop loss allora vendere 0,1 lotto con uno stop loss 50 take profit 50" per favore)
 

Specialisti! Aiuto! Come può essere implementato?


int start() 
{
 bool OPEN=false;

 условие1=х;//вычисление условия1
 условие2=y;//вычисление условия2
 
 if(условие1==х)OPEN=true;
 
 if(условие2==y&&OPEN==true)
 OrderSend;

Dobbiamo fissare OPEN=true fino al
condizione2. La condizione1 può cambiare durante questo periodo.

Grazie in anticipo!

 

portarlo fuori per l'inizio

 bool OPEN=false;
 
sergeev:

portarlo fuori per l'inizio


Grazie mille! Come si dice che tutto è brillantemente semplice! E mi sono scervellato tutto il giorno.
 

Per favore, ditemi cosa sto sbagliando quando calcolo il numero di prime barre ( Quant_Bars ) che corrispondono alla condizione solo sopra o sotto il buffer. Cioè, appena l'indicatore è disegnato PRIMA della barra chiusa (1), dovrei contare le barre precedenti con l'indicatore SOTTO le barre (tranne quelle che non sono conformi alla condizione) e viceversa, nella direzione opposta del movimento. La mia variante dà valori sbagliati.

Chi sa come farlo?

#property indicator_chart_window     
#property indicator_buffers 1
#property indicator_color1 Green
double step = 0.1;
double max = 0.2;

int n = 1;
double S;
double barA;
double barB;
double Bufer[];
int k,k1;
//---------------------------------
int init()
{
   SetIndexStyle(0, DRAW_ARROW,EMPTY,0,Green); 
   SetIndexArrow(0, 159); 
   SetIndexBuffer(0, Bufer);
   return (0);
}
//---------------------------------
int deinit() 
{
   return (0);
}
//----------------------------------
int start()
{

 k1=k;
 for(int i=Bars-2; i>=0; i--)  
    {
     if(i == Bars-2)
       {
         Bufer[i] = Low[i] - 10.0 * Point;
         n = 1;
         S = step;
         barA = High[i];
         barB = Low[i];
       }
    else
       {
         if(Close[i] > barA)
           {
             barA = Close[i];
               if (n==1 && S <= max - step)
                  { S = S + step; }
             k=1;
           }          
         if(Close[i] < barB)
           {
            barB = Close[i];
              if (n == -1 && S <= max - step)
                 { S = S + step;}
            k=2;
           }
        if (n == 1)
           { Bufer[i] = Bufer[i + 1] + S * (barA - (Bufer[i + 1]));}
       else
           { Bufer[i] = Bufer[i + 1] + S * (barB - (Bufer[i + 1]));}
      
       if ((Bufer[i+1] < Close[i + 1] && Bufer[i] > Close[i]) || (Bufer[i + 1] > Close[i + 1] && Bufer[i] < Close[i]))
          {
           S = step;
             if (n == 1)
                {Bufer[i] = barA;}
             else
                {Bufer[i] = barB;}
           barB = Close[i];
           barA = Close[i];
           n = -1 * n;
          }
       }
   }
    
//--------------------------Подсчитать бары:
   int num1 = 2;  // бар  
   int counted_bars = IndicatorCounted(); 
 //-----СЕЛЛ
if(Bufer[2]<Close[2] && Bufer[1]>Close[1])    
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])
                                 
             {int Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }
    
 //-----БАЙ  
if(Bufer[2]>Close[2] && Bufer[1]<Close[1])     
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])                     
            {Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }  

   return (0);
}
 

domanda,

Perché, quando il mio Expert Advisor prosciuga ordinatamente l'intero deposito e praticamente tutti i trade sono perdenti, poi quando cambio la "polarità" dei segnali, il deposito non aumenta così rapidamente, ma già? )))) i punti sono gli stessi, l'errore è solo nella direzione di apertura dell'ordine, o c'è qualcos'altro?

 
Maxaxa:

domanda,

Perché, quando il mio Expert Advisor prosciuga ordinatamente l'intero deposito e praticamente tutti i trade sono perdenti, poi quando cambio la "polarità" dei segnali, il deposito non aumenta così rapidamente, ma già? )))) i punti sono gli stessi, l'errore è solo nella direzione di apertura dell'ordine, o c'è qualcos'altro?

Questa è una filosofia di trading.
 
Maxaxa:


c'è qualcos'altro
 
Solree:

Buon pomeriggio.

Ci sono 4 ordini, 2 vendite e 2 acquisti. I sigilli si creano, in senso figurato, quando il prezzo sale e si comprano quando scende. Le vendite vengono cancellate quando viene creato un acquisto e viceversa. Quando viene creato un biglietto, il 1° vendere o comprare viene memorizzato nella variabile pos. Tutti e 4 hanno lo stesso commento - "Aelit". Quindi, c'è un codice:

L'ordine è selezionato normalmente dal biglietto, ma molto spesso il confronto dei commenti fallisce. Per interesse, ho fatto un altro Alert(OrderComment()); e il log ha mostrato "Alert: Aelit[sl]". Che cos'è [sl]? È perché tutti gli ordini hanno lo stesso commento? Allora perché lo stesso [sl] quando ho fatto un commento che non corrispondeva agli altri per il test? Se si rimuove il controllo dei commenti, c'è un errore di ticket nel log per OrderModify. All'inizio pensavo che la condizione fosse stata raggiunta prima della creazione di qualsiasi ordine, ma no, in quel momento l'ordine è già presente, e il ticket è lo stesso sia in caso di attivazione della condizione che di non attivazione. Come lo capiamo?

Non è un miracolo che la tua società di brokeraggio abbia aggiunto al tuo commento - l'ordine è stato chiuso quando è stato raggiunto lo StopLoss.

Non hai organizzato correttamente la selezione dell'ordine sul biglietto. Quando si fa una tale selezione, prima di tutto, MODE_TRADES non è necessario - è omesso nella funzione OrderSelect(),

In secondo luogo, dopo aver selezionato con successo l'ordine, non si controlla se l'ordine è stato selezionato dall'array di ordini secondo il ticket - da quelli a mercato o da quelli chiusi.

Per fare questo, dopo che l'ordine è selezionato, controlla il suo tempo di chiusura e se è uguale a zero, allora solo allora l'ordine è a mercato, altrimenti - è selezionato tra gli ordini già chiusi (da qui l'aggiunta al tuo commento)