Индикаторный вопрос - страница 2

 
1 для True, или 0 для False, правильно?

Я подумаю об этом завтра и посмотрю, смогу ли я разобраться в этом.
 
Agent86:
1 для True, или 0 для False, правильно? <---- это правильно, НО

я подумаю об этом еще завтра, и посмотрю, смогу ли я разобраться в этом.


UK больше относится к вашим значениям MACD .
 
быстрее и медленнее - это doubles, а не bool ... проработайте цикл от начального значения и, возможно, 3 итерации, поэтому для значений Bars, Bars-1, Bars-2 ... каковы значения быстрее и медленнее?
 
//+------------------------------------------------------------------+
//|                                   
//+------------------------------------------------------------------+


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White

//---- buffers
double v1[];
double v2[];
double v3[];
double val1;
double val2;
double val3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers(3);

   SetIndexArrow(0, 111);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue);
   SetIndexBuffer(0, v1);
   SetIndexLabel(0,"Resistance");
   

   SetIndexArrow(1, 111);
   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red);
   SetIndexBuffer(1, v2);
   SetIndexLabel(1,"Support");
  
   
   SetIndexArrow(2, 111);
   SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White);
   SetIndexBuffer(2, v3);
   SetIndexLabel(2,"High A");
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   int i=Bars;
   
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL        
  
    for(i=Bars; i>=0; i--)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0)
         {                             
          v1[i]=High[i]; 
                         
          Print ("v1[", i, "]= ", v1[i], " if");
          Print ("i=",i, " faster=", faster);
          Print ("i=",i, " slower=",slower);
          }    
               
      else          
         {
         //v1[i]=v1[i+1];
         //Print ("v1[", i, "]= ", v1[i], " else");
         }
      
      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0)
         {
          v2[i]=Low[i];
          
          Print ("v2[", i, "]= ", v2[i], " if");
         }
          
      else          
         {
         //v2[i]=v2[i+1]; 
         //Print ("v2[", i, "]= ", v2[i], " else");         
         }
      }

   
     
//----
   return(0);
  }
//+------------------------------------------------------------------+




2011.09.28 16:43:30 sup_res EURUSD,M5: i=411 faster=-0.0005

2011.09.28 16:43:30 sup_res EURUSD,M5: v1[411]= 1.3522 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[414]= 1.3495 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 быстрее=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[414]= 1.3527 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 быстрее=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[417]= 1.3528 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[419]= 1.3506 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 быстрее=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[420]= 1.3523 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 faster=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[426]= 1.3522 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[429]= 1.3481 if


Выводит это при запуске индикатора

Но тот же самый код для советника не выводит массив

2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=227 faster=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v1[227]= 0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v2[230]= 0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 slower=-0.0013
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 быстрее=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v1[232]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=825 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[825]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 slower=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[829]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 slower=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[832]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=240 faster=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[240]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[241]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[245]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 slower=-0.0003
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 faster=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[245]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[249]= 0 if


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

Значения кажутся различными от 4-значных дробных чисел до отрицательных 4-значных дробных чисел.

Если я изменю сдвиг iMACD на i, то быстрее и медленнее = 0 все время.

 
Agent86:

Я пробовал вставлять if(faster > slower) в различные области кода, просто чтобы поиграть с идеей. Обычно эти идеи работают в советнике, но не в индикаторе.

IE if(v1 > 0 && faster > slower)

но это приводит к исчезновению индикатора.

Попробуйте это изменение
//   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
//            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL        
  
    for(i=Bars-1; i>=0; i--)
     {
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL        
 
Agent86:


Я не знаю, почему он прибегает к тому, чтобы не печатать массив снова, потому что это тот же самый точный код, что и в индикаторе.


Вы не можете использовать буферы индикаторов в советнике... это объясняет это : https://www.mql5.com/en/articles/1456

быстрее и медленнее - это одни и те же значения на протяжении всего цикла и меняющиеся значения i, это то, что вы хотите и что вам нужно?

 
RaptorUK:

Вы не можете использовать буферы индикаторов в советнике... это объясняет это : https://www.mql5.com/en/articles/1456

быстрее и медленнее - это одни и те же значения на протяжении всего цикла и меняющиеся значения i, это то, что вы хотите и что вам нужно?


Хорошо, спасибо за ссылку. Я забыл об этом. Это много информации для меня, чтобы вспомнить. Нубство мешает LOL.

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

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

Дизайн - это большая проблема для меня, потому что я не опытен, поэтому я не видел многих тактик или теорий, используемых в общем коде. Поэтому пока я могу только учиться, читая коды других людей, чтобы увидеть, как они работают, и попытаться понять, что они сделали, и извлечь из этого уроки.

В любом случае, я буду продолжать работать над этим, спасибо.
 
WHRoeder:
Попробуйте сделать следующее изменение
Хммм интересно

Поэтому переменная должна быть объявлена и внутри цикла.


Хорошо, теперь с этим будет интересно поиграть, спасибо всем.

 

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

 double     faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
           slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL        
  
    for(i=Bars-1; i>=0; i--)
     {
            faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL 
 
diostar:
Я предпочитаю инстанцировать только один раз, все циклические vrbs, сначала вне цикла. Если вы объявляете их внутри цикла, на каждой итерации компилятор создает новую переменную. Даже если они выглядят одинаково, на самом деле это не так.
Как именно вы пришли к такому выводу и в чем функциональная разница?
Причина обращения: