Price Constants

I calcoli di indicatori tecnici richiedono valori di prezzo e/o valori di volumi, sui quali i calcoli verranno eseguiti. Ci sono 7 identificatori predefiniti dall'enumerazione ENUM_APPLIED_PRICE, utilizzati per specificare il prezzo base per il calcolo desiderato.

ENUM_APPLIED_PRICE

ID

Descrizione

PRICE_CLOSE

Prezzo di chiusura

PRICE_OPEN

Prezzo di apertura

PRICE_HIGH

Il prezzo massimo per il periodo

PRICE_LOW

Il prezzo minimo per il periodo

PRICE_MEDIAN

Prezzo mediano, (high + low)/2

PRICE_TYPICAL

Prezzo tipico, (high + low + close)/3

PRICE_WEIGHTED

Prezzo medio, (alto + basso + vicino + close)/4

Se il volume viene utilizzata nei calcoli, è necessario specificare uno dei due valori dell'enumerazione ENUM_APPLIED_VOLUME.

ENUM_APPLIED_VOLUME

ID

Descrizione

VOLUME_TICK

Tick volume

VOLUME_REAL

Trade volume

L'indicatore tecnico iStochastic() può essere calcolato in due modi diversi per:

  • o solo i prezzi Close;
  • o prezzi High e Low.

Per selezionare una variante necessaria per il calcolo, specificare uno dei valori dell'enumerazione ENUM_STO_PRICE.

ENUM_STO_PRICE

ID

Descrizione

STO_LOWHIGH

Il calcolo si basa sui prezzi inferiore/superiore

STO_CLOSECLOSE

Calculation is based on Close/Close prices

Se un indicatore tecnico usa per i calcoli i dati prezzo, il tipo di cui viene impostato ENUM_APPLIED_PRICE, quindi la gestione di qualsiasi indicatore (costruita nel terminale o scritta da un utente) può essere utilizzata come la serie prezzo di ingresso. In questo caso, i valori del buffer zero del indicatore verranno utilizzati per i calcoli. In questo modo è facile costruire i valori di un indicatore utilizzando i valori di un altro indicatore. L'handle di un indicatore personalizzato viene creato chiamando la funzione iCustom().

Esempio:

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- parametri di input
input int      RSIperiod=14;         // Periodo per il calcolo dell'RSI
input int      Smooth=8;             // Periodo smussamento RSI
input ENUM_MA_METHOD meth=MODE_SMMA// Metodo di smussamento
//---- disegna RSI
#property indicator_label1  "RSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//---- disegna RSI_Smoothed
#property indicator_label2  "RSI_Smoothed"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrNavy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- buffers indicatore
double         RSIBuffer[];          // Qui conserviamo i valori di RSI
double         RSI_SmoothedBuffer[]; // Qui ci saranno i valori smussati di RSI
int            RSIhandle;            // Handle dell' indicatore RSI
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione Indicatore Personalizzato                         |
//+--------------------------------------------------------------------------------+
void OnInit()
  {
//--- mappatura buffers indicatore
   SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
   IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- 
   RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
//---
  }
//+--------------------------------------------------------------------------------+
//| Funzione di iterazione indicatore personalizato                                |
//+--------------------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]
                 )
 
  {
//---  Resetta il valore dell'ultimo errore
   ResetLastError();
//--- Riceve i dati dell'indicatore RSI in un array RSIBuffer []
   int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
   if(copied<=0)
     {
      Print("Impossibile copiare i valori dell'indicatore RSI. Error = ",
            GetLastError(),",  copied =",copied);
      return(0);
     }
//--- Crea l'indicatore dei valori medi con i valori di RSI
   int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
   copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
   if(copied<=0)
     {
      Print("Impossibile copiare l'indicatore smussato di RSI. Error = ",
            GetLastError(),",  copied =",copied);
      return(0);
     }
//--- restituisce il valore di prev_calculated per la prossima chiamata
   return(rates_total);
  }