Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 758

 
-Aleks-:

Ottenere errori - cosa c'è di sbagliato? In MQL4 funziona...


'{' - troppi inizializzatori TZ_Sky_and_Ground_V_04.mq5 2484 6

Dovrei mettere arrFibo[18] - dicono 18 elementi.
 
Vladimir Karputov:

Avete visto la guidaiMA?

Primo passo: dichiarare una variabile nella "testata" per memorizzare il manico dell'indicatore iMA:

Secondo passo: creare l'handle dell'indicatore in OnInit().

E il risultato (il mirino nello screenshot è impostato sulla barra #1):

Domanda: se faccio un loop attraverso l'indicatore, devo anche impostare il doppio MA[1]; o devo chiedere/ricevere un array più grande? Non capisco proprio a cosa sia dovuta tutta questa complessità - qual è il vantaggio rispetto a MQL4.
 
-Aleks-:

Se provo a usare il doppio MA[1] nel ciclo, dovrei usare il doppio MA[1]; o è meglio richiedere/ricevere la dimensione dell'array più grande? Solo non capisco perché tutte queste complicazioni sono necessarie - qual è il vantaggio rispetto a MQL4.


Il mio esempio con la funzione iMAGetè un esempio pensato per ricevere un valore alla volta da un indicatore. Se volete ottenere più valori dall'indicatore, dovreste usareCopyBuffer con i parametri "from" e "to" e salvare il risultato in un array.


Aggiunto: ci sarà un esempio più tardi...


Esempio promesso.

Parametri di ingresso:

  • ottenere valori in un array - se "true", allora usiamo get values in un array, se "false", allora otteniamo un valore alla volta
  • count -> solo se "get values into an array"==true - il numero di barre copiate nell'array
  • posizione iniziale -> solo se "get values into an array"==true - numero dell'elemento iniziale (barra) da copiare nell'array da

Lavorare con l'array e l'indicatore Moving Avegarege nell'Expert Advisor:

Lavorare con l'array e l'indicatore Moving Avegarege nell'EA

Fate attenzione all'array arr_ma e ai valori degli elementi con indice #0 e con indice #8.

ds

File:
iMAGet.mq5  12 kb
 
Vladimir Karputov:


Il mio esempio con la funzione iMAGetè un esempio pensato per ricevere un valore alla volta dall'indicatore. Se volete ottenere diversi valori dall'indicatore, dovreste usareCopyBuffer con i parametri "from" e "to" e salvare il risultato in un array.

Aggiunto: ci sarà un esempio più tardi...

Esempio promesso.

Parametri di ingresso:

  • ottenere valori in un array - se "true", allora usiamo get values in un array, se "false", allora otteniamo un valore alla volta
  • count -> solo se "get values into an array"==true - il numero di barre copiate nell'array
  • posizione iniziale -> solo se "get values into an array"==true - numero dell'elemento iniziale (barra) da copiare nell'array da

Lavorare con l'array e l'indicatore Moving Avegarege nell'Expert Advisor:

Fate attenzione all'array arr_ma e ai valori degli elementi con indice #0 e con indice #8.

ds

Grazie per l'esempio!

È molto importante per me capire se c'è qualche vantaggio nel richiedere un singolo valore di indicatore e copiare una dozzina di valori di indicatori - forse c'è stata qualche ricerca su questo?

Il fatto che la serie temporale sia invertita - non va bene - sono abituato alla numerazione standard delle barre 0123, ma qui ottengo 1230 in ordine inverso.

Se non so di quante barre ho bisogno durante la ricerca (per esempio, quando stiamo cercando la MA e il punto di incrocio delle barre), allora dovrei richiedere il numero massimo possibile? Influisce in qualche modo sulle prestazioni?

 
-Aleks-:

Grazie per l'esempio!

È molto importante per me capire se c'è un vantaggio nel chiedere un singolo valore di indicatore e copiare una dozzina di valori di indicatore - forse ci sono stati degli studi su questo?

...


Chi ci impedisce di fare noi stessi la ricerca :) ?

...

Il fatto che la serie temporale sia invertita - non va bene - sono abituato alla numerazione standard delle barre 0123, e qui abbiamo 1230 in ordine inverso.

...

L'unica cosa che dovete fare dopo aver ottenuto un array (dopo aver chiamato iMAGetArray) è eseguireArraySetAsSeries('our array',true).
...

Se non so di che numero di barre avrò bisogno nella ricerca (per esempio, quando cerco una MA e un punto di incrocio di barre), devo richiedere il numero massimo possibile? Influisce in qualche modo sulle prestazioni?


In questi casi, è meglio fare diverse ricerche. Per esempio, prima query - 50 elementi, se necessario - seconda query (ancora 50 elementi) ...
 
Vladimir Karputov:

Chi ci impedisce di fare noi stessi la ricerca :) ?


Sono ostacolato dal mio analfabetismo in MQL5 - posso ingannare tutti a causa di un errore nel codice, ma la tua professionalità ispirerebbe più fiducia in tali studi!

Vladimir Karputov:


Tutto ciò di cui avete bisogno è di eseguireArraySetAsSeries('our array',true) dopo aver ottenuto l'array (dopo aver chiamato iMAGetArray).

Voglio dire, farlo in una funzione in una volta sola?


Vladimir Karputov:


In questi casi, è meglio fare diverse ricerche. Per esempio, la prima richiesta - 50 elementi, e, se necessario, la seconda richiesta (ancora 50 elementi) ...
Brr... Cioè, mettere un ciclo in un ciclo? E perché 50 e non 100? Tutte le stesse ricerche su questo tema sono necessarie, forse non ha senso ricevere le informazioni più di una barra...
 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL4 MT4 MetaTrader 4".
 
-Aleks-:

...

Cioè farlo in una funzione in una volta sola?

...


È meglio capovolgere la matrice:

Vladimir Karputov:

Dopo aver ricevuto l'array (dopo aver chiamato iMAGetArray), dovrete eseguireArraySetAsSeries('our array',true).

-Aleks-:

...

Brr... Cioè, mettere un ciclo nel ciclo? Perché 50 e non 100? Tuttavia, gli studi su questo argomento sono necessari, forse non ha senso ottenere informazioni su più di un bar...

Nessun loop annidato - ci sarà solo un loop intorno a tutti i valori: tutta l'elaborazione è sequenziale - risultato della ricerca in una funzione separata (in essa, richiediamo un certo valore - per esempio, 50 valori). Se non troviamo il risultato, facciamo una nuova richiesta.

 

Lavorare con gli indicatori in MQL5 dopo MQL4 è terribile! Mi fa davvero star male.

Non capisco perché non possano combinare tutto in una sola funzione, compreso l'handle, invece di spargere la chiamata dell'indicatore in tutto il codice!

E se le impostazioni di un indicatore saranno cambiate dalla funzione in cui si trova l'indicatore, non capisco cosa fare? Devo avviare tutte le varianti dell'indicatore?


Ho visto un esempio in MQL4 - come farlo in MQL5?


int BarPeresek_iMAf(int PeriodMA)
  {
   int TFT=0;
   int shiftMAT=0;
   int typeMAT=0;
   int priceMAT=0;
   int BarPeresek=0;
   if(Bars(Symbol(),0)>PeriodMA)
     {
      for(int X=1;X<1000; X++)
        {
         double MAT=NormalizeDouble(iMA(Symbol(),TFT,PeriodMA,shiftMAT,typeMAT,priceMAT,X),Digits());
         if((Low(X)>MAT && High(X)>MAT) || 
            (Low(X)<MAT && High(X)<MAT))BarPeresek++;
         else {BarPeresek++; break;}
        }

     }
   return BarPeresek;
  }
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для...
 

Potete dirmi come rimuovere i marcatori dopo aver chiuso una posizione in modo che non vengano visualizzati?

È possibile rimuoverli programmaticamente?

Grazie!

Motivazione: