Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 991

 
kopeyka2:

È esattamente quello che ho pensato. Il problema del malinteso è la parola "parametri". Così ho iniziato a guardare TUTTE le variabili che sono coinvolte nell'handle --> CopyBuffer

1) La mia domanda fin dall'inizio era quella di cambiare il timeframe SCREEN per salvare i dati della maniglia. Come è in MT4.

E infatti risulta così:

SEMPRE e su TUTTI i timeframe dà lo stesso valore di 10

Non avendo ottenuto nulla qui sono andato avanti.

2) E cito:"Ottiene i dati del buffer specificato dell'indicatore specificato nella quantità specificata nella matrice del buffer".

Cioè, impostandoil conteggio a mano dovremmo avere un INTERVALLO con i valori . Ed eccoli lì! MA!!!!!! Solo quando il periodo della maniglia corrisponde a

PERIOD_H1sullo schermo del monitor. Tutti i valori sono trasmessi chiaramente. Ma passando ad un altro timeframe non c'è nessun dato sullo schermo.

NON vengono trasmessi in nessun modo!!!! E la mia domanda era esattamente questa. E il numero di barre non è così importante in questo caso se non sono lì!!!!


Ho guardato l'indicatore suggeritoMTF_LRMA.mq5 ma è lo stesso. Passa a un altro timeframe sullo schermo e i dati passano per il timeframe dello schermo. Ne ho bisogno su un palmare.

Per esempio: iClose(NULL, PERIOD_H1, 5); su tutti i timeframe darà lo stesso valore - 10 barre su H1.

Finora tutti gli esempi erano sulla correzione delconteggio di CopyBuffer. Ma l'array è vuoto.


Vi sbagliate. Gestire i dati in qualsiasi momento. Vi darò un esempio tra circa 10 ore. Non posso farlo sul mio cellulare.
 
Artyom Trishkin:
Vi sbagliate. Gestire i dati in qualsiasi momento. Vi darò un esempio tra circa 10 ore. Non potrò farlo dal mio cellulare.

OK. Grazie per la risposta.


Mi sono corretto.

Напррмер: iClose(NULL, PERIOD_H1, 5); на всех таймфреймах будут давать одно и тоже значение : Закрытие на 5 баре по Н1. 

Ho pensato che potrebbe essere così

MqlParam params[]; 
//--- create iMA("EURUSD",PERIOD_M15,8,0,MODE_EMA,PRICE_CLOSE); 
   ArrayResize(params,4); 
//--- set ma_period 
   params[0].type         =TYPE_INT; 
   params[0].integer_value=0; 
//--- set ma_shift 
   params[1].type         =TYPE_INT; 
   params[1].integer_value=0; 
//--- set ma_method 
   params[2].type         =TYPE_INT; 
   params[2].integer_value=MODE_EMA; 
//--- set applied_price 
   params[3].type         =TYPE_INT; 
   params[3].integer_value=PRICE_CLOSE; 
//--- create MA 
   h_MA=IndicatorCreate("EURUSD",PERIOD_M15,IND_MA,4,params); 
//--- release indicators (first h_MACD) 
   
  if(h_MA==INVALID_HANDLE)
     {
      Print("The iMA (",string(PERIOD_M15),") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
//---
   return(INIT_SUCCEEDED);

Ma se cambiate idea, aspetterò il primo metodo per ottenere il valore dell'indicatore tecnico (iMA). Ma ancora non capisco.

 
kopeyka2:

OK. Grazie per la risposta.


Mi sono corretto.

Ho pensato che potrebbe essere così

Ma se cambiate idea, aspetterò il primo metodo per ottenere il valore dell'indicatore tecnico (iMA). Ma ora non lo capisco...

Ho mostrato sopra che il numero di barre su diversi TF è diverso, e quindi diverso numero di barre da copiare, a seconda del TF in cui l'indicatore deve essere calcolato. Dovresti controllare il numero di barre, calcolato da BarsCalculated() e usarlo come base.

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(rates_total==prev_calculated) return(rates_total);
//---
   int    i;
   double diff;
//--- check for rates count
   if(rates_total<=ExtPeriodRSI)
      return(0);
//---
   if(TF!=PERIOD_CURRENT)
   {
      if(handle==INVALID_HANDLE)
        {
         handle=iCustom(Symbol(),TF,ind_name,Variant,RSIPeriod,Levl_Up,Levl_Down,PERIOD_CURRENT);
         return(0);
        }
      else
        {
         int bars_calculated=BarsCalculated(handle);
                  //Print("Начнем расчет - " , bars_calculated);
         if(bars_calculated<=0) return(0);
         if(Bars(Symbol(),TF)!=bars_calculated)
           {
            for(i=rates_total-prev_calculated-1;i>=0;i--)
              {
               Delta[i]=0.0;   
              }
            return(prev_calculated);
           } 
        }
 
Aleksey Vyazmikin:

Ho mostrato sopra che il numero di barre su diversi TF è diverso, e quindi si dovrebbe richiedere un numero diverso di barre da copiare, a seconda del TF, che dovrebbe essere calcolato dall'indicatore. Dovreste controllare il numero di barre, calcolato dall'indicatore tramite BarsCalculated() e usarlo come base, ecco un esempio per MTF

Grazie. Lo proverò. Ma come indicato in precedenza, l'array è del tutto vuoto. Ho fatto degli sdoganamenti scritti a mano sull'array. È tutto vuoto.
 
kopeyka2:
Grazie. Farò un tentativo. Ma come sottolineato in precedenza, l'array è vuoto del tutto. Ho fatto degli sdoganamenti scritti a mano sull'array. È tutto vuoto.
Stai ignorando che dobbiamo aspettare il caricamento dei dati da un altro lasso di tempo? Vi ho dato degli esempi. I dati nell'indicatore mostrato sono presi solo da timeframe più alti. Se impostiamo inferiore o uguale al timeframe corrente, i dati vengono presi da quello corrente. Tutto questo è nel codice, ma non vi siete preoccupati di esaminarlo. Ma lei sta facendo una dichiarazione.
 
Artyom Trishkin:
Stai ignorando che devi aspettare che i dati vengano caricati da un diverso lasso di tempo? Vi ho dato degli esempi. I dati nell'indicatore mostrato sono presi solo da timeframe più alti. Se impostiamo inferiore o uguale al timeframe corrente, i dati vengono presi da quello corrente. Tutto questo è nel codice, ma non vi siete preoccupati di esaminarlo. Ma lei sta facendo una dichiarazione.
Non ho solo guardato, ho smontato il tuo indicatore a pezzi. Ho avuto l'idea del ritardo dei dati fin dall'inizio. E subito, dalla prima visione, ho visto il tuo Timer. Guarderò in quella direzione.
 
kopeyka2:
Non solo ho guardato, ma ho smontato il tuo indicatore pezzo per pezzo. Qui c'era l'idea del ritardo dei dati fin dall'inizio. E subito, dalla prima visione, ho visto il tuo Timer. Guarderò in quella direzione.
L'ultimo ciclo con la conversione dei dati al timeframe corrente commentato, e in qualsiasi buffer grafico passare i dati dai buffer calcolati MAshek, e si vedrà sul grafico ciò che si vuole vedere.
 

per ora

altro (non nativo) lasso di tempo


 
kopeyka2:

per ora

altro (non nativo) lasso di tempo


Avete deliberatamente commentato la stringa di ritorno nel caso in cui i dati non vengano ricevuti? Perché? Se si svitano le ruote e si dice che il motore ronza, il volante gira, ma la macchina non va, e quindi è fuori uso, è un po' dura.
 
kopeyka2:
Ci proverò. Lo proverò. Ma come ho fatto notare prima, l'array è vuoto del tutto. Ho usato le mie mani per fare letture della matrice. È tutto vuoto.

Prima ti ho dato un pezzo di codice del tuo indicatore con stampa, hai provato a copiarlo? Non appare nulla nel log, nessun errore o numero?