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

 

Здравствуйте, подскажите пожалуйста, в коде ниже без блока цикла (который после CopyByffer идет) индикатор штатно запускается, но если включать с циклом сравнивания цены свечи с ценой одной из полос, сами полосы после запуска перестают отображаться, в чем может быть проблема?

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  Olive
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_type3   DRAW_LINE
#property indicator_color3  Olive

input int peroid = 20;        // период полос 1
input int bands_shift= 0;           // смещение полос 1 
input double deviation = 2.3;   // отклонение полос 1

input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE; // тип цены 

double      Base[];     // массив для BASE_LINE индикатора iBands
double      Upper[];    // массив для UPPER_BAND индикатора iBands
double      Lower[];    // массив для LOWER_BAND индикатора iBands

int iBands1_handle; //Указатель на первый индикатор 
int iBands2_handle; //Указатель на первый индикатор 

int g_i_Window;


int OnInit()
  {
   g_i_Window=ChartWindowFind();
   SetIndexBuffer(0,Base,INDICATOR_DATA);
   SetIndexBuffer(1,Upper,INDICATOR_DATA);
   SetIndexBuffer(2,Lower,INDICATOR_DATA);
           
   iBands1_handle=iBands(NULL,PERIOD_CURRENT,peroid,bands_shift,deviation,applied_price);

   if(iBands1_handle==INVALID_HANDLE){
         Alert("Неудалось загрузить индикатор, повторите попытку");
         return(-1);
         }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[])         // Spread 
  {
   int i;
   int shift = 0;
   int shift1;
   int shift2;
   int shift3;
   string alert;
   
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;
      shift1 = shift;
      shift2 = shift + 1;
      shift3 = shift + 2;   
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];;
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
   
   i = (prev_calculated==0)?1: prev_calculated;
   i = (prev_calculated==rates_total)?rates_total-1: i;
   
   CopyBuffer(iBands1_handle,0,0,rates_total-1,Base);
   CopyBuffer(iBands1_handle,1,0,rates_total-1,Upper);
   CopyBuffer(iBands1_handle,2,0,rates_total-1,Lower);

   for (i = i; i < rates_total; i++)
   {
    if(H > L && O > Lower[i])
    {
     int time_waiting = (int)TimeLocal() + 1;
     while(TimeLocal() < time_waiting){}
     Comment("True");
     return(0);
    }
     else Comment("False"); 
   }
   
   
   if (prev_calculated==0) ChartRedraw();   
   return(rates_total);
  }

Результат:


 
Alexey Viktorov:

если можно подробнее опишите плиз

 
Andrii Djola:

если можно подробнее опишите плиз

На сколько подробней?

В одной ситуации мне надо было сделать цветные бары или цветные свечи. Они используют 4 буфера значений и 1 буфер цвета. Другой вариант, надо было отобразить цветной линией, где 1 буфер значений и 1 буфер цвета.

Вызов и изменение свойств индикатора вызывает инициализацию индикатора. Соответственно если в настройках бары или свечи, то один вариант инициализации. Если линия, то другой вариант инициализации.

В середине индикатора поменять количество буферов невозможно, о чём и сказал Алексей Вязмикин, не подозревая о других вариантах.

 
Alexey Viktorov:

На сколько подробней?

В одной ситуации мне надо было сделать цветные бары или цветные свечи. Они используют 4 буфера значений и 1 буфер цвета. Другой вариант, надо было отобразить цветной линией, где 1 буфер значений и 1 буфер цвета.

Вызов и изменение свойств индикатора вызывает инициализацию индикатора. Соответственно если в настройках бары или свечи, то один вариант инициализации. Если линия, то другой вариант инициализации.

В середине индикатора поменять количество буферов невозможно, о чём и сказал Алексей Вязмикин, не подозревая о других вариантах.

Если решили писать мою фамилию на русском языке, то она звучит так Вязьмикин.

Относительно моих подозрений - ответ считаю верным на поставленный вопрос. Без объяснения потребностей тут иного нет смысла говорить. Переинициализация - это перезапуск программы,  понятно, что в настройках можно поменять что угодно.

 
Aleksey Vyazmikin:

Если решили писать мою фамилию на русском языке, то она звучит так Вязьмикин.

Относительно моих подозрений - ответ считаю верным на поставленный вопрос. Без объяснения потребностей тут иного нет смысла говорить. Переинициализация - это перезапуск программы,  понятно, что в настройках можно поменять что угодно.

Отсутствие мягкого знака так сильно обижает?

Разве я говорил о неверности, на мой взгляд я подчеркнул именно правильность ответа.

 
alph:
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000$?
реально.
 
Alexey Viktorov:

Отсутствие мягкого знака так сильно обижает?

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

 
Aleksey Vyazmikin:

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

Мир, дружба, жвачка.

 
Alexey Viktorov:

Мир, дружба, жвачка.

А пол-литры?

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