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

 
novichok2018: Grazie! Capisco le convenzioni, ne terrò conto. Ma per capire lo script suggerito, ahimè, la mia conoscenza di mcl4 non è sufficiente. Mi dispiace :( .

Faccio tutti i miei esperimenti con gli script. Eseguite lo script nel vostro terminale. Cambia qualche riga o buttalo via. Vedere cosa succede

 

Voglio trovare il Min Max dei dati dell'indicatore, ho fatto "tutto secondo il manuale", ma sembra che i dati dell'indicatore non siano scritti in un array. MQL pro mi dice dove ho sbagliato.

     
int limit=40000;
     
      double ArrayGreen[];  
      ArrayResize(ArrayGreen,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,1);
         }
      int max=ArrayMaximum(ArrayGreen,Quant,0); 
      double iMaximum = ArrayGreen[max];
      Print("Max = ",ArrayGreen[max]," at index=",max); 

      
     
      double ArrayRad[];  
      ArrayResize(ArrayRad,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayRad[i] = iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,1,1);
         }
     int min=ArrayMinimum(ArrayRad,Quant_Bars,0); 
     double iMinimum = ArrayRad[min];
     Print("Min= ",ArrayRad[min]," at index=",min); 
 
Corvin85:

Voglio trovare il Min Max dei dati dell'indicatore, ho fatto "tutto secondo il manuale", ma sembra che i dati dell'indicatore non siano scritti in un array. Se sei un professionista di MQL, ti prego di consigliarmi dove ho sbagliato.

Il limite della variabile ha un valore maggiore di zero. Pertanto, nessuno dei cicli verrà eseguito. Di conseguenza, ArrayGreen e ArrayRad rimarranno senza incarico.

Se impostiamo il limite a zero o meno, il programma tornerà al primo ciclo.

Quindi, abbiamo bisogno di modificare la condizione dei loop. Molto probabilmente si dovrebbe fare così:

 for (int i = 0; i < limit; i++)
 
Corvin85:

Voglio trovare il Min Max dei dati dell'indicatore, ho fatto "tutto secondo il manuale", ma sembra che i dati dell'indicatore non siano scritti in un array. Ho un buon MQL pro, per favore consigliatemi dove ho fatto un errore.

Inoltre, in iCustom(...........); l'ultimo parametro passato i

 for (int i=0;i<limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,i);
         }

qualcosa del genere.

 
Grazie, funziona!
 

Buon pomeriggio!


Per comodità di test, voglio rimuovere il pulsante per attivare e disattivare la condizione, in modo da non dover andare nel codice ogni volta e non dover cambiare la condizione in testo, in modo che non abbia effetto.

In altre parole, ora faccio così:

if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{

Spegnere in questo modo:

//if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

Ho provato a tirare l'abilitazione e la disabilitazione nell'input bool Y=True; (dove Y è la condizione), assegnare Y alla condizione, e dividere i rami se la condizione è o non è in vigore tramite else if. Ma qualcosa non ha funzionato.

Puoi dirmi come farlo correttamente in questi casi?

 
YanSay:

Buon pomeriggio!


Per la comodità dei test, voglio rimuovere il pulsante per attivare e disattivare la condizione, in modo da non dover andare nel codice ogni volta e non dover cambiare questa condizione in testo per renderla inefficace.

In altre parole, ora faccio così:

Spegnere in questo modo:

Ho provato a tirare l'abilitazione e la disabilitazione nell'input bool Y=True; (dove Y è la condizione), assegnare Y alla condizione, e dividere i rami se la condizione è o non è in vigore tramite else if. Ma qualcosa non ha funzionato.

Per favore, consigliate cosa fare in questi casi?

Si potrebbe fare quanto segue

input bool FLAG =True;


if (FLAG && (Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{
 
Vitaly Muzichenko:

Si potrebbe fare così.

La ragione è che l'algoritmo ignora la condizione False e procede alle condizioni successive.

input bool FLAG =False;

L'algoritmo non andrà oltre, mentre dovrebbe ignorare questa condizione quando il codice è Falso e passare alle condizioni successive.

Nel mio caso, l'unica opzione è specificare 2 rami?

input bool FLAG =True;

if (FLAG=True)
{(Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
 {//следующие условия
 }
}

if (FLAG=False)
 {//следующие условия
 }

O c'è un modo più semplice?

 
YanSay:

Nella tua versione risulta che se il valore

L'algoritmo non andrà oltre, mentre dovrebbe ignorare questa condizione se è False e passare alle condizioni successive.

Nel mio caso, l'unica opzione è scrivere 2 rami?

O c'è un modo più semplice?

//+------------------------------------------------------------------+
input bool FLAG =True;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  if(FLAG) {
    if(Close[1]<=High[2]) && (Close[1]>=Low[2]) && (Open[1]<=High[2]) && (Open[1]>=Low[2])
    //...
  } else {
    //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay:

Nella tua versione risulta che se il valore

L'algoritmo non andrà oltre, mentre dovrebbe ignorare questa condizione se è False e passare alle condizioni successive.

Nel mio caso, l'unica opzione è scrivere 2 rami?

O c'è un modo più semplice?

Solo in questo modo

if(!FLAG || (Close[1]<=High[2] && Close[1]>=Low[2] && Open[1]<=High[2] && Open[1]>=Low[2]))