Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2610

 
Предположим, у нас есть индикатор с именем "IndName_1.1". Могу ли я в коде этого индикатора вызывать iCustom(Symbol(),TimeFrame,"IndName_1.1",список параметров,номер буффера)? То есть, могу ли я в коде индикатора вызывать этот же индикатор рекурсивно? Это МТ4.
 
Vitaly Murlenko #:
Предположим, у нас есть индикатор с именем "IndName_1.1". Могу ли я в коде этого индикатора вызывать iCustom(Symbol(),TimeFrame,"IndName_1.1",список параметров,номер буффера)? То есть, могу ли я в коде индикатора вызывать этот же индикатор рекурсивно? Это МТ4.

Да

Пример RSI MTF

input int               Input1      = 8;
input ENUM_TIMEFRAMES   TimeFrame   = PERIOD_CURRENT;
string shot_name=WindowExpertName();
//+------------------------------------------------------------------+
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<=max) return(0);
   int limit,i;
   limit=fmin(rates_total-prev_calculated-1,rates_total-1);
   if(limit<1)return(0);
   if(_Period>=timeframe)
     {
      for(i=limit;i>=0;i--)
        {
         Label00[i]=iRSI(_Symbol,_Period,Input1,PRICE_CLOSE,i);
        }
     }
   else
     {
      for(i=limit;i>=0;i--)
        {
         index=iBarShift(_Symbol,timeframe,time[i],false);
         Label00[i]=iCustom(_Symbol,timeframe,shot_name,Input1,timeframe,0,index);
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Tretyakov Rostyslav #:
Да

Спасибо. 
Вопрос действительно был тупой, можно было просто проверить... :)

 

Tretyakov Rostyslav #:

Да

Пример RSI MTF

Спасибо, но мне не подошло. Я проверил - мой индикатор подвесил терминал напрочь. По-ходу, получилась бесконечная рекурсия.

 
Vitaly Murlenko #:

Спасибо, но мне не подошло. Я проверил - мой индикатор подвесил терминал напрочь. По-ходу, получилась бесконечная рекурсия.

Ну если не задать условия - то будет бесконечно

 
Vitaly Murlenko #:

Спасибо, но мне не подошло. Я проверил - мой индикатор подвесил терминал напрочь. По-ходу, получилась бесконечная рекурсия.

Нужны отдельные циклы.

//---
   for(i=limit;i>=0;i--)
     {
      Label00[i]=iRSI(_Symbol,_Period,Input1,PRICE_CLOSE,i);
     }
   for(i=limit;i>=0;i--)
     {
      Label01[i]=iCustom(_Symbol,_Period,shot_name,Input1*2,0,i);
     }


 
Tretyakov Rostyslav #:

Там нет проверки наличия объекта, т.е. каждый раз пытается создать.

В моем варианте если объект уже есть, то вносятся значение текущих данных

Может по незнанию, но никогда не заморачивался такого рода проблемой.
На что это влияет? Или это важно только для MQL5?

 
Nikolay Skrigan #:

Может по незнанию, но никогда не заморачивался такого рода проблемой.
На что это влияет? Или это важно только для MQL5?

На счет MQL5 не знаю, но в 4 забивает лог ошибкой до огромных размеров


 
Nikolay Skrigan #:
На что это влияет? Или это важно только для MQL5?
Как я писал выше, в Вашем случае лучше объекты создать при инициализации, а в работе только менять значения.
 
Tretyakov Rostyslav #:

На счет MQL5 не знаю, но в 4 забивает лог ошибкой до огромных размеров


Хз. Сейчас посмотрел логи на МТ4. У меня там открыто 10 графиков, каждый обвешан кучей меток, обновляемых каждую минуту без проверки.
Логи чистые, сообщений об ошибках нет. Может я не там смотрю?


Типовой код метки без каких-либо проверок. Я даже не подозревал, что они могут понадобиться...

void Labels()
  {
   ObjectCreate("Trend", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Trend", OBJPROP_CORNER, 1);
   ObjectSet("Trend", OBJPROP_XDISTANCE, 5);
   ObjectSet("Trend", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Trend", "Trade:" + TradeDirection + "|Trend:" + TrendDirection + "|RTT:" + ReadyToTrade + "",
                 SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);