Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 918

 
Tango_X:

Grazie! Ho sempre pensato che riferirsi alle classi fosse un puntatore a una classe. Ma qui è solo una dichiarazione... cosa c'entra?

Queste sono le basi dell'OOP, date un'occhiata all'Aiuto. Per esempio, gli operatori nuovo/cancellato e così via.

 
Tango_X:

Grazie! Ho sempre pensato che riferirsi alle classi fosse un puntatore a una classe. Ma qui è solo una dichiarazione... cosa c'entra?

Mi informerò, grazie!!!

 
Seric29:

In quale metatrader si creano i simboli su MT5?

Sì, su MT5

 
fxsaber:

Non si può.

È un peccato.

Lo faccio dopo aver caricato su excel, ma anche lì ha i suoi difetti. È un peccato che non ci sia questa funzione incorporata.

Ma ho la sensazione che possa essere in qualche modo implementato programmaticamente)

 
ISL:

Sì, su MT5.

È un peccato che MT4 non ti permetta di creare simboli, puoi cambiare i valori ma non puoi crearli.

 

insegnami come sbarazzarmi di ArraySetAsSeries() !!!

Qui ho riscritto una parte dell'indicatore conosciuto per MT4 (Perfect trend line), tutto funziona come in MT4, MA... Ma non posso sbarazzarmi di ArraySetAsSeries() che ho scritto forzatamente - altrimenti l'indicatore non calcola correttamente, so che ArraySetAsSeries() cambierà la direzione di indicizzazione nell'array, ma non ci sono riuscito per 2 giorni da solo!

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   1
//--- plot BufBars
#property indicator_label1  "BufBars"
#property indicator_type1   DRAW_COLOR_BARS
#property indicator_color1  clrRed,clrAqua,clrNONE
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//--- input parameters
input int SlowLength         = 7; //Slow length
input int SlowPipDisplace    = 0; //Slow pip displace
input int FastLength         = 3; //Fast length
input int FastPipDisplace    = 0; //Fast pip displace
//--- indicator buffers
double         BufBarsBuffer1[];
double         BufBarsBuffer2[];
double         BufBarsBuffer3[];
double         BufBarsBuffer4[];
double         BufBarsColors[];
double         BufLSELLBuffer[];
double         BufLBUYBuffer[];
static int trend=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufBarsBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,BufBarsBuffer2,INDICATOR_DATA);
   SetIndexBuffer(2,BufBarsBuffer3,INDICATOR_DATA);
   SetIndexBuffer(3,BufBarsBuffer4,INDICATOR_DATA);
   SetIndexBuffer(4,BufBarsColors,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(5,BufLSELLBuffer,INDICATOR_DATA);
   SetIndexBuffer(6,BufLBUYBuffer,INDICATOR_DATA);
   for(int i=0;i<7;i++)
     {
      PlotIndexSetInteger(i,PLOT_DRAW_BEGIN,FastLength+1);
      PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0.0);
     }
   ArraySetAsSeries(BufBarsBuffer1,true);
   ArraySetAsSeries(BufBarsBuffer2,true);
   ArraySetAsSeries(BufBarsBuffer3,true);
   ArraySetAsSeries(BufBarsBuffer4,true);
   ArraySetAsSeries(BufBarsColors,true);
   ArraySetAsSeries(BufLBUYBuffer,true);
   ArraySetAsSeries(BufLSELLBuffer,true);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   trend=0;
//---
   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[])
  {
//---
   int i,limit;
   double thigh1,tlow1,thigh2,tlow2,trendUp,trendDn;
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      BufLSELLBuffer[limit]=high[limit];
      BufLBUYBuffer[limit]=low[limit];
      limit--;
     }
   else limit=rates_total-prev_calculated+1;
   for(i=limit;i>=0;i--)
     {
      thigh1= high[iHighest(NULL,0,MODE_HIGH,SlowLength,i)]+SlowPipDisplace * _Point;
      tlow1 = low[iLowest(NULL,0,MODE_LOW,SlowLength,i)]-SlowPipDisplace * _Point;
      thigh2= high[iHighest(NULL,0,MODE_HIGH,FastLength,i)]+FastPipDisplace * _Point;
      tlow2 = low[iLowest(NULL,0,MODE_LOW,FastLength,i)]-FastPipDisplace * _Point;
      if(close[i]>BufLBUYBuffer[i+1])  trendUp=tlow1;  else trendUp=thigh1;
      if(close[i]>BufLSELLBuffer[i+1]) trendDn=tlow2;  else trendDn=thigh2;
      BufLSELLBuffer[i]= trendDn;
      BufLBUYBuffer[i] = trendUp;
      BufBarsBuffer1[i] = 0.0;
      BufBarsBuffer2[i] = 0.0;
      BufBarsBuffer3[i] = 0.0;
      BufBarsBuffer4[i] = 0.0;
      BufBarsColors[i]  = 2;
      if(close[i]<trendUp && close[i]<trendDn)
        {
         BufBarsBuffer1[i] = open[i];
         BufBarsBuffer2[i] = high[i];
         BufBarsBuffer3[i] = low[i];
         BufBarsBuffer4[i] = close[i];
         BufBarsColors[i]  = 0;
        }
      if(close[i]>trendUp && close[i]>trendDn)
        {
         BufBarsBuffer1[i] = open[i];
         BufBarsBuffer2[i] = high[i];
         BufBarsBuffer3[i] = low[i];
         BufBarsBuffer4[i] = close[i];
         BufBarsColors[i]  = 1;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

insegnami come sbarazzarmi di ArraySetAsSeries() !!!

Qui ho riscritto una parte dell'indicatore conosciuto per MT4 (Perfect trend line), tutto funziona come in MT4, MA... So che ArraySetAsSeries() cambierà la direzione dell'indicizzazione nell'array, ma per 2 giorni non ci sono riuscito!

Posso fare quanto segue

#ifdef __MQL5__
   ArraySetAsSeries(BufBarsBuffer1,true);
   ArraySetAsSeries(BufBarsBuffer2,true);
   ArraySetAsSeries(BufBarsBuffer3,true);
   ArraySetAsSeries(BufBarsBuffer4,true);
   ArraySetAsSeries(BufBarsColors,true);
   ArraySetAsSeries(BufLBUYBuffer,true);
   ArraySetAsSeries(BufLSELLBuffer,true);
#endif
 
Vitaly Muzichenko:

Posso farlo in questo modo

So che posso calcolare i valori dell'indicatore senzaArraySetAsSeries(), ma non vedo dove sbaglio. Ho provato a trovare un semplice esempio in kodobase, ma ahimè, tutti gli indicatori sono scritti in modi diversi, non riesco a capirlo (((

SZY: non ho bisogno dell'indicatore multipiattaforma, voglio gestire l'indicizzazione predefinita degli array, ho già usato ArrayGetAsSeries() - non lo capisco

 
Igor Makanu:

So che è possibile calcolare i valori dell'indicatore senzaArraySetAsSeries(), ma non vedo dove sbaglio. Ho provato a trovare un semplice esempio in kodobase, ahimè, tutti gli indicatori sono scritti in modi diversi, non riesco a capirlo (((

Il calcolo dell'indicatore va dall'inizio alla fine (dai dati storici più recenti al più recente - a quello attuale). E questo indica l'indicizzazione come nelle serie temporali. Quindi gli array dovrebbero essere indicizzati di conseguenza, che è quello che avete.

Cosa va storto allora?

 
Igor Makanu:

So che posso calcolare i valori dell'indicatore senzaArraySetAsSeries(), ma non vedo dove sbaglio. Ho provato a trovare un semplice esempio in kodobase ma, ahimè, tutti gli indicatori sono scritti in modi diversi, non riesco a capirlo (((

SZZ: non ho bisogno dell'indicatore multipiattaforma, voglio gestire l'indicizzazione predefinita degli array, ho già usato ArrayGetAsSeries() - non lo capisco

Potete farlo senza ArraySetAsSeries, basta usare Print o Comment per rendere chiaro che l'indice 0 dell'array, per esempio open[0], sarà stampato. Da qui potete prendere le vostre decisioni. Vi aiuterà a capire cosa è cosa.