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

 
Alexey Viktorov:

Si noti la conversione del tempo e del prezzo in coordinate XY in pixel

Leggere il prezzo della linea, convertirlo in pixel e assegnare le coordinateall'oggetto "Text Mark" sull'asse Y, mentre la coordinata X rimane invariata.

Ho guardato questa funzione per molto tempo, ma non sapevo come procedere perché non sono abbastanza esperto. Grazie, cercherò di integrarlo nel codice.

 
Aleksei Stepanenko:

Line And Text Indicator Ver 1

L'indicatore sposta il testo seguendo la linea. Inserisci il nome della linea nel parametro di input.

Grazie. Anche questo è un layout interessante. Lo toglierò sicuramente, non appena avrò capito ChartTimePriceToXY().

 

Potete dirmi per favore cosa potrebbe essere sbagliato?

   for(int i=rates_total-prev_calculated-2;i>=0;i--)
     {
      ADRBuffer1[i]=High[i];
      if(High[i]<ADRBuffer1[i+1])
      ADRBuffer1[i]=ADRBuffer1[i+1];
      ADRBuffer2[i]=Low[i];
      if(Low[i]>ADRBuffer2[i+1])
      ADRBuffer2[i]=ADRBuffer2[i+1];
     }

Basso disegna ma Alto non vuole...

 
MakarFX:

Potete dirmi per favore cosa potrebbe essere sbagliato?

Basso disegna ma Alto non vuole...

Cosa è ADRBuffer1[i+1] uguale alla prima esecuzione? Probabilmente c'è più spazzatura di Alta[i]

 
Alexey Viktorov:

A cosa corrisponde ADRBuffer1[i+1] alla prima esecuzione? Probabilmente c'è più spazzatura di Alta[i].

Per favore, ditemi come risolvere il problema e perché Low disegna bene?

Tutto il codice

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDimGray
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrCrimson
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrTeal
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- indicator buffers
double   ADRBuffer0[];
double   ADRBuffer1[];
double   ADRBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorDigits(Digits);
//--- indicator buffers mapping
   SetIndexBuffer(0,ADRBuffer0,INDICATOR_DATA);
   SetIndexBuffer(1,ADRBuffer1,INDICATOR_DATA);
   SetIndexBuffer(2,ADRBuffer2,INDICATOR_DATA);
   SetIndexLabel(0,"ADR");
   SetIndexLabel(1,"ADR1");
   SetIndexLabel(2,"ADR2");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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-2)<=0)return(0);
   for(int i=rates_total-prev_calculated-2;i>=0;i--)
     {
      ADRBuffer1[i]=High[i];
      if(High[i]<ADRBuffer1[i+1])
      ADRBuffer1[i]=ADRBuffer1[i+1];
      ADRBuffer2[i]=Low[i];
      if(Low[i]>ADRBuffer2[i+1])
      ADRBuffer2[i]=ADRBuffer2[i+1];
     }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
MakarFX:

Potete dirmi per favore come risolvere e perché Low disegna normalmente?

L'intero codice

Il numero di costruzioni deve necessariamente essere dichiarato. E provate a scrivere l'inizializzazione del buffer con zero, a condizione che prev_calculate == 0;

 
Alexey Viktorov:

È obbligatorio dichiarare il numero di costruzioni.

Non mi è chiaro, purtroppo, cosa significhi questo.

Alexey Viktorov:

E provate a scrivere l'inizializzazione del buffer con zero, a condizione che prev_calculate == 0;

Non è servito(

 
MakarFX:

Purtroppo non capisco cosa significhi.

Non è stato d'aiuto.


if( prev_calculated == 0 ) {
   ADRBuffer1[rates_total-1] = High[rates_total-1];
   ADRBuffer2[rates_total-1] = Low[rates_total-1]
}

for(int i=rates_total-prev_calculated-2;i>=0;i--)
{
...
}
 
MakarFX:

Purtroppo non capisco cosa significhi.

Non è stato d'aiuto.

#property indicator_plots   3

Il valore predefinito è 1. E se annunciare il numero di costruzioni non aiuta, allora procedete all'opzione B.

 
PapaYozh:


Grazie, mi ha aiutato...non l'ho fatto bene)))
Motivazione: