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

 
konam1:
Всем добрый день. Отслеживаю значения параболика при открытии каждой часовой свечи.
При прогонке по истории iSAR нулевого бара совпадает с точкой на графике, кроме момента когда параболик меняет положение сверху вниз и наоборот.
 if (newbarall!=(iTime(Symbol(),60,0)))
     {
      newbarall=iTime(Symbol(),60,0);  
    
     Print (iTime(Symbol(),60,0));
     Print ("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits));
    
    };
Отсюда следующие вопросы:
Почему параболик нулевого бара считается некорректно именно в эти моменты?
И, собственно, как этого избежать, ведь при открытии бара точка появляется и статична без пересчета в течение образования свечи.
Помогите пожалуйста). Спасибо!

Если понаблюдать за точкой параболика на нулевой свече, то она всё же не статична - меняет своё положение, и не только при смене положения верх-низ, но и вообще - иногда немного смещается на одном положении (без перехода вверх/вниз)

 

Здравствуйте. подскажите пожалуйста, почему не происходит удаление горизонтальных линий?

   if(SellInvertedHammer == true)
   {
      //if ((Open1 < Close1 && delta_minus < 0) || (Open1 >= Close1 && delta_plus > 0))
      {
         if(!ObjectCreate(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJ_ARROW_DOWN,0,TimeCurrent(),High[1] + 70*Point))
               {
               Print("Не удалось создать метку вниз");
               }
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_COLOR,clrRed);//--- установка цвета
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_WIDTH,1);//--- установка толщины линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
               InvertedHammerCandle ++;
         Print ("Перевернутый молот");
         Print ("Дельта+ = " + IntegerToString (delta_plus));
         Print ("Дельта- = " + IntegerToString (delta_minus));
         Print ("Объем = " + IntegerToString (volume));
         Print ("Кумулитивная дельта = " + IntegerToString (cum_delta));
         
         if(!ObjectCreate(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),UpLine_InvertedHammer))
         {
         Print("Не удалось создать верхнюю линию");
         }
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrBlueViolet);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         
         if(!ObjectCreate(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),DownLine_InvertedHammer))
         {
         Print("Не удалось создать нижнюю линию");
         }
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrSlateBlue);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         lineInvertedHammerCandle ++;
                         
      }

   }
   if(ma2 > UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 > UpLine_InvertedHammer && ma1 > DownLine_InvertedHammer)
               {
                  UpLine_InvertedHammer = 0;
                  DownLine_InvertedHammer = 0;
               }
      
   if (ma2 < UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 < UpLine_InvertedHammer && ma1 < DownLine_InvertedHammer)
         {
            
             if(!ObjectCreate(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJ_ARROW_SELL,0,TimeCurrent(),Low[1] + 50*Point))
                {
                Print("Не удалось создать метку вниз");
                }
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_COLOR,clrRed);//--- установка цвета
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_WIDTH,1);//--- установка толщины линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
                InvertedHammerCandleSell ++;
                Print("Точка входа SELL по разворотной свече 'Перевернутый молот'");
                UpLine_InvertedHammer = 0;
                DownLine_InvertedHammer = 0;
                
                int upline;
                int downline;
                upline = ObjectFind(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                downline = ObjectFind(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                if(upline > -1 && downline > -1)
                  {
                   ObjectDelete("UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   ObjectDelete("DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   Print("Линии удалены");
                  }
                  Print("Не удалось удалить верхнюю и нижнюю линии");
                
          }

Это часть всего кода. Если необходимо, то выложу весь код


Спасибо

 

- Добрый вечер коллеги!Хочу научиться писать советник мт4 или мт5.Нужен опытный ,чтобы сразу объяснил доходчиво все нюансы кода на практике и помог в написании кода.Мне не нужна помощь в написании некоего готового советника,его нет ,есть опыт торговли и идеи,чтобы всё проверить на тесте и понять,что и как использовать в условиях,мне нужно научиться писать разные условия.

 
Artyom Trishkin:

Если понаблюдать за точкой параболика на нулевой свече, то она всё же не статична - меняет своё положение, и не только при смене положения верх-низ, но и вообще - иногда немного смещается на одном положении (без перехода вверх/вниз)


Тем не менее по истории совпадения полные, кроме моментов "перехода". Меня даже устроит погрешность в 1-2 пункта. в момент "перехода" же она может составлять 20п и более.

Вопрос все тот же, как этого избежать. Спасибо

 
konam1:

Тем не менее по истории совпадения полные, кроме моментов "перехода". Меня даже устроит погрешность в 1-2 пункта. в момент "перехода" же она может составлять 20п и более.

Вопрос все тот же, как этого избежать. Спасибо

А что это вообще за конструкция такая?

if(newbarall!=(iTime(Symbol(),60,0)))
  {
   newbarall=iTime(Symbol(),60,0);  
   Print(iTime(Symbol(),60,0));
   Print("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits));
  };

Что даёт такая конструкция?

Почему время так распечатываете?

А почему распечатываете значение параболика именно так?

 
Artyom Trishkin:

А что это вообще за конструкция такая?

Что даёт такая конструкция?

Почему время так распечатываете?

А почему распечатываете значение параболика именно так?


-Конструкция такая дает выполнение условия при возникновении новой свечи часовой: Если время часовой свечи не совпадает со значением в переменной newbarall, то записываем в переменную новое время и вполняем условие.

-печатается время открытия часовой свечи

- значение параболика округляется то 4 знака после запятой, чтобы быть идентичнымс тем что отображается на графике.

 
konam1:

-Конструкция такая дает выполнение условия при возникновении новой свечи часовой: Если время часовой свечи не совпадает со значением в переменной newbarall, то записываем в переменную новое время и вполняем условие.

-печатается время открытия часовой свечи

- значение параболика округляется то 4 знака после запятой, чтобы быть идентичнымс тем что отображается на графике.

1. Нет, не даёт

2. Ну пусть будет так

3. Уверены, что той функцией выводите вещественное число на печать?

4. А зачем ; после закрывающей скобки?

 
Artyom Trishkin:

1. Нет, не даёт

2. Ну пусть будет так

3. Уверены, что той функцией выводите вещественное число на печать?

4. А зачем ; после закрывающей скобки?


1. тем не менее, алгоритм работает только на открытии свечи, в чем ошибка такой конструкции?

3. на печать выводятся числа 1.1820 например, так что уверен.

4. приведена часть кода.

 
konam1:

1. тем не менее, алгоритм работает только на открытии свечи, в чем ошибка такой конструкции?

3. на печать выводятся числа 1.1820 например, так что уверен.

4. приведена часть кода.

1. Ну может и не углядел - половина пятого утра...

3. DoubleToString()

4. Но у вас же условие и составной оператор:

if(condition) { }

Иного толкования и не вижу. Зачем там ";" после оператора?

 
konam1:
Отсюда следующие вопросы:
Почему параболик нулевого бара считается некорректно именно в эти моменты?
И, собственно, как этого избежать, ведь при открытии бара точка появляется и статична без пересчета в течение образования свечи.
Помогите пожалуйста). Спасибо!

Утверждение "точка появляется и статична без пересчета в течение образования свечи" не верно, если цена пробивает параболик, то точка перерисовывается.
Нужно пересчитывать параболик каждый тик, потому как пробитие может быть в любой момент, не только на открытии бара.

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