ObjectGetTimeByValue

La funzione restituisce il valore di tempo per il valore del prezzo specificato dell'oggetto specificato.

datetime  ObjectGetTimeByValue(
longchart_id,// Identificatore del chart
   string  name,         // nome dell'oggetto
   double  value,        // Prezzo
   int     line_id       // numero di riga
   );

Parametri

chart_id

[in] Identificatore del Grafico. 0 significa il grafico corrente.

name

[in] Nome dell'oggetto.

valore

[in] Valore prezzo.

line_id

[in]  Identificatore linea.

Valore restituito

Il valore di tempo per il valore del prezzo specificato dell'oggetto specificato.

Nota

La funzione utilizza una chiamata sincrona, il che significa che la funzione attende l'esecuzione di tutti i comandi che sono stati accodati per questo chart prima della sua chiamata, per cui questa funzione può richiedere molto tempo. Questa funzione deve essere presa in considerazione quando si lavora con un gran numero di oggetti su un chart.

Un oggetto può avere valori diversi in una coordinata prezzo, pertanto è necessario specificare il numero di riga. Questa funzione si applica solo per i seguenti oggetti:

  • Trendline (OBJ_TREND)
  • Trendline per angolo (OBJ_TRENDBYANGLE)
  • Linea di Gann (OBJ_GANNLINE)
  • Canale equidistante (OBJ_CHANNEL) - 2 lines
  • Canale di regressione lineare (OBJ_REGRESSION) - 3 lines
  • Canale di deviazione standard (OBJ_STDDEVCHANNEL) - 3 lines
  • Linea con freccia (OBJ_ARROWED_LINE)

 

Esempio:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectGetTimeByValue" // nome dell'oggetto grafico
#define   STEP       100                        // passo del prezzo
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- ID, simbolo
   long   chart_id=ChartID();
   string chart_symbol=ChartSymbol(chart_id);
   
//--- ottenere il valore Point del simbolo del grafico
   double point=SymbolInfoDouble(chart_symbolSYMBOL_POINT);
   if(point==0)
     {
      PrintFormat("Failed to get the Point value of the \"%s\" symbol. Error %d"chart_symbolGetLastError());
      return;
     }
     
//--- costruire un canale equidistante dal massimo della barra visibile a sinistra al minimo di quella a destra
   if(!CreateChannel(chart_id))
      return;
   
//--- massimo e minimo del grafico, Cifre del simbolo del grafico
   double chart_max=ChartGetDouble(chart_idCHART_PRICE_MAX);
   double chart_min=ChartGetDouble(chart_idCHART_PRICE_MIN);
   int    digits=(int)SymbolInfoInteger(chart_symbolSYMBOL_DIGITS);
 
//--- fino a quando il prezzo calcolato è maggiore del valore minimo del prezzo del grafico,
//--- eseguire un ciclo attraverso i prezzi del grafico con STEP e ottieni il valore temporale
//--- per il valore di prezzo calcolato di ciascuna linea del canale equidistante.
//--- inviare il tempo ricevuto per ogni riga al diario
   int index=0;
   double price=chart_max;
   do
     {
      price=chart_max-STEP*index*point;
      datetime time0=ObjectGetTimeByValue(chart_idOBJ_NAMEprice0);
      datetime time1=ObjectGetTimeByValue(chart_idOBJ_NAMEprice1);
      string   time0_str=(time0>0 ? TimeToString(time0) : "No value at this price");
      string   time1_str=(time1>0 ? TimeToString(time1) : "No value at this price");
      string   idx=StringFormat("%02d"index);
      PrintFormat("[%s] For price %.*f the time value at line 0: %s, at line 1: %s"idxdigitspricetime0_strtime1_str);
      index++;
     }
   while(!IsStopped() && price>=chart_min);
   
