Помогите разобраться.

 

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

1 Вариант

//================================================================================================================

//================================================================================================================ if(ObjectFind("Dwline_1")!=0){   for(i=3; i<N_Bars; i++){    if(iFractals(NULL, 0, MODE_UPPER, i)!=0){                                          // перебор баров для поиска фракталов     up_Fract_i++;                                                                     // счетчик найденого фрактала //-------------------------------------------------------------------------------------------------------------------------       if(up_Fract_i==1){                                                                // если 1-вый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:      up_Fract_3n = i;                                                                 // запоминаем номер Max бара найденного фрактала.      up_Fract_3max = High[i];                                                         // запоминаем Max значение 1-го найденного фрактала.      up_tm_3f = iTime(NULL, 0, i);}                                                   // запоминаем время 3-го опорной точки. //--------------------------------------------------------------------------------------------------------------------------       if(up_Fract_i==2){                                                                // если 2-ой фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:      up_Fract_2max = High[i];                                                         // запоминаем Max значение 2-го найденного фрактала.      up_Fract_2n = i;                                                                 // запоминаем номер Max бара найденного фрактала.      up_tm_2f = iTime(NULL, 0, i);}                                                  // запоминаем время 2-ой опорной точки. //--------------------------------------------------------------------------------------------------------------------------       if(up_Fract_i==3){                                                                // если 3-ий фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:      up_Fract_1max = High[i];      up_Fract_1n = i;                                                                 // запоминаем номер Max бара найденного фрактала.      up_tm_1f = iTime(NULL, 0, i);                                                    // запоминаем время 3-ей опорной точки.                                                          // запоминаем Max значение 3-го найденного фрактала.      if(up_Fract_1max>up_Fract_2max && up_Fract_1max>up_Fract_3max){                  // если Max значение 3-го фрактала больше 1-го(т.е направление вниз)       k = (up_Fract_3max - up_Fract_1max) / (up_Fract_1n - up_Fract_3n);              // вычисляем коэфициент по линейному уравнению       cross = false;       for(q=up_Fract_3n+1; q<up_Fract_1n; q++){                                     // перебераем бары от первого до третьего фрактала        lineONbar = up_Fract_1max+k*(up_Fract_1n-q);                                   // значение трендовой линии на соответствующем баре        if(High[q]>=lineONbar){                                                        // проверяем положение баров относительно трендовой линии         cross = true; break;}}                                                        // пересечение баром трендовой линии       if(!cross){                                                                     // если пересечения нет        Dwline_1(up_tm_1f, up_Fract_1max, up_tm_3f, up_Fract_3max);}}} }}}             // рисуем трендовую линию Dwline_1        //------------------------------------------------- Цикл поиска фрактала UP Trend / Отрисовка трендовой линии -------------------------------------------------- if(ObjectFind("Upline_1")!=0){   for(i=3; i<N_Bars; i++){    if(iFractals(NULL, 0, MODE_LOWER, i)!=0){                                    // перебор баров для поиска фракталов     dw_Fract_i++;                                                               // счетчик найденого фрактала //-------------------------------------------------------------------------------------------------------------------------       if(dw_Fract_i==1){                                                          // если 1-вый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:      dw_Fract_3n = i;                                                           // запоминаем номер Max бара найденного фрактала.      dw_Fract_3min = Low[i];                                                    // запоминаем Max значение 1-го найденного фрактала.      dw_tm_3f = iTime(NULL, 0, i);}                                             // запоминаем время 1-ой опорной точки. //--------------------------------------------------------------------------------------------------------------------------       if(dw_Fract_i==2){                                                          // если 2-ой фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:      dw_Fract_2min = Low[i];                                                    // запоминаем Max значение 2-го найденного фрактала.      dw_Fract_2n = i;                                                          // запоминаем номер Max бара найденного фрактала.      dw_tm_2f = iTime(NULL, 0, i);}                                           // запоминаем время 2-ой опорной точки. //--------------------------------------------------------------------------------------------------------------------------       if(dw_Fract_i==3){                                                          // если 3-ий фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:      dw_Fract_1min = Low[i];                                                         // запоминаем Max значение 3-го найденного фрактала.      dw_Fract_1n = i;                                                         // запоминаем номер Max бара найденного фрактала.      dw_tm_1f = iTime(NULL, 0, i);                                            // запоминаем время 3-ей опорной точки.      if(dw_Fract_1min<dw_Fract_2min && dw_Fract_1min<dw_Fract_3min){                                           // если Max значение 3-го фрактала больше 1-го(т.е направление вниз)       k = (dw_Fract_3min - dw_Fract_1min) / (dw_Fract_1n - dw_Fract_3n);        // вычисляем коэфициент по линейному уравнению       cross = false;       for(q=dw_Fract_3n+1; q<dw_Fract_1n; q++){                                 // перебераем бары от первого до третьего фрактала        lineONbar = dw_Fract_1min+k*(dw_Fract_1n-q);                             // значение трендовой линии на соответствующем баре        if(Low[q]<=lineONbar){                                                   // проверяем положение баров относительно трендовой линии         cross = true; break;}}                                                  // пересечение баром трендовой линии       if(!cross){                                                               // если пересечения нет        Upline_1(dw_tm_1f, dw_Fract_1min, dw_tm_3f, dw_Fract_3min);}}} }}}      // рисуем трендовую линию Upline_1
2 Вариант
//=================================================================================================================
//=================================================================================================================
if(ObjectFind("Dwline_1")!=0 && ObjectFind("Upline_1")!=0){  // Если отсутствуют трендовые линии
  for(i=3; i<N_Bars; i++){
//------------------------------------------------------- Поиск верхних фракталов ----------------------------------------
   if(iFractals(NULL, 0, MODE_UPPER, i)!=0){                                          // перебор баров для поиска фракталов
   up_Fract_i++;                                                                     // счетчик найденого фрактала
//-------------------------------------------------------------------------------------------------------------------------  
    if(up_Fract_i==1){                                                                // если 1-вый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
     up_Fract_3n = i;                                                                 // запоминаем номер Max бара найденного фрактала.
     up_Fract_3max = High[i];                                                         // запоминаем Max значение 1-го найденного фрактала.
     up_tm_3f = iTime(NULL, 0, i);}                                                   // запоминаем время 3-го опорной точки.
//--------------------------------------------------------------------------------------------------------------------------   
    if(up_Fract_i==2){                                                                // если 2-ой фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
     up_Fract_2max = High[i];                                                         // запоминаем Max значение 2-го найденного фрактала.
     up_Fract_2n = i;                                                                 // запоминаем номер Max бара найденного фрактала.
     up_tm_2f = iTime(NULL, 0, i);}                                                  // запоминаем время 2-ой опорной точки.
//--------------------------------------------------------------------------------------------------------------------------   
    if(up_Fract_i==3){                                                                // если 3-ий фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
     up_Fract_1max = High[i]; 
     up_Fract_1n = i;                                                                 // запоминаем номер Max бара найденного фрактала.
     up_tm_1f = iTime(NULL, 0, i);                                                    // запоминаем время 3-ей опорной точки.                                                          // запоминаем Max значение 3-го найденного фрактала.
     if(up_Fract_1max>up_Fract_2max && up_Fract_1max>up_Fract_3max){                  // если Max значение 3-го фрактала больше 1-го(т.е направление вниз)
      k = (up_Fract_3max - up_Fract_1max) / (up_Fract_1n - up_Fract_3n);              // вычисляем коэфициент по линейному уравнению
      cross = false;
      for(q=up_Fract_3n+1; q<up_Fract_1n; q++){                                     // перебераем бары от первого до третьего фрактала
       lineONbar = up_Fract_1max+k*(up_Fract_1n-q);                                   // значение трендовой линии на соответствующем баре
       if(High[q]>=lineONbar){                                                        // проверяем положение баров относительно трендовой линии
        cross = true; break;}}                                                        // пересечение баром трендовой линии
      if(!cross){                                                                     // если пересечения нет
       Dwline_1(up_tm_1f, up_Fract_1max, up_tm_3f, up_Fract_3max);}}}}
//-----------------------------------------------------------Поиск нижних фракталов ---------------------------------------       
   if(iFractals(NULL, 0, MODE_LOWER, i)!=0){                                    // перебор баров для поиска фракталов
   dw_Fract_i++;                                                                // счетчик найденого фрактала
//-------------------------------------------------------------------------------------------------------------------------  
    if(dw_Fract_i==1){                                                          // если 1-вый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
     dw_Fract_3n = i;                                                           // запоминаем номер Max бара найденного фрактала.
     dw_Fract_3min = Low[i];                                                    // запоминаем Max значение 1-го найденного фрактала.
     dw_tm_3f = iTime(NULL, 0, i);}                                             // запоминаем время 1-ой опорной точки.
//--------------------------------------------------------------------------------------------------------------------------   
    if(dw_Fract_i==2){                                                          // если 2-ой фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
     dw_Fract_2min = Low[i];                                                    // запоминаем Max значение 2-го найденного фрактала.
     dw_Fract_2n = i;                                                           // запоминаем номер Max бара найденного фрактала.
     dw_tm_2f = iTime(NULL, 0, i);}                                             // запоминаем время 2-ой опорной точки.
//--------------------------------------------------------------------------------------------------------------------------   
    if(dw_Fract_i==3){                                                          // если 3-ий фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
     dw_Fract_1min = Low[i];                                                         // запоминаем Max значение 3-го найденного фрактала.
     dw_Fract_1n = i;                                                           // запоминаем номер Max бара найденного фрактала.
     dw_tm_1f = iTime(NULL, 0, i);                                              // запоминаем время 3-ей опорной точки.
     if(dw_Fract_1min<dw_Fract_2min && dw_Fract_1min<dw_Fract_3min){                                           // если Max значение 3-го фрактала больше 1-го(т.е направление вниз)
      k = (dw_Fract_3min - dw_Fract_1min) / (dw_Fract_1n - dw_Fract_3n);        // вычисляем коэфициент по линейному уравнению
      cross = false;
      for(q=dw_Fract_3n+1; q<dw_Fract_1n; q++){                                 // перебераем бары от первого до третьего фрактала
       lineONbar = dw_Fract_1min+k*(dw_Fract_1n-q);                             // значение трендовой линии на соответствующем баре
       if(Low[q]<=lineONbar){                                                   // проверяем положение баров относительно трендовой линии
        cross = true; break;}}                                                  // пересечение баром трендовой линии
      if(!cross){                                                               // если пересечения нет
       Upline_1(dw_tm_1f, dw_Fract_1min, dw_tm_3f, dw_Fract_3min);}}}} }}       // рисуем трендовую линию Upline_1  
//=========================================================================================================================================
//=========================================================================================================================================
 
Во втором варианте линия будет рисоваться ТОЛЬКО одна, так как на отрисовку линий заданы условия отсутствия обоих линий.
 
IgRU4ek:
Во втором варианте линия будет рисоваться ТОЛЬКО одна, так как на отрисовку линий заданы условия отсутствия обоих линий.
По идеи он при 2-ом варианте должен нарисовать либо восходящую линию либо нисходящую ?!
Причина обращения: