Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1019

 
Сергей Таболин:

Il primo percorso ha aiutato )))) Grazie.

Un'altra domanda: strappo 3 istanze dell'indicatore nell'indicatore per ottenere dati da diversi TF. Ma quando lo collego a un grafico, ottengo questa specie di foglio di calcolo:

Cosa significherebbe?

Non posso dirlo con certezza, ma forse il 2° buffer è stato inizializzato in ritardo.

Per scoprire esattamente qual è la ragione, dovreste regolare le seguenti linee in questo modo

if(CopyBuffer(handle_MA,0,0,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_MA
   {                                                                                // если не скопировалось
      Print("Не удалось скопировать данные из индикаторного буфера в buffer_MA, код ошибки "+ IntegerToString(GetLastError()));   // то выводим сообщение об ошибке
      return(0);                                                                    // и выходим из функции
   }

Dopo di che possiamo dire con più sicurezza cosa c'è di sbagliato

 
Oleg Peiko:

Non posso dirlo con certezza, ma forse il 2° buffer è stato inizializzato in ritardo.

Per scoprire esattamente qual è il motivo, dovreste regolare le seguenti linee in questo modo

Dopo di che potremo dire con più sicurezza cosa c'è che non va.

2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Не удалось скопировать данные из индикаторного буфера в buffer_MA2
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        4806
2019.03.23 22:58:11.637 my_HMA5_123.ex5::my_HMA5 (GBPUSD,M15)   BarsCalculated() вернул -1, код ошибки 4806
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
ERR_INDICATOR_DATA_NOT_FOUND    4806    Запрошенные данные не найдены

Si può fare qualcosa?

A proposito, questa copia si apre su M15.

Tuttavia, la stessa cosa è anche in altri TF...

 
Сергей Таболин:

C'è qualcosa che si può fare?

A proposito, questa copia si apre su M15.

È lo stesso anche su altri timeframe...

Nel timer, una volta ogni due minuti, chiedete qualsiasi dato per il periodo di tempo richiesto. In questo modo avrete sempre dati aggiornati per il periodo di tempo.

Inoltre: in OnCalculate() all'inizio, lo si richiede, per esempio:

   if(iTime(NULL,PERIOD_M15,1)==0)
      return 0;

Così, finché i dati del timeframe a quindici minuti non sono disponibili, l'indicatore aspetterà il prossimo tick.
Potete richiedere la giusta quantità di dati per il calcolo usando la funzione CopyXXX:

   datetime array[];
   if(CopyTime(NULL,PERIOD_M15,0,number_of_datas,array)!=number_of_datas)
      return 0;

In questo caso, fino a quando il numero_di_dati richiesto è disponibile, l'indicatore aspetterà il prossimo tick.

Se decidete di usare la funzione

Bars(NULL,PERIOD_M15);

..., bisogna tener conto che la quantità di dati per il calcolo non deve superare il tasso_totale, altrimenti si superano i limiti dell'array. In altre parole, se ci sono meno barre sul timeframe corrente che su M15, allora dovremmo prendere il numero di barre uguale al loro numero sul timeframe corrente = rates_total

 
Artyom Trishkin:

Nel timer, una volta ogni due minuti, richiedete qualsiasi dato per il periodo di tempo richiesto. In questo modo avrete sempre dati aggiornati per il periodo di tempo.

Inoltre: in OnCalculate() all'inizio si richiede, per esempio:

Quindi, fino a quando i dati del timeframe 15 min sono disponibili, l'indicatore aspetterà il prossimo tick.
È possibile richiedere la giusta quantità di dati per il calcolo tramite la funzione CopyXXX:

In questo caso, fino a quando la quantità di dati richiesta in number_of_datas è disponibile, l'indicatore aspetterà il prossimo tick.

Se decidete di usare la funzione

..., bisogna tener conto che la quantità di dati per il calcolo non deve superare il tasso_totale, altrimenti si superano i limiti dell'array. In altre parole, se ci sono meno barre sul timeframe corrente che su M15, allora dovremmo prendere il numero di barre uguale al loro numero sul timeframe corrente = rates_total

Grazie.

L'ha fatto così:

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(iTime(NULL,PERIOD_CURRENT,1)==0)  return(0); 
   if(iTime(NULL,periodTF1,1)==0)       return(0); 
   if(iTime(NULL,periodTF2,1)==0)       return(0); 
   
   int ma_values_to_copy; 
   int ma_calculated = 0;
   if(PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF1) && PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF2))   ma_calculated = BarsCalculated(handle_MA);
   else
   if(PeriodSeconds(periodTF1) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF1) < PeriodSeconds(periodTF2))        ma_calculated = BarsCalculated(handle_MA2);
   else
   if(PeriodSeconds(periodTF2) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF2) < PeriodSeconds(periodTF1))        ma_calculated = BarsCalculated(handle_MA3);
   
   if(ma_calculated <= 0){ 
      PrintFormat("BarsCalculated() вернул %d, код ошибки %d",ma_calculated,GetLastError()); 
      return(0); 
     }  
   if(prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1){ 
      if(ma_calculated > rates_total) ma_values_to_copy = rates_total; 
      else ma_values_to_copy = ma_calculated; 
     } else { 
      ma_values_to_copy = (rates_total - prev_calculated) + 1; 
     } 

risultato:

2019.03.24 00:56:38.056 my_HMA5_125 (GBPUSD,M30)        BarsCalculated() вернул -1, код ошибки 4806
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c3

Ho difficoltà con gli indicatori ))))

 

Ciao a tutti!
Si prega di consigliare la funzione CopyHigh.
Ho letto nella definizione di questa funzione: "Ottiene i dati storici in un array con il prezzo massimo della barra per un simbolo e un periodo specificato".

Stiamo parlando di un array di prezzi Bid o Ask? O c'è un modo per impostare il tipo di prezzo necessario?

 
renatmt5:

Ciao a tutti!
Per favore, date un consiglio sulla funzione CopyHigh.
Ho letto nella definizione di questa funzione: "Ottiene i dati storici in un array di prezzi massimi delle barre per un simbolo e un periodo specificati".

Stiamo parlando di un array di prezzi Bid o Ask? O è possibile impostare il tipo di prezzo necessario in qualche modo?

Riferimento:Caratteristiche della tracciatura

Caratteristiche di fare grafici

I dati storici, sulla base dei quali vengono costruiti i grafici, sono memorizzati sul disco rigido. Quando apri un grafico, i dati vengono scaricati dal disco e gli ultimi dati mancanti dal server di trading. Se i dati storici di uno strumento finanziario non sono disponibili sul disco rigido, vengono scaricate le ultime 512 barre dello storico.

Per scaricare i dati precedenti, sposta il grafico nell'area richiesta. Una volta aperto il grafico, la piattaforma inizierà a ricevere informazioni sulle quotazioni attuali. Così, l'ulteriore movimento dei prezzi si forma in tempo reale. Questa informazione viene automaticamente salvata in un file di cronologia e viene utilizzata quando si apre di nuovo questo grafico in futuro.

  • Il parametro "Max bars on chart" è impostato nelleimpostazioni della piattaforma. Questo parametro permette di controllare la quantità di dati storici mostrati sul grafico.
  • I grafici sono tracciati rispetto ai prezzi delle offerte. Se laprofondità del mercato è disponibile per il simbolo, i grafici saranno tracciati a Ultimo prezzo (il prezzo dell'ultima operazione eseguita).
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
Vladimir Karputov:

Riferimento:Caratteristiche dei grafici

Caratteristiche di fare grafici

I dati storici, sulla base dei quali vengono costruiti i grafici, sono memorizzati sul disco rigido. Quando apri un grafico, i dati vengono scaricati dal disco e gli ultimi dati mancanti dal server di trading. Se i dati storici di uno strumento finanziario non sono disponibili sul disco rigido, vengono scaricate le ultime 512 barre di storia.

Per scaricare i dati precedenti, sposta il grafico nell'area richiesta. Una volta aperto il grafico, la piattaforma inizierà a ricevere informazioni sulle quotazioni attuali. Così, ulteriori tendenze di prezzo si formano in tempo reale. Questa informazione viene automaticamente salvata in un file di cronologia e viene utilizzata quando si apre di nuovo questo grafico in futuro.

  • Il parametro "Max bars on chart" è impostato nelleimpostazioni della piattaforma. Questo parametro permette di controllare la quantità di dati storici mostrati sul grafico.
  • I grafici sono tracciati rispetto ai prezzi delle offerte. Se laprofondità del mercato è disponibile per il simbolo, i grafici saranno tracciati a Ultimi prezzi (ultimo prezzo di scambio).

Buona giornata Vladimir, come sempre mi aiuti :) Grazie!

 
Buona giornata a tutti. Si prega di consigliare come calcolare il volume della posizione in base ai fondi assegnati alla transazione.
 

Come trovare la più piccola candela di N in mql5?

In mql4

   min=99999;
   N=5;
   for(int i=1;i<=N;i++)
     {
      if(High[i]-Low[i]<min) min=High[i]-Low[i];
     }
 
yiduwi:

Come trovare la candela minima di N in mql5?

In mql4

In Expert Advisor o in un indicatore? Per il periodo attuale o per un altro?

Motivazione: