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

 
Tretyakov Rostyslav #:

Я про полемику...

А если по теме: "Кто как хочет, так и ...пишет свой код", главное результат

Программист, возвращаясь к своему коду через несколько месяцев должен понимать его без затруднений.
Так же код должен читаться без затруднений другим программистом, но здесь нет командной разработки, поэтому достаточно научиться писать для себя.
 
Tretyakov Rostyslav #:

Я про полемику...

А если по теме: "Кто как хочет, так и ...пишет свой код", главное результат

"Кто ясно мыслит, тот ясно излагает". Хорошо читаемый код легче отлаживать.
 
Sergey Gridnev #:
Программист, возвращаясь к своему коду через несколько месяцев должен понимать его без затруднений.
Так же код должен читаться без затруднений другим программистом, но здесь нет командной разработки, поэтому достаточно научиться писать для себя.
Sergey Gridnev #:
"Кто ясно мыслит, тот ясно излагает". Хорошо читаемый код легче отлаживать.

Даже очень хороший врач можеть писать так, что кроме него никто не прочтет, но это не делает его хуже.

Рекомендую Вам открыть тему: "Правила этикета при написании кода."

 
Приятно читать код, который понимаешь со второго раза после осмысления комментов. И без разницы, свой чужой. Если код для себя, без разницы, что его не поймут другие, но помощи и суппорта по коду от других не надо ждать тогда.
 
Sergey Gridnev #:
Никто не обещал лёгких путей.
Но, ради исключеня, можно позволить функции с 4-мя параметрами.
Но при этом надо иметь в виду, что булевы параметры в функциях есть зло!

Хм... интересно почему?...

Я вот задался вопросом сейчас, подскажите, я ведь правильно понимаю, что отрицание НЕ(!) используется только в связке с РАВНО(=), то есть комбинация !=  ???

Таких комбинаций как !<  !> просто нет?  А операторы if, if-else, switch, while и for выполняют условие пока оно ИСТИННО, пока не станет ЛОЖНЫМ. А если мне надо наоборот???

Вот такая ситуация, у меня вложен цикл в цикле, и одна из целей чтоб создалась Вертикальная линия на баре, если бар пересечёт Горизонтальную линию. Вертикальная линия правильно создается если создание объекта после функции, то есть по окончанию цикла. А если мне в в цикле надо??? Попробовать через булевое значение, или не поможет?

for( IB=IndexBar-1; high[IB]<MaxHigh; IB--) 
          
     }
    ObjectCreate(StringFormat("Line %d ,Reset %f ",aa++,Reset[IndexBar]),OBJ_HLINE,0,0,MaxHigh);
    ObjectCreate(StringFormat("Vertical %d ,Bar %d ",bb++,IB),OBJ_VLINE,0,time[IB],0);
  

Вот чтобы так получалось.

ЗЫ. Честно сказать, может оно мне и не понадобится, только эта мысль из головы никак не вылезит:) Хотелось бы понимать какие варианты есть)))

 

to_ha #:

А если мне в в цикле надо??? 

А кто сказал что нельзя?

Пересечение снизу вверх

   for(i=limit;i>=0;i--)
     {
      double H_Line_Price=ObjectGetDouble(0,"H_Line",OBJPROP_PRICE);
      if(close[i+1]<=H_Line_Price&&close[i]>H_Line_Price)
         if(ObjectFind(0,"V_Line")!=0)
            ObjectCreate("V_Line",OBJ_VLINE,0,time[i],0);
     }
 
Tretyakov Rostyslav #:

А кто сказал что нельзя?

Хм... Интересно... В таком расположении отрисовки объектов действительно рисует как надо, то есть, если сначала отображать Горизонтальную линию, а потом Вертикальную...

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

Я не обратил на это внимание))) буду разбираться...

Tretyakov Rostyslav #:

А кто сказал что нельзя?

Пересечение снизу вверх

Спасибо, щяс буду разбираться;)
 
to_ha #:

Хм... Интересно... В таком расположении отрисовки объектов действительно рисует как надо, то есть, если сначала отображать Горизонтальную линию, а потом Вертикальную...

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

Я не обратил на это внимание))) буду разбираться...

Спасибо, щяс буду разбираться;)


   for(i=limit;i>=0;i--)
     {
      double H_Line_Price=ObjectGetDouble(0,"H_Line",OBJPROP_PRICE);
      if(close[i+1]<=H_Line_Price&&close[i]>H_Line_Price)
         if(ObjectFind(0,"V_Line")!=0&&ObjectFind(0,"H_Line")==0)
            ObjectCreate("V_Line",OBJ_VLINE,0,time[i],0);
     }
 
Tretyakov Rostyslav #:

Эта ерунда называется

Оказалось
if(ObjectFind(0, "V_Line") == -1)
а было
if(ObjectFind(0, "V_Line") !=0)
В любом случае Спасибо!
 
to_ha #:

Хм... интересно почему?...

Я вот задался вопросом сейчас, подскажите, я ведь правильно понимаю, что отрицание НЕ(!) используется только в связке с РАВНО(=), то есть комбинация !=  ???

Таких комбинаций как !<  !> просто нет?  А операторы if, if-else, switch, while и for выполняют условие пока оно ИСТИННО, пока не станет ЛОЖНЫМ. А если мне надо наоборот???

Вот такая ситуация, у меня вложен цикл в цикле, и одна из целей чтоб создалась Вертикальная линия на баре, если бар пересечёт Горизонтальную линию. Вертикальная линия правильно создается если создание объекта после функции, то есть по окончанию цикла. А если мне в в цикле надо??? Попробовать через булевое значение, или не поможет?

Вот чтобы так получалось.

ЗЫ. Честно сказать, может оно мне и не понадобится, только эта мысль из головы никак не вылезит:) Хотелось бы понимать какие варианты есть)))

Равнозначно >= и <=

if(a != 0) можно заменить на идиотское условие if(a > 0 || a < 0)

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