Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй статью. Миллионы трейдеров ждут хороших идей!
Rushan
10
Rushan 2015.03.19 09:46 

Добрый день,

пожалуйста помогите написать индикатор, который на графике цены рисует уровень поддержки и сопротивления (инструмент трендовая линия) параллельно горизонтальной шкале времени. Уровень начинает строится от появляющегося экстремума от цены High или Low, сначала в виде луча слева направо. Луч должен превратиться в отрезок на той свече, на которой цена её закрытия будет выше (для сопротивления) или ниже (для поддержки).

Луч должен начинать строиться только в том случае если другой ближайший действительный уровень в виде луча находится на расстоянии более 100 пунктов 

poruchik
907
poruchik 2015.03.19 16:55  
Лучше 1 раз увидеть
Алексей Тарабанов
7220
Алексей Тарабанов 2015.03.19 19:47  

Может, так: 

// Копирование HLine в Line
int fHLine2Line(string OldName,string NewName="Прежний",string Text="Прежний",int Action=0){
   int Error, Type=ObjectType(OldName);
   bool Ray;
   datetime Time0;
   double Price0;
   if( Type!=OBJ_HLINE ){
      if( ПечататьПредупреждения ) Print("***   "+OldName+" недопустимый тип: "+Type);
      return(MyError);
   }
   if( NewName=="Прежний" ) NewName=OldName;
   if( NewName==OldName ) Action=2;                // Удалять оригинал
   if( ObjectFind(OldName)==0 ){                   // Копирование OldName в NewName
      double Price1=ObjectGet(OldName,OBJPROP_PRICE1);
      datetime Time1=ObjectGet(OldName,OBJPROP_TIME1);
      if( Time1==Time[LastBar-1] ){
         Time1 =0;
         Price1=0;
      }
      if( Price1<=Zero ){
         if( ПечататьПредупреждения ) Print("***   "+OldName+" не задана цена");
         return(MyError);
      }
      double Price2=ObjectGet(OldName,OBJPROP_PRICE2);
      datetime Time2=ObjectGet(OldName,OBJPROP_TIME2);
      if( Time2==Time[LastBar-1] ){
         Time2 =0;
         Price2=0;
      }
      double Price3=ObjectGet(OldName,OBJPROP_PRICE3);
      datetime Time3=ObjectGet(OldName,OBJPROP_TIME3);
      if( Time3==Time[LastBar-1] ){
         Time3 =0;
         Price3=0;
      }
      if( (MathAbs(Price1-Price2)>Zero && Price2>Zero )
       || (MathAbs(Price1-Price3)>Zero && Price3>Zero ) ){
         if( ПечататьПредупреждения ) Print("***   "+OldName+" цены в точках уровня не совпадают");
         return(MyError);
      }
      if( Price3>Zero ){
         Ray=false;                                // Задан отрезок 2(1)-3
         if( Price2>Zero ){                        // Отрезок 2-3
            Time0 =Time1;
            Price0=Price1;
            Time1 =Time2;                          // Начало отрезка
            Price1=Price2;
         }
         Time2=Time3;                              // Конец отрезка
         Price2=Price3;
         Time3=Time0;                              // Промежуточная точка
         Price3=Price0;
         if( РежимОтладки && ПечататьПредупреждения ) Print("*     "+OldName+" заданы цены отрезка: "
                                 +DoubleToStr(Price1,Digits)+" / "+TimeToStr(Time1)
                                 +" ... "+DoubleToStr(Price3,Digits)+" / "+TimeToStr(Time3)
                                 +" ... "+DoubleToStr(Price2,Digits)+" / "+TimeToStr(Time2));
      }
      else{
         if( Price2>Zero ){
            Ray=true;                              // Задан луч 2-1
            Time0 =Time1;
            Price0=Price1;
            Time1 =Time2;                          // Начало луча
            Price1=Price2;
            Time2 =Time0;                          // Промежуточная точка
            Price2=Price0;
            if( РежимОтладки && ПечататьПредупреждения ) Print("*     "+OldName+" заданы цены луча: "
                                    +DoubleToStr(Price1,Digits)+" / "+TimeToStr(Time1)
                                    +" ... "+DoubleToStr(Price2,Digits)+" / "+TimeToStr(Time2));
         }
         else{                                     // Задан уровень 1
            if( РежимОтладки && ПечататьПредупреждения ) Print("*     "+OldName+" задана только цена уровня: "
                                    +DoubleToStr(Price1,Digits)+" / "+TimeToStr(Time1));
            Error=fObjectCopy(OldName,NewName,Text,Action);
            return(Error);
      }  }
      bool  Фон      =ObjectGet(OldName,OBJPROP_BACK);
      color Цвет     =ObjectGet(OldName,OBJPROP_COLOR);
      int   Стиль    =ObjectGet(OldName,OBJPROP_STYLE);
      int   Видимость=ObjectGet(OldName,OBJPROP_TIMEFRAMES);
      int   Размер   =ObjectGet(OldName,OBJPROP_WIDTH);
      if( Text=="Прежний" ) Text=ObjectDescription(OldName);
      if( Action==1 ){                             // Спрятать оригинал
         if( !ObjectSet(OldName,OBJPROP_TIMEFRAMES,EMPTY) ){
            Error=GetLastError();
            if( !РежимОтладки ) PlaySound("alert.wav");
            Print("***** "+OldName+" - ошибка при задании невидимости "+Error);
      }  }
      if( Action==2 ) Error=fObjectDelete(OldName);// Удалить оригинал
      Error=fObjectDelete(NewName);                // Удалить копию
      if( ObjectCreate(NewName,OBJ_TREND,0,Time1,Price1,Time2,Price2,Time3,Price3) ) {
         if( !ObjectSetText(NewName,Text)
          || !ObjectSet(NewName,OBJPROP_RAY,Ray)
          || !ObjectSet(NewName,OBJPROP_BACK,Фон)
          || !ObjectSet(NewName,OBJPROP_COLOR,Цвет)
          || !ObjectSet(NewName,OBJPROP_STYLE,Стиль)
          || !ObjectSet(NewName,OBJPROP_TIMEFRAMES,Видимость)
          || !ObjectSet(NewName,OBJPROP_WIDTH,Размер) ){
            Error=GetLastError();
            if( !РежимОтладки ) PlaySound("alert.wav");
            Print("***** "+NewName+" - ошибка модификации параметров "+Error);
      }  }
      else{
         Error=GetLastError();
         if( !РежимОтладки ) PlaySound("alert.wav");
         Print("***** "+OldName+" - Копия "+NewName+" не создана, ошибка "+Error);
   }  }
   else{
      Error=MyError;
      if( ПечататьПредупреждения ) Print("***   "+OldName+" - Объект для копирования не найден!");
   }
   return(Error);
}
Rushan
10
Rushan 2015.03.20 18:00  
poruchik:
Лучше 1 раз увидеть

добрый день

Вижу вы мастер, а я не слишком продвинут в этом. Подскажите пожалуйста, мне ваш текст скопировать и создать новый индикатор? или как поступить?

Заранее благодарен

С уважением, Рушан 

Rushan
10
Rushan 2015.03.20 21:32  
tara:

Может, так: 

 

 

добрый день

Вижу вы мастер, а я не слишком продвинут в этом. Подскажите пожалуйста, мне ваш текст скопировать и создать новый индикатор? или как поступить?

Заранее благодарен

С уважением, Рушан 

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий