Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 195

 
Artyom Trishkin:

Trova il punto in cui il prezzo incrocia la MA verso l'alto. Questo sarà l'inizio dell'intervallo di ricerca.

Trova il punto in cui il prezzo ha attraversato la MA verso il basso. Questo sarebbe l'intervallo di arresto.

Prendete iHighest() solo in questo intervallo.

E come implementare una ricerca di punti MA, in modo che cerchi solo 2 punti estremi e non all'infinito. a parole lo capisco anche io, ma se non è difficile come implementarlo nel codice.
 
GlaVredFX:
E come implementare la ricerca dei punti MA, in modo da cercare solo 2 punti estremi e non all'infinito. Lo capisco anche io, ma se non è difficile come implementarlo nel codice.

Un modo: creare una variabile a livello globale del programma EA (dichiarare una variabile nell'intestazione EA) - in questa variabile scrivere il tempo di apertura della barra in cui è stato fatto l'ultimo incrocio. Questo aiuterà ad usare la terza forma di chiamata diCopyBuffer:

Il riferimento delle date di inizio e fine dell'intervallo di tempo richiesto

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   datetime  start_time,           // с какой даты
   datetime  stop_time,            // по какую дату
   double    buffer[]              // массив, куда будут скопированы данные
   );

Qui start_time è solo il tempo della nostra variabile, e stop_time è il tempo dell'ultima citazione conosciuta del server.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
GlaVredFX:
E come implementare la ricerca dei punti della MA, in modo che cerchi solo 2 esterni, e non all'infinito. A parole lo capisco anche io, ma se non è difficile come implementarlo nel codice.

Dovete passare attraverso il ciclo finché non trovate una mossa lontana dal MA.

Un punto, questa sezione evidenziata dal rettangolo giallo, interromperà il ciclo prima che raggiunga il secondo incrocio prezzo-MA. Il massimo si troverà al primo incrocio a destra


P.S. Qual è la differenza tra le 2 aree evidenziate?

 
Vitaly Muzichenko:

P.S. Qual è la differenza tra le 2 aree evidenziate?

Possono essere diversi - cioè il primo punto può essere più alto o più basso del secondo punto.

Questo è solo un esempio. Ma non significa che saranno sempre identici.



Chi può lanciare esempi di codice con condizioni simili..:

Valore corrente di MA> 0 bar.
Cercandonumero di barra, prezzo<MA, trovato numero 1 barra, scrivere il valore nel buffer 2
Cercando ilprossimo numero Prezzo>MA ha trovato la barra numero 2, scrive il valore nel buffer 1.
Fermare la ricerca.
Poi tra i valori del buffer 1 e 2 cerca il prezzo più basso Low.
Se valore corrente MA < 0 bar
Cercando il numero di barra, Price>MA, trovato il numero di 1 barra, scrivere il valore nel buffer 2
Cercando ilprossimo numero Prezzo<MA ha trovato la barra numero 2, scrive il valore nel buffer 1.
Fermare la ricerca.
Poi tra i valori del buffer 1 e 2 cerchiamo il prezzo più alto High.

 
GlaVredFX:

Possono essere diversi - il primo punto può essere più alto o più basso del secondo punto.

È solo un esempio. Ma non significa che saranno sempre gli stessi.



Chi può lanciare esempi di codice con condizioni simili..:

Il valore attuale MA> 0 bar
Stiamo cercando la barra numero Price<MA, abbiamo trovato la barra numero 1 e scriviamo il valore nel buffer 2
Cercando ilprossimo numero Prezzo>MA ha trovato la barra numero 2, scrive il valore nel buffer 1.
Fermare la ricerca.
Poi tra i valori del buffer 1 e 2 cerca il prezzo più basso Low.
Se valore corrente MA < 0 bar
Cercando il numero di barra, Price>MA, trovato il numero di 1 barra, scrivere il valore nel buffer 2
Cercando ilprossimo numero Prezzo<MA ha trovato la barra numero 2, scrive il valore nel buffer 1.
Fermare la ricerca.
Poi tra i valori del buffer 1 e 2 cerchiamo il prezzo più alto High.

Se seguiamo l'immagine, dobbiamo iniziare un ciclo e cercare fino a quando la condizione MA<Valore viene trovata.

Una volta trovato questo, riempiamo l'array con i prezzi alti. Eseguiamo il ciclo fino a quando la condizione MA>Price viene trovata, non appena troviamo questo posto - interrompiamo il ciclo.

E nella matrice stiamo cercando i prezzi di picco

 
Vitaly Muzichenko:

Se si segue l'immagine, si dovrebbe eseguire un ciclo e cercare fino a quando la condizione MA<Valore viene trovata.

Una volta trovato questo, riempiamo l'array con i prezzi alti. Eseguiamo il ciclo fino a quando la condizione MA>Price viene trovata, non appena troviamo questo posto - interrompiamo il ciclo.

Poi cerchiamo i prezzi di picco nell'array.

Hai ragione e l'ho anche scritto allo stesso modo, ma come implementarlo nel codice, puoi almeno darci un esempio di codice di questo:


avviare un ciclo e fare una ricerca fino a quando viene trovata la condizione MA<Prezzo.

Non appena questa condizione viene trovata,riempiamo l'array con i prezzi High

Документация по MQL5: Операции с массивами / ArrayFill
Документация по MQL5: Операции с массивами / ArrayFill
  • www.mql5.com
При вызове функции ArrayFill() всегда подразумевается обычное направление индексации – слева направо, то есть изменение порядка доступа к элементам массива с помощью функции ArraySetAsSeries() не принимается во внимание. Многомерный массив при обработке функцией ArrayFill() представляется одномерным, например...
 
GlaVredFX:

È giusto ed è così che l'ho scritto, ma come implementarlo nel codice puoi almeno dare un esempio di codice di questo:


eseguire un ciclo e fare una ricerca fino a trovare la condizione MA<Prezzo.

Non appena questa condizione viene trovata,riempiamo l'array con i prezzi High

Non posso scrivere il codice ora, forse qualcun altro lo scriverà, è semplice

 

Questo è ciò che è necessario, qualcuno può aiutare con questo codice.

int start()                           

  {

  int    i;

  double No_1;

  double No_2;

  double k=iClose(NULL,0,i);
  double h=iHigh(NULL,0,i);

  if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

  for (i=0; i< Bars; i++) {

  //---- Код поиска номер крайнего бара где  iHigh>ma

  //---- Если нашли то возвращаем номер бара No_1

            

          }

Poi trova il prossimo valore dove iLow>ma e restituisce il numero di barra No_2 .
Fermate la ricerca e usate la funzione iHighest per trovare il vertice tra queste barre
int val_index=iHighest(NULL,0,MODE_HIGH,No_2,No_1);

 
GlaVredFX:

if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

Questo non è codice MQL5.

 
Vladimir Karputov:

Questo non è codice MQL5.

Questo è un layout, non c'è differenza tra 4 e 5

:)
Motivazione: