Discussione sull’articolo "Creazione di un Indicatore Multivaluta, Utilizzando un Numero di Buffer di Indicatori Intermedi"

 

Il nuovo articolo Creazione di un Indicatore Multivaluta, Utilizzando un Numero di Buffer di Indicatori Intermedi è stato pubblicato:

C'è stato un recente aumento di interesse per le analisi dei cluster del mercato FOREX. MQL5 apre nuove possibilità di ricerca delle tendenze del movimento delle coppie di valute. Una caratteristica fondamentale di MQL5, che lo differenzia da MQL4, è la possibilità di utilizzare un numero illimitato di buffer indicatori. Questo articolo descrive un esempio di creazione di un indicatore multivaluta.

Questo completa il calcolo degli indicatori. Le figure 4-6 mostrano alcune immagini dei diversi tipi di indicatori.

Figura 4. RSI per indici

Autore: Alexey Klenov

 

sarebbe utile che tali indicatori ordinassero anche questo

a seconda dei loro valori. Se esiste una funzione di questo tipo, vi prego di condividerla, per non inventare una bicicletta.

 
Prival:

sarebbe utile ordinare anche questo aspetto in tali indicatori

a seconda dei loro valori. Se esiste una funzione di questo tipo, vi prego di condividerla, per non inventare una bicicletta.

Non c'è una funzione pronta, ma penso che non sarà difficile abbozzarla.

19.05.2010

Ecco realizzato

File:
 

Grazie.

L'unica cosa che vorrei sottolineare è che il metodo di sincronizzazione non funziona sempre. Ecco un'immagine. Buco tra virgolette per 24 ore, ma tutto è sincronizzato ((((.

Questo è molto brutto. Perché non riesco a capire e, soprattutto, cosa fare?

 
Prival:

Grazie.

L'unica cosa che vorrei sottolineare è che il metodo di sincronizzazione non funziona sempre. Ecco un'immagine. Buco tra virgolette per 24 ore, ma tutto è sincronizzato ((((.

Questo è molto brutto. Perché è così non riesco a capire e, soprattutto, cosa fare?


L'indicatore utilizza 2 tipi di sincronizzazione

1 in base al numero di barre (dovrebbero esserci più barre sul grafico rispetto alla storia richiesta per impostazione predefinita di 500 barre) questa condizione è apparentemente soddisfatta.

2 in base all'ora di apertura della barra zero su ogni coppia di valute - anche questa condizione è apparentemente soddisfatta.

Penso che valga la pena di aggiungere un terzo tipo di sincronizzazione per verificare l'ora di apertura di ogni barra su ogni coppia per analogia con il secondo tipo di sincronizzazione.

Dato che sarò un po' più libero, realizzerò anche questo tipo.

 
olyakish:

....

Penso che valga la pena aggiungere un terzo tipo di sincronizzazione per verificare l'ora di apertura di ogni barra su ogni coppia, in analogia con il secondo tipo di sincronizzazione.

Nella vostra immagine e similitudine ho creato la funzione bool init_tf(...).

//+------------------------------------------------------------------+
//| Inizializzazione dei grafici delle coppie di valute coinvolte.
//| e controllo della sincronizzazione dei dati|
//+------------------------------------------------------------------+
//| in.|
//| mas[] è un array di nomi di caratteri richiesti |
//| time_0 - ora corrente della barra[0]|
//| count_Bars - numero richiesto di barre |
//+------------------------------------------------------------------+
bool init_tf(string &mas[], datetime time_0, int count_Bars) { 
   bool     rez=false;              // flag di successo
   int      copied=0,               // numero di dati copiati
            counter=0,              // contatore di errori
            tmp_bars=0;             // per verificare il numero di barre disponibili
   datetime tmp_time[1];            // array per controllare l'ora della barra
   
   f_comment("C'è una sincronizzazione in corso".);
     
   for(int i=0; i<count_symbol; i++)  {
      //Stampa("i=",i," ",count_symbol," ",mas[i]);
      tmp_bars=Bars(mas[i],PERIOD_CURRENT);
      if(tmp_bars<count_Bars) { // controllare il numero di barre
         Print("i=",i,"Non ci sono abbastanza bar (", mas[i],"-",fTimeFrameName(_Period),") MaxBars=",MaxBars," > Bars=",tmp_bars);
         counter++;
      }
      ResetLastError();
      copied = CopyTime(mas[i],PERIOD_CURRENT,0,1,tmp_time);
      if(copied < 1) { // errore di copia
         Print("i=",i," Errore di copia (", mas[i],"-",fTimeFrameName(_Period),") №",_LastError," (",ErrorDescription(_LastError),")");
         counter++;
      }
      if(tmp_time[0]!=time_0) { // l'orario non corrisponde
         Print("i=",i," Nessuna sincronizzazione dell'ora (", mas[i],"-",fTimeFrameName(_Period),") delta ="",(long)(time_0-tmp_time[0])/60," min");
         counter++;
      }
   }// fine for(int i=0; i<k; i++)
   
   if(counter==0) {  // tutto va bene. nessun errore
      rez=true;
      f_comment("Tutto. Ok".);
   } 
   else f_comment("Non c'è sincronizzazione".+(string)counter);

   ChartRedraw( );
   return(rez);
}

Ho selezionato 12 coppie che parteciperanno al campionato. Ho creato un indicatore RVI_ALL solo per studiare la sincronizzazione. L'ho avviato. Risultato.

2010.05.30 16:55:26 RVI_ALL (EURUSD,M1) i= 10 Nessuna sincronizzazione temporale ( GBPJPY - M1 ) delta = 1 min.

2010.05.30 16:55:26 RVI_ALL (EURUSD,M1) i= 5 Nessuna sincronizzazione temporale ( AUDUSD - M1 ) delta = 1 min.

2010.05.30 16:55:26 RVI_ALL (EURUSD,M1) i= 1 Nessuna sincronizzazione temporale ( GBPUSD - M1 ) delta = 1 min.

E' domenica, non ci sono barre (ultima barra) su questi simboli. Il prossimo tick, solo il lunedì. Poi mi sono ricordato di questo articolo grafico senza buchi https://www.mql5.com/it/articles/1407.

E ci saranno dei buchi. Ci saranno. Dobbiamo combatterli in qualche modo. In linea di principio, si può fare come descritto nell'articolo. Ma ho una domanda.

L'indicatore si blocca su un singolo grafico. Se c'è uno scambio di storia su questo simbolo, posso scoprirlo, prev_calculated viene azzerato.

Ma come faccio a sapere se gli altri simboli hanno avuto uno scambio di storia o se i dati sono arrivati con un lungo ritardo?

 
Prival:

E ci saranno dei buchi. Ci saranno dei buchi. Bisogna affrontarli in qualche modo. In linea di principio, si può fare come descritto nell'articolo. Ma ho una domanda.

L'indicatore si blocca su un singolo grafico. E se c'è stato uno scambio di storia su questo simbolo, posso scoprirlo, prev_calculated sarà azzerato.

Ma come faccio a sapere se gli altri simboli hanno avuto uno scambio di storia o se i dati sono arrivati con un lungo ritardo?


1 O non permettete all'indicatore di essere disegnato se c'è un buco nella cronologia e interrogate periodicamente la cronologia al momento di "rattoppare" il buco. (Un nuovo tick sul grafico corrente o un timer).

2.Oppure disegnare l'indicatore solo fino al buco, a condizione che il buco nella cronologia sia abbastanza lontano.

e modificare leggermente questa funzione

bool init_tf(string &mas[], datetime time_0, int count_Bars, int shift) 
и далее по тексту 
copied = CopyTime(mas[i],PERIOD_CURRENT,shift,1,tmp_time);


Quindi richiamare questa funzione in un ciclo (da 0 a shiftbar).

In questo caso

shift

sarà la posizione della barra sullo strumento corrente e sul TF, che controlliamo per la sincronizzazione con altri strumenti.

 

Non ho modo di sapere che c'è un buco nella storia.

https://www.mql5.com/ru/forum/1111/8747#comment_8747

L'unica via d'uscita è copiare l'ora e fare un ciclo attraverso l'intero array, ma anche questo può essere una seccatura, è un circolo vizioso ( ((

Se gli sviluppatori non cambiano il concetto di https://www.mql5.com/it/articles/1407 per realizzare grafici senza buchi, potrebbe risultare impossibile sincronizzare tutto.

 
Prival:

Non ho modo di sapere che c'è un buco nella storia.

https://www.mql5.com/ru/forum/1111/8747#comment_8747

L'unica via d'uscita è copiare l'ora e fare un ciclo attraverso l'intero array, ma anche questo può essere una seccatura, è un circolo vizioso ( ((

Se gli sviluppatori non cambiano il concetto di https://www.mql5.com/it/articles/1407 per realizzare grafici senza buchi, potrebbe risultare impossibile sincronizzare tutto.

Usate la sincronizzazione tramite buffer time[] e non ci sarà confusione.

Basta che una chiamata di citazione sia accompagnata da una pre-verifica per tempo e poi tutto sarà sincronizzato.

Anche se sono d'accordo sul fatto che la strada non è facile e ci possono essere molti errori.

 

Salve!

Ho dei dubbi sulla correttezza della formula del dollar index, forse sono falsi

Qualcuno potrebbe spiegare più dettagliatamente questa formula e come è nata?

 


"L'indice del dollaro è un valore di tipo double calcolato con una formula gentilmente fornitami da Neutron".

Perché citare formule e fare riferimento al nome di qualcun altro? Ha sette occhi nella testa? Risulta che prima bisogna leggere l'articolo, poi chiedere agli autori delle formule? Se è lui l'autore, allora fornisca il link da cui le prende.