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

 
Ciao, per favore aiutami con un problema. Ho bisogno di ottenere dati da un EA per diversi simboli/TF. Il manuale dice:"Il meccanismo di accesso al server per i dati non dipende da come è stata avviata una richiesta - da un utente durante la navigazione di un grafico o dal programma in MQL4". Tuttavia, in pratica, se in tempo reale, per esempio, tracciamo il numero di barre su un simbolo/TF diverso dal simbolo su cui sta girando l'EA, succede quanto segue Il nuovo simbolo carica un piccolo numero di barre al primo accesso (circa 1000 per M1) e questo numero non cambia. Ho provato diverse funzioni per accedere alle serie temporali, ho provato a specificare lo spostamento delle barre e il tempo più profondo nella storia di quanto sia caricato al momento, ho provato a spostare il ChartNavigate(_ID, CHART_BEGIN) - i nuovi dati non vengono caricati e il numero di barre non cambia. Tuttavia, se apro una finestra programmaticamente dallo stesso Expert Advisor (l'ho già aperta per la funzione ChartNavigate()) e sposto il grafico verso sinistra usando il tasto freccia/Home/PgUp, porta all'aumento degli array di timeseries, il numero di barre viene aumentato in tempo reale, cioè i dati vengono caricati. Cosa bisogna fare per caricare la cronologia in modo programmatico senza premere tasti fisici sulla tastiera? Grazie)
 
Ihor Herasko:

Fallo in questo modo. Il codice è quasi corretto. Manca solo una parola:

Grazie!
 
Alexandr Mordashov:
Ciao, aiutami a risolvere il problema. Ho bisogno di ottenere dati da un EA per diversi simboli/TF. L'Aiuto dice:"Il meccanismo di accesso al server per i dati non dipende da come la richiesta è stata avviata - da un utente durante la navigazione di un grafico o da un programma in MQL4". Tuttavia, in pratica, se in tempo reale, per esempio, tracciamo il numero di barre su un simbolo/TF diverso dal simbolo su cui sta girando l'EA, succede quanto segue Il nuovo simbolo carica un piccolo numero di barre al primo accesso (circa 1000 per M1) e questo numero non cambia. Ho provato diverse funzioni per accedere alle serie temporali, ho provato a specificare lo spostamento delle barre e il tempo più profondo nella storia di quanto sia caricato al momento, ho provato a spostare il ChartNavigate(_ID, CHART_BEGIN) - i nuovi dati non vengono caricati e il numero di barre non cambia. Tuttavia, se apro una finestra programmaticamente dallo stesso Expert Advisor (l'ho già aperta per la funzione ChartNavigate()) e sposto il grafico verso sinistra usando il tasto freccia/Home/PgUp, porta all'aumento degli array di timeseries, il numero di barre viene aumentato in tempo reale, cioè i dati vengono caricati. Cosa bisogna fare per caricare la cronologia in modo programmatico senza premere tasti fisici sulla tastiera? Grazie)

Dovete essere più espliciti sulla domanda. Se il problema non è posto, non può essere risolto.

 
Galim_V:
Puoi dirmi come ottenere gli indicatori di fondo da un timeframe diverso da quello su cui il gufo è in bilico?
double iRev()
{
 static int wtf;
 static int tf;  
 int xtf =Period();       // таймфрейм текущего графика 
 
                          //PERIOD_CURRENT;
 if(xtf != PERIOD_CURRENT)
 {
 Print("xtf  ",xtf);
   switch(xtf)
   {
    case 1: tf = PERIOD_H1;
    break;
    case 5: tf = PERIOD_H4; wtf = PERIOD_H1;
    break;
    case 15: tf = PERIOD_D1;
    break;
   }
     
 }
Print("tf == ",tf,"wtf ==",wtf);
 double  iRa =  NormalizeDouble(iCustom(NULL,tf,"iRevers",InpSARStep,InpSARMaximum,0),Digits);
 double  wRa =  NormalizeDouble(iCustom(NULL,wtf,"iRevers",InpSARStep,InpSARMaximum,0),Digits);
   if(iRa != 0) ObjectCreate("Ra",OBJ_HLINE,0,Time[0],iRa,0,0);
     
     ObjectSet("Ra",OBJPROP_TIME1,Time[0]);
     ObjectSet("Ra",OBJPROP_PRICE1,iRa);
   
   if(wRa != 0) ObjectCreate("weRa",OBJ_HLINE,0,Time[0],wRa,0,0); 
     ObjectSet("weRa",OBJPROP_TIME1,Time[0]);
     ObjectSet("weRa",OBJPROP_PRICE1,wRa); 
    
     
  Print("iRa   ",iRa,wRa);
 return(iRa);
}  
Funziona, ma non sempre correttamente. Ho allegato degli oggetti per una valutazione visiva. Qualche consiglio o dove cercare.
 
Galim_V:
Funziona, ma non sempre correttamente. Ho allegato gli oggetti per una valutazione visiva. Si prega di consigliare o dove cercare.

A cosa serve DRAW_LINE?

 double  iRa =  NormalizeDouble(iCustom(NULL,tf,"iRevers",InpSARStep,InpSARMaximum,DRAW_LINE,0),Digits);
 double  wRa =  NormalizeDouble(iCustom(NULL,wtf,"iRevers",InpSARStep,InpSARMaximum,DRAW_LINE,0),Digits);
 
Alexey Viktorov:

A cosa serve DRAW_LINE?

Ho corretto il codice. Ma non ha funzionato correttamente, nemmeno a causa di errori nel codice. Faccio dei test nel terminale del mio broker e non sempre guardo la connessione con il server. È molto importante in questo caso. Grazie.
 

Salve. Come faccio a sapere il prezzo di chiusura a M30 se l'EA è sul grafico H1?

Close_M30= iClose(Symbol(),PERIOD_M30,1);
 
bij:

Salve. Come faccio a sapere il prezzo di chiusura a M30 se l'EA è sul grafico H1?

Mi piace quando la gente fa una domanda e si risponde da sola ))

Fondamentalmente, tutto è corretto. C'è solo un punto sottile: prima di utilizzare i dati ottenuti da un altro periodo di tempo, dobbiamo assicurarci che questi dati esistano davvero.

Quindi il codice corretto completo sarebbe come questo

ResetLastError();
Close_M30= iClose(Symbol(),PERIOD_M30,1);
if (GetLastError() != ERR_NO_ERROR)
{
  // Значение Close_M30 использовать нельзя
}
 
Ihor Herasko:

Mi piace quando la gente fa una domanda e poi si risponde da sola ))

In linea di massima tutto è corretto. C'è solo una sfumatura: prima di usare i dati di un altro TF, bisogna assicurarsi che questi dati esistano davvero.

Quindi il codice corretto completo sarebbe come questo:

Grazie, azione solo dopo la chiusura di H1, ma la condizione è soddisfatta 30 minuti prima della chiusura di H1.

 ResetLastError();
   niz_=NormalizeDouble(iCustom(NULL,PERIOD_M30,"mand v.1",2,1),Digits);
   Close_M30=iClose(Symbol(),PERIOD_M30,1);
   if(GetLastError() != ERR_NO_ERROR)return;
   if(Close_M30>niz_)//условие
     {
      //действие
     }
 
bij:

Grazie, l'azione è solo dopo la chiusura H1, ma la condizione è soddisfatta 30 minuti prima della chiusura H1.

Se vuoi prendere la candela M30 che ha chiuso con l'ultima chiusura H1, può essere una candela con indice non solo 1, ma anche 2. Un'altra cosa è che allora non è chiaro perché si prende il prezzo di chiusura di M30 quando è lo stesso prezzo di chiusura della candela H1 precedente. Cioè, in questo caso non ha senso interrogare il prezzo di chiusura di un altro TF, perché coincide con il prezzo di chiusura del TF corrente.