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

 

Vieni ad aiutarmi.

Il compito è quello di trovare l' elemento minimo nell'array[].

//+------------------------------------------------------------------+ 
//| Получим Lowest для заданного промежутка                          | 
//+------------------------------------------------------------------+ 
double iLowMin(int ot,int bands,double &buffer[])
  {
   double result=-1;
   result=buffer[ArrayMinimum(buffer,ot,bands)];
   return(result);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHighMax(int ot,int bands,double &buffer[])
  {
   double result=-1;
   result=buffer[ArrayMaximum(buffer,ot,bands)];
   return(result);
  }

Il problema è risolverlo, ma il minimo mi sta uccidendo. Ho provato di tutto, gli array di input sono pieni - ho guardato attraverso il debug, cosa fare?

Print("DwMin  ",iLowMin(rates_total-50,49,ExtLowerBuffer));

Forse ci sono delle sfumature?

dichiarato via

   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
 
Top2n:

Vieni ad aiutarmi.

Il compito è quello di trovare l' elemento minimo nell'array[].

Il problema è risolverlo, ma il minimo mi sta uccidendo. Ho provato di tutto, gli array di input sono pieni - ho guardato attraverso il debug, cosa fare?

Forse ci sono delle sfumature?

dichiarato via

Provate ArraySort e controllate l'output sul primo indice.

 

Alla faccia della noosfera, non appena ho rinunciato alla domanda, ho iniziato ad avere un'intuizione: ho 0 nell'array, quindi dà min = 0. Ma ci sono ancora sezioni con valori non nulli, e il min è ancora 0, beh, che Dio mi aiuti, la domanda è spenta)) Grazie a chi ha appena letto la domanda, la noosfera ha dato

 

Domanda di attenzione))

Come si imposta la barra nell'indicatore da cui iniziare l'elaborazione?

if(prev_calculated>rates_total-Bmax)

{ ... то что нужно обрабатывать начиная с бара[rates_total-Bmax]

}

Provato questo, il risultato è che l'indicatore fa un solo movimento.

 

Ciao di nuovo, potresti per favore dirmi, conosco l'indice di un elemento dell'array, quale funzione può essere usata per trovare il suo valore?

int Totall=OrdersTotal();

double Price; // Prezzo dell'ordine selezionato

double Mas[]; //array per mettere in ordine tutti gli ordini

for(int i=0; i<OrdersTotal(); i++) //ordinare il ciclo

{

if(OrderSelect(i,SELECT_BY_POS)) // if(OrderSelect(i,SELECT_BY_POS))

{Price=OrderOpenPrice(); //riempire l'array con i prezzi

Mas[i] = Prezzo;

}

}

ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND); // Ora i prezzi di apertura sono ordinati in ordine decrescente

int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND) // Viene determinato l'indice dell'elemento più vicino in valore al prezzo corrente

 
Nauris Zukas:

Come ho incontrato prima studiando le classi, ancora una volta ci sono sfumature che non sono descritte negli articoli o da qualche parte così nascoste che non è possibile trovare attraverso un motore di ricerca. Un'intera giornata passata invano a cercare spiegazioni. Per esempio cosa significa questo simbolo e come influisce se non. Come si vede qui sotto nell'esempio di stati, prima c'è e poi non c'è: &

Inoltre, non è chiaro cosa significhi questo simbolo: ~

*

Le funzioni mql4, mql5 passano sempre un array solo per riferimento (& == ampersand)

In primo luogo - nei parametri formali di una funzione - c'è una e commerciale che indica che non è l'array stesso che viene passato nella funzione, ma un collegamento ad esso. E poi - all'interno della funzione - state già lavorando con il riferimento, il che significa che non dovete specificarlo di nuovo.

La tilde (~) è scritta prima del nome del distruttore della classe - il costruttore e il distruttore hanno lo stesso nome della classe stessa, ma il distruttore ha ~.

Leggete questo articolo su quando usare i riferimenti e quando usare i puntatori.

Anche se è comunque necessario leggere le basi.

 
vikzip:

Salve di nuovo, potreste dirmi se conosco l'indice di un elemento dell'array e quale funzione si usa per scoprire il suo valore?

int Totall=OrdersTotal();

double Price; // Prezzo dell'ordine selezionato

double Mas[]; //array per mettere in ordine tutti gli ordini

for(int i=0; i<OrdersTotal(); i++) //ordinare il ciclo

{

if(OrderSelect(i,SELECT_BY_POS)) // if(OrderSelect(i,SELECT_BY_POS))

{Price=OrderOpenPrice(); //riempire l'array con i prezzi

Mas[i] = Prezzo;

}

}

ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND); // Ora i prezzi di apertura sono ordinati in ordine decrescente

int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND) // Viene determinato l'indice dell'elemento più vicino in valore al prezzo corrente

Valore_elemento_array = Array[indice];

 

Per favore consigliatemi, ho un EA e l'ho testato al lavoro su un computer normale, windows hp. Tutto funziona bene e così via.

Torno a casa, a casa computer portatili macbook, e assolutamente con gli stessi parametri sullo stesso strumento con lo stesso timeframe mostra un risultato completamente diverso nel tester, qualche suggerimento o idee perché così?

 
Artyom Trishkin:

Array_element_value = Array[index];


Grazie, ora c'è un nuovo problema. Quando si scrive la seguente condizione si verifica un errore 'PriceBlizko1' - identificatore non dichiarato. Per favore, spiega perché?

doppio prezzo; // Prezzo per l'ordine selezionato

doppio Mas[]; //array per organizzare tutti gli ordini

for(int i=0; i<OrdersTotal(); i++) // ciclo degli ordini

{

if(OrderSelect(i,SELECT_BY_POS)) // if(OrderSelect(i,SELECT_BY_POS))

{


Price=OrderOpenPrice(); /Riempire l'array con i prezzi

Mas[i] = Prezzo;

}

}

ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND); // Ora i prezzi di apertura sono ordinati in ordine decrescente

int Blizko1=ArrayBsearch(Mas,Bid,WHOLE_ARRAY,0,MODE_ASCEND); //L'indice dell'elemento di valore più vicino al prezzo corrente è determinato

doppio PriceBlizko1=Mas[Blizko1];

}

if (PriceBlizko1-Bid>=30*Point) //se l'ordine inferiore è oltre i 30 punti !!!!!! IN QUESTO STREET!!!!!

OrderSend(Symbol(),OP_SELL,LtsS,Bid,2,0,Bid+30*Point); //Open Sell order

Avviso (GetLastError()); /Messaggio di errore.



 
vikzip:

Usa il pulsante per inserire il codice!

Motivazione: