Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1725

 
EVGENII SHELIPOV #:

Alexei, per favore ingrandisci l'immagine.

Ingrandito. Ho visto esattamente quello che mostra la freccia sul secondo prezzo più basso dell'ordine e sul biglietto dell'ordine che non corrisponde al penultimo criterio d'ordine. Eseguite il mio codice e vedrete il biglietto dell'ordine più basso. Potete finire questa funzione se volete ottenere non l'ordine BUY dal basso, ma il secondo.

 
Alexey Viktorov #:

Ingrandito. Quello che ho visto era la freccia che indicava il secondo prezzo più basso dell'ordine e il biglietto dell'ordine che non soddisfaceva il penultimo criterio d'ordine. Se eseguite il mio codice, vedrete il biglietto dell'ordine più basso. Potete sviluppare questa funzione per ottenere non l'ordine BUY sotto, ma il secondo.

Posso solo chiedere dove c'è un errore nel codice per la determinazione del penultimo biglietto d'ordine.

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
 
EVGENII SHELIPOV #:

Può solo come la mia domanda dove è l'errore nel codice per determinare il biglietto del penultimo ordine?

L'errore è che il prezzo dell'ordine non viene preso in considerazione in alcun modo.

Da qualche parte nel tuo dialogo, c'è il consiglio di mettere il tutto in un array e ordinarlo per ottenere qualsiasi biglietto per numero. Ma in risposta, non capisco come fare.

Come questo

//+------------------------------------------------------------------+
//| Расчет тикета второго снизу ордера BUY в сетке                   |
//+------------------------------------------------------------------+
int GetTicketMaxOrder()
 {
  int total = OrdersTotal(),
      arrSize = 0;
  double arr[][2];
  for(int cnt = 0; cnt < total; cnt++)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol())// && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        arrSize = ArrayRange(arr, 0);
        ArrayResize(arr, arrSize+1);
        arr[arrSize][0] = OrderOpenPrice();
        arr[arrSize][1] = OrderTicket();
       }
     }
   }
  ArraySort(arr);
  return((int)arr[1][1]);
 }
/*****************************End program****************************/
 
EVGENII SHELIPOV #:

Posso solo rispondere come la mia domanda, dov'è l'errore nel codice che determina il biglietto del penultimo ordine?

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }

E un altro errore grossolano è che mentre cerchi gli ordini nel ciclo, chiami una funzione che a sua volta cerca anche gli ordini... E quando l'esecuzione del codice ritorna alla funzione, un altro ordine è già selezionato... E OrderTicket() restituisce molto diverso da quello che ti aspettavi.

 
Alexey Viktorov #:

L'errore è che il prezzo dell'ordine non viene preso in considerazione in alcun modo.

Da qualche parte nel tuo dialogo c'è un consiglio per mettere il tutto in un array e ordinarlo per ottenere qualsiasi biglietto per numero. Ma in risposta, non capisco come fare.

Come questo

Alexey potresti commentare gli errori nel log

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: posizione iniziale 0 non corretta per la funzione ArraySort

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: array fuori portata in 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00 Il test pass si è fermato a causa di un errore critico nell'EA


 
EVGENII SHELIPOV # :

Alexey, potresti commentare gli errori nel log

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: posizione iniziale 0 non corretta per la funzione ArraySort

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: array fuori portata in 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00 Il test pass si è fermato a causa di un errore critico nell'EA


Questi errori non sono il mio codice. Non sono fluente nella lingua aglits, sto usando il traduttore interno di questo sito. Ecco come si traduce.

posizione iniziale 0 errata per la funzione ArraySort - posizione iniziale 0 errata per la funzione ArraySort

array fuori range in 'eGriD2.mq4' (664,18) - array fuori range in 'eGriD2.mq4' (664,18)

Il passaggio dei test si è fermato a causa di un errore critico nell'EA

Quindi il codice nello studio.

ps; Anche se, se chiamate questa funzione quando ci sono meno di due ordini, ci saranno questi errori. Non l'ho protetto da ......... ma credo che avrei dovuto farlo.

Questo è esattamente il motivo per cui non ho assolutamente il desiderio di aiutare nessuno... Tu conti su un'applicazione ponderata dei miei consigli e .........

 
Buon pomeriggio. Puoi dirmi come implementare una ricerca minima/massima per n barre?
 
Snajper007 #:
Buon pomeriggio. Puoi dirmi come implementare una ricerca minima/massima per n barre?
iHighest

iLowest

 
MakarFX

Ecco un'altra domanda. C'è un indicatore che disegna un frattale. Come posso controllare se c'è un segnale in n barre?

 
Snajper007 #:

Ecco un'altra domanda. C'è un indicatore che disegna un frattale. Come posso controllare se c'è un segnale in n barre?

Prima di tutto, dipende dall'indicatore che disegna i frattali