//--- attendere 5 secondi e pulire
   Sleep(5000);
   ObjectDelete(chart_idOBJ_NAME);
   ChartRedraw(chart_id);
   /*
   risultato:
   [00For price 1.26110 the time value at line 0No value at this price,  at line 1No value at this price
   [01For price 1.26010 the time value at line 02024.12.30 17:00at line 1No value at this price
   [02For price 1.25910 the time value at line 02024.12.30 22:30at line 1No value at this price
   [03For price 1.25810 the time value at line 02024.12.31 04:00at line 12024.12.30 16:30
   [04For price 1.25710 the time value at line 02024.12.31 10:00at line 12024.12.30 22:00
   [05For price 1.25610 the time value at line 02024.12.31 15:30at line 12024.12.31 03:30
   [06For price 1.25510 the time value at line 02024.12.31 21:00at line 12024.12.31 09:00
   [07For price 1.25410 the time value at line 02025.01.02 03:30at line 12024.12.31 14:30
   [08For price 1.25310 the time value at line 0No value at this priceat line 12024.12.31 20:30
   [09For price 1.25210 the time value at line 0No value at this priceat line 12025.01.02 03:00
   [10For price 1.25110 the time value at line 0No value at this priceat line 1No value at this price
   [11For price 1.25010 the time value at line 0No value at this priceat line 1No value at this price
   [12For price 1.24910 the time value at line 0No value at this priceat line 1No value at this price
   [13For price 1.24810 the time value at line 0No value at this priceat line 1No value at this price
   */
  }
//+-----------------------------------------------------------------------------------------------------------------------------------------+
//| Costruire un canale equidistante dal Massimo della barra a sinistra al Minimo della barra a destra |
//+-----------------------------------------------------------------------------------------------------------------------------------------+
bool CreateChannel(const long chart_id=0)
  {
   long     bar1  =0bar2  =0visible=0;
   datetime time1 =0time2 =0;
   double   price1=0price2=0;
 
//--- ottenere la prima barra del grafico visibile a sinistra
   ResetLastError();
   if(!ChartGetInteger(chart_idCHART_FIRST_VISIBLE_BAR0bar1))
     {
      PrintFormat("%s: ChartGetInteger() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
//--- numero di barre visibili sul grafico
   if(!ChartGetInteger(chart_idCHART_VISIBLE_BARS0visible))
     {
      PrintFormat("%s: ChartGetInteger() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
 
//--- regola i valori ottenuti e calcola l'indice della prima barra visibile a destra
   bar1-=1;
   visible-=2;
   bar2=bar1-visible;
   
//--- simbolo del grafico
   string symbol=ChartSymbol(chart_id);
   
//--- ottenere l'ora della prima barra visibile a sinistra del grafico
   ResetLastError();
   datetime time_array[1];
   if(CopyTime(symbolPERIOD_CURRENT, (int)bar11time_array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   time1=time_array[0];
   
//--- ottenere l'ora della prima barra del grafico visibile a destra
   if(CopyTime(symbolPERIOD_CURRENT, (int)bar21time_array)!=1)
     {
      PrintFormat("%s: CopyTime() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   time2=time_array[0];
   
//--- ottenere il prezzo Massimo (High) della prima barra del grafico visibile a sinistra
   double price_array[];
   if(CopyHigh(symbolPERIOD_CURRENT, (int)bar11price_array)!=1)
     {
      PrintFormat("%s: CopyHigh() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   price1=price_array[0];
   
//--- ottenere il prezzo Minimo (Low) della prima barra visibile a destra del grafico
   if(CopyLow(symbolPERIOD_CURRENT, (int)bar21price_array)!=1)
     {
      PrintFormat("%s: CopyLow() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
   price2=price_array[0];
   
//--- calcolare la fascia di prezzo del grafico in punti
//--- per un canale equidistante, la distanza della seconda linea sarà pari a 1/3 dell'intervallo di prezzo
   double range=price1-price2;
   double distance=range*0.3;
   
//--- alle coordinate calcolate, crea un oggetto grafico - un canale equidistante
   if(!ObjectCreate(chart_idOBJ_NAMEOBJ_CHANNEL0time1price1time2price2time1price1-distance))
     {
      PrintFormat("%s: ObjectCreate() failed. Error %d",__FUNCTION__GetLastError());
      return(false);
     }
     
//--- aggiornare il grafico e restituire 'true
   ChartRedraw(chart_id);
   return(true);
  }

 

Vedi anche

Tipi di oggetti