Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 918

 
Tango_X:

Спасибо! я всегда думал что обращение к классам происходит через указатель на класс. А здесь просто обьявление.. с чем это связано?

Это самые основы ООП, посмотрите немного Справку. Например, операторы new/delete и далее.

 
Tango_X:

Спасибо! я всегда думал что обращение к классам происходит через указатель на класс. А здесь просто обьявление.. с чем это связано?

буду разбираться , спасибо!!

 
Seric29:

В каком метатрейдере вы создаёте символы на МТ5?

Да, на МТ5

 
fxsaber:

Нельзя.

Печалька.

Делаю это  после выгрузки в excel, но там тоже свои недочёты. Очень жаль, что нет такой встроенной возможности.

Но есть предчувствие, что это как-то программно можно реализовать)

 
ISL:

Да, на МТ5

Жаль что в МТ4 нельзя создавать символы менять значения можно а создавать нельзя.

 

научите как избавиться от ArraySetAsSeries() !!!

вот переписал часть известного индикатора под МТ4 (Perfect trend line), все работает как и в МТ4, НО... но не могу избавиться от принудительно написанных мной ArraySetAsSeries() - иначе не правильно считает индикатор, знаю, что ArraySetAsSeries() изменит направление индексации в массиве, но за 2 дня никак сам и не победил!

#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:

научите как избавиться от ArraySetAsSeries() !!!

вот переписал часть известного индикатора под МТ4 (Perfect trend line), все работает как и в МТ4, НО... но не могу избавиться от принудительно написанных мной ArraySetAsSeries() - иначе не правильно считает индикатор, знаю, что ArraySetAsSeries() изменит направление индексации в массиве, но за 2 дня никак сам и не победил!

Можно так

#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:

Можно так

спасибо дружище! но тут дело в понимании, а не в сокращении общего "веса" текста исходника, я знаю, что можно рассчитать значения индикатора и без ArraySetAsSeries(), но почему то не вижу, что не правильно делаю, в кодобазе пытался найти простой пример, увы, там все индикаторы настолько по разному написаны, что не разберусь (((

ЗЫ: мне не нужно межплатформенный индикатор, хочу разобраться с индексациями массивов по умолчанию, принтовал уже массивы через ArrayGetAsSeries() - не разобрался 

 
Igor Makanu:

спасибо дружище! но тут дело в понимании а не в сокращении общего "веса" текста исходника, я знаю, что можно рассчитать значения индикатора и без ArraySetAsSeries(), но почему то не вижу, что не правильно делаю, в кодобазе пытался найти простой пример, увы, там все индикаторы настолько по разному написаны, что не разберусь (((

У вас расчёт индикатора идёт от начала к концу (от самых поздних исторических данных к самым свежим - к текущим). А это говорит об индексации как в таймсерии. Значит и массивы должны быть соответственно индексированы, что у вас и есть.

Что не так работает тогда?

 
Igor Makanu:

спасибо дружище! но тут дело в понимании а не в сокращении общего "веса" текста исходника, я знаю, что можно рассчитать значения индикатора и без ArraySetAsSeries(), но почему то не вижу, что не правильно делаю, в кодобазе пытался найти простой пример, увы, там все индикаторы настолько по разному написаны, что не разберусь (((

ЗЫ: мне не нужно межплатформенный индикатор, ззочу разобраться с индексациями массивов по умолчанию, принтовал уже массивы через ArrayGetAsSeries() - не разобрался 

Можете и без ArraySetAsSeries просто посмотрите для наглядности с помощью Print или Comment что выводит 0 индекс массива например open[0]. И от сюда пляшите. Это чтоб самому понять что к чему.

Причина обращения: