Перейти к содержанию

Доработка индикаторов: общая тема


Рекомендуемые сообщения

Доработка индикаторов: общая тема Опубликовано

Всем добрый день. Срочно нужна ваша помощь. Помогите прикрутить алерт в сплывающем окне к индикатарам

BrainTrend2Sig.ex4 BrainTrend2Sig.mq4 LabTrend1_v4.ex4 LabTrend1_v4.mq4

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 1,7k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

прикрутилround_LevelsWhite_alert_1.mq4

Перейти

StepMA_Stoch alert.mq4

Перейти

1. Push-уведомления добавлены. Включается/выключаются в настройках NotificationAlerts 2. Текущий TF добавлен как в алерты, так и в PUSH-уведомления. 3. Ошибки исправлены.   Проверя

Перейти
Доработка индикаторов: общая тема Опубликовано
В 14.02.2020 в 22:36, Rever27 сказал:

попробуй такой вариант: строки 114-122

Color Levels z.mq4 52 \u043a\u0411 · 0 загрузок

Спасибо!
Не совсем коректно задал вопрос, мне нужна была центровка только по Х (но может еще передумаю :))).
Исправил в такой вариант :
image.thumb.png.73e379a09f2e417a3a2792dfe19a7fc4.png

Прикреплю исправленный исходник, может кому-то понадобиться.

Color Levels c.mq4

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

Всем привет. Нужна помощь. Есть индикатор
 Я его чуток подредактировал

      ExtMapBuffer1[i]=iRSI(NULL,TimeFrame,RSIperiod,applied_price,y);

      if (ExtMapBuffer1[i] > LevUpRSI)
       {
       UpRSI[i]=ExtMapBuffer1[i];
       DnRSI[i]=EMPTY_VALUE;
       }
      else 
      if (ExtMapBuffer1[i] < LevDnRSI)
       {
       DnRSI[i]=ExtMapBuffer1[i];
       UpRSI[i]=EMPTY_VALUE;
       }

и получилось это

M30__1.png

Хочу добавить стрелки на график, пробовал это

      ExtMapBuffer1[i]=iRSI(NULL,TimeFrame,RSIperiod,applied_price,y);

      if (ExtMapBuffer1[i] > LevUpRSI)
       {
       UpRSI[i]=ExtMapBuffer1[i];
       DnRSI[i]=EMPTY_VALUE;
       ObjectCreate(0,"ArUpRSI",OBJ_ARROW,0,Time[i],High[i]+100*Point);
       ObjectSet("ArUpRSI",OBJPROP_ARROWCODE,218);
       ObjectSet("ArUpRSI",OBJPROP_COLOR,clrCrimson);
       }
      else 
      if (ExtMapBuffer1[i] < LevDnRSI)
       {
       DnRSI[i]=ExtMapBuffer1[i];
       UpRSI[i]=EMPTY_VALUE;
       ObjectCreate(0,"ArDnRSI",OBJ_ARROW,0,Time[i],Low[i]);
       ObjectSet("ArDnRSI",OBJPROP_ARROWCODE,217);
       ObjectSet("ArDnRSI",OBJPROP_COLOR,clrTeal);
       }

 

но не рисует все стрелки(

Кто знает, подскажите, пожалуйста, что не так.

Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@MakarFX Дай код свое ЧУДА. Где нужно прорисовать чудо, на графике ли в под окне?

Изменено пользователем MikR0ReR
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@MikR0ReR Вот код

Спойлер

//+------------------------------------------------------------------+
//|                                                     MTF_RSI.mq4 |
//|                                      Copyright © 2006, Keris2112 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Keris2112"
#property link      "http://www.forex-tsd.com"
//----
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_level1 30
#property indicator_level2 70
#property indicator_minimum 0
#property indicator_maximum 100
//----
extern int TimeFrame=0;
extern int RSIperiod=14;
extern int applied_price=0;
//----
double ExtMapBuffer1[];
double UpRSI[];
double DnRSI[];
int    LevUpRSI = 70;
int    LevDnRSI = 30;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_LINE);
   
   SetIndexStyle(1,DRAW_ARROW,0,2,clrTeal);
   SetIndexLabel(1,"DnRSI");
   SetIndexBuffer(1,DnRSI);
   SetIndexArrow(1,159);

   SetIndexStyle(2,DRAW_ARROW,0,2,clrCrimson);
   SetIndexLabel(2,"UpRSI");
   SetIndexBuffer(2,UpRSI);
   SetIndexArrow(2,159);
//---- name for DataWindow and indicator subwindow label   
   switch(TimeFrame)
     {
      case 1 : string TimeFrameStr="Period_M1"; break;
      case 5 : TimeFrameStr="Period_M5"; break;
      case 15 : TimeFrameStr="Period_M15"; break;
      case 30 : TimeFrameStr="Period_M30"; break;
      case 60 : TimeFrameStr="Period_H1"; break;
      case 240 : TimeFrameStr="Period_H4"; break;
      case 1440 : TimeFrameStr="Period_D1"; break;
      case 10080 : TimeFrameStr="Period_W1"; break;
      case 43200 : TimeFrameStr="Period_MN1"; break;
      default : TimeFrameStr="Current Timeframe";
     }
   IndicatorShortName("MTF_RSI("+(string)RSIperiod+") ("+TimeFrameStr+")");
  return(0);
  }
//----
   
//+------------------------------------------------------------------+
//| MTF RSI                                                          |
//+------------------------------------------------------------------+
int start()
  {
   datetime TimeArray[];
   int    i,limit,y=0,counted_bars=IndicatorCounted();
   // Plot defined time frame on to current time frame
   ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
   limit=Bars-counted_bars;
   for(i=0,y=0;i<limit;i++)
     {
      if (Time[i]<TimeArray[y]) y++;
//----
      ExtMapBuffer1[i]=iRSI(NULL,TimeFrame,RSIperiod,applied_price,y);

      if (ExtMapBuffer1[i] > LevUpRSI)
       {
       UpRSI[i]=ExtMapBuffer1[i];
       DnRSI[i]=EMPTY_VALUE;
       ObjectCreate(0,"ArUpRSI",OBJ_ARROW,0,Time[i],High[i]+100*Point);
       ObjectSet("ArUpRSI",OBJPROP_ARROWCODE,218);
       ObjectSet("ArUpRSI",OBJPROP_COLOR,clrCrimson);
       }
      else 
      if (ExtMapBuffer1[i] < LevDnRSI)
       {
       DnRSI[i]=ExtMapBuffer1[i];
       UpRSI[i]=EMPTY_VALUE;
       ObjectCreate(0,"ArDnRSI",OBJ_ARROW,0,Time[i],Low[i]);
       ObjectSet("ArDnRSI",OBJPROP_ARROWCODE,217);
       ObjectSet("ArDnRSI",OBJPROP_COLOR,clrTeal);
       }
     }
   //----
   return(0);
  }
//----------------------------+
void deinit() {
   ObjectDelete("ArDnRSI");
   ObjectDelete("ArUpRSI");
   return;
   }   
//+------------------------------------------------------------------+

 

Стрелки нужны на графике.

Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@MakarFX Блок "Код" предназначен для вставки части кода, а не всего индикатора.

       ObjectCreate(0,"ArUpRSI",OBJ_ARROW,0,Time[i],High[i]+100*Point);
       ObjectSet("ArUpRSI",OBJPROP_ARROWCODE,218);
       ObjectSet("ArUpRSI",OBJPROP_COLOR,clrCrimson);

При работе с объектами их имена должны быть уникальными. У тебя же только два имени, поэтому отображаются только две последние стрелки.

Чтоб создать "Чудик имя" поступим так

Вот это имя будет уникальное всегда.

ObjectCreate(0,"ArDnRSI"+Time[i],OBJ_ARROW,0,Time[i],Low[i]-100*Point);

Вот это не будет работать после первого прохода (просчета) после запуска индикатора, поэтому не уникальное имя.

ObjectCreate(0,"ArDnRSI"+i,OBJ_ARROW,0,Time[i],Low[i]-100*Point);

Да, в ObjectSet() не забудь обратится к вновь испеченному имени.

:) Чуди дальше.

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@MakarFX Значит с этим справился, ObjectCreate() ObjectSet()

       ObjectCreate(0,"ArUpRSI"+Time[i],OBJ_ARROW,0,Time[i],High[i]+100*Point);
       ObjectSet("ArUpRSI",OBJPROP_ARROWCODE,218);
       ObjectSet("ArUpRSI",OBJPROP_COLOR,clrCrimson);

а с тем нет?

 

Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@MikR0ReR

Предыдущие функции хорошо описаны в справочнике( с примерами), а эти StringFind(), ObjectName(), ObjectsTotal() обстрактно(для меня).

Вопрос решил так

void deinit() {
ObjectsDeleteAll(0,0,OBJ_ARROW);
return; 
}   

Возможно не по правилам, но работает)

Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@MakarFX Все по правилам! Я думаю не будет для тебя секретом, что удалятся и другие обьектя от других индикаторов.

 

Смысл таков

  • получаем общее количество обьектов        ObjectsTotal()
  • в цикле получаем имя обьекта                     ObjectName()
  • сравниваем полученное имя с искомым     StringFind(),      искомое имя ArDnRSI и ArUpRSI т.е мы проверяем присутствие ArDnRSI и ArUpRSI в тех полученных именах
  • присутствие есть, значит удаляем
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@MikR0ReR

Вот в справочнике написано

int  ObjectsDeleteAll( 
   long           chart_id,   // идентификатор графика 
   const string     prefix,   // префикс имени объекта 
   int    sub_window=EMPTY,   // индекс окна 
   int    object_type=EMPTY   // тип объекта для удаления 
   );

но когда я делаю так(указываю префикс)

ObjectsDeleteAll(0,"Ar",0,OBJ_ARROW);

Другие объекты тоже удаляются(

Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@MakarFX в моем случае я искал OBJ_HLINE и название линий у меня хранилось в LineName

    int nL = ObjectsTotal();
    string name;
    for(int n = nL-1; n >=0; n--)
    {
        name = ObjectName(n);
        if(ObjectType(name)!=OBJ_HLINE)
            continue;
        int nch = StringFind(name, LineName);
        if(nch == 0)
            ObjectDelete(name);   
    }

 

Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

Добрый день! Перешел на мт5 но есть проблема мой грааааль)) для мт4! Помогите конвертировать на мт5 люди добрые не оставляйте сироту в беде( Заранее премного благодарен!

Flexi_bars_swing_v2_Alert(trueforex.pp.ua).mq4

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@agimat81 Данная ветка предназначена для доработки, помощи,а не для написания с нуля. Попробуй перевести сам код, где не получится, помогу. Учись! Я посмотрел код, там всего лишь 10% нужно подправить под MQL5.

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

Уважаемые гуру! Можно прикрутить алерты на уровни 6 и 9 к данному индикатору? Сама система ручной торговли в архиве. Там же и мануал. 

88_filter.mq4 ТС Static Pips.zip

Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

Добрый день. Помогите доработать индикатор. Он отображает на графике зоны одинаковые на все дни недели. Нужно чтобы была возможность задать зоны на каждый день недели отдельно. 

Спойлер

//+------------------------------------------------------------------+
//|                                            2 ЗОНЫ.mq4            |
//|                                                                  |
//|                                                                  |
//|                                                                  |
//|  2017                                                            |
//+------------------------------------------------------------------+

#property indicator_chart_window

//--- day of week 
enum dayOfWeek  
  { 
   S=0,     // Sunday 
   M=1,     // Monday 
   T=2,     // Tuesday 
   W=3,     // Wednesday 
   Th=4,    // Thursday 
   Fr=5,    // Friday, 
   St=6,    // Saturday 
  }; 
//--- input parameters 
input dayOfWeek swapday=W;

//------- Внешние параметры индикатора ------------------------------- 
extern int    NumberOfDays = 10;        // Количество дней              
extern string Begin_1      = "09:00";
extern string End_1        = "15:00";
extern color  Color_1      = PowderBlue;
extern string Begin_2      = "03:00";
extern string End_2        = "07:00";
extern color  Color_2      = Yellow;
extern bool   HighRange    = true;        


//+------------------------------------------------------------------+
//| Custom indicator initialization function 
//    Функция инициализации пользовательского индикатора             |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("PWT1"+i, Color_1);
    CreateObjects("PWT2"+i, Color_2);
  }
  Comment("");
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
  Comment("");
}

//+------------------------------------------------------------------+
//| Создание объектов индикатора                                     |
//| Параметры:                                                       |
//|   no - наименование объекта                                      |
//|   cl - цвет объекта                                              |
//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
  ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
  ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
  ObjectSet(no, OBJPROP_COLOR, cl);
  ObjectSet(no, OBJPROP_BACK, True);
}

//+------------------------------------------------------------------+
//| Удаление объектов индикатора                                     |
//+------------------------------------------------------------------+
void DeleteObjects() {
  for (int i=0; i<NumberOfDays; i++) {
    ObjectDelete("PWT1"+i);
    ObjectDelete("PWT2"+i);
  }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//|    Итерации функции пользовательского индикатора                 |
//+------------------------------------------------------------------+
void start() {
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

//+------------------------------------------------------------------+
//| Прорисовка объектов на графике                                   |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//|   no - наименование объекта                                      |
//|   tb - время начала сессии                                       |
//|   te - время окончания сессии                                    |
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
  datetime t1, t2, t3;
  double   p1, p2, p3;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  t3=StrToTime(TimeToStr(dt, TIME_DATE)+" ""23:00");
  b1=iBarShift(NULL, 0, t1);                            //Поиск бара по времени
  b2=iBarShift(NULL, 0, t2);
  p1=High[iHighest(NULL, PERIOD_M5, MODE_HIGH, b1-b2, b2)];  // вставлено PERIOD_M5 вместо 0
  p2=Low [iLowest (NULL, PERIOD_M5, MODE_LOW , b1-b2, b2)]; // вставлено PERIOD_M5 вместо 0
  p3=p2;
  if (!HighRange) {p1=0; p2=2*p2;}
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
  ObjectSet(no, OBJPROP_TIME2 , t3);
  ObjectSet(no, OBJPROP_PRICE2, p3);
}

//+------------------------------------------------------------------+
//| Уменьшение даты на один торговый день                            |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
  int ty=TimeYear(dt);
  int tm=TimeMonth(dt);
  int td=TimeDay(dt);
  int th=TimeHour(dt);
  int ti=TimeMinute(dt);

  td--;
  if (td==0) {
    tm--;
    if (tm==0) {
      ty--;
      tm=12;
    }
    if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
    if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
    if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
  }
  return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

 

 

2 ЗОНЫ.ex4 2 ЗОНЫ.mq4

Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

Я бы с радостью исправил но вот беда в mql5 я дуб)

Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@agimat81  Если есть понимание 4 то и 5 значит понимаешь. Эти языки, вот, ничем не отличаются.

Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

Здравствуйте.

 

Пишу советник с использованием индикатора TMA+CG mladen. Нужно получить значения границ канала и средний линии.

 

Вроде все логично, средняя линия = буфер 0, верхняя = буфер 1, нижняя =  буфер 2 (скрин кода http://prntscr.com/r9sxd4)

В советнике значения индикатора получаю на открытии бара. Гоняю в тестере для проверки. Получаю разные данные (то, что вижу на графике и то, что вижу в данных индикатора).

Например, верхняя граница http://prntscr.com/r9szk4

Нижняя граница http://prntscr.com/r9szrv

Средняя линия http://prntscr.com/r9t00l

 

Настройки индикатора http://prntscr.com/r9t05s

В тестере котировки тестируемой валюты m15 и h4 загружены

 

Как получить значения линий? Или что-то не учел?

 

Код самого индикатора прикладываю

TMA+CG mladen.mq4

Изменено пользователем UncleSam
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано

@alexavb Просмотрел индикатор 88, там есть алерт. Чем штатный не устраивает? По умолчанию он и настроен правильно, сигнал = 6.

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка индикаторов: общая тема Опубликовано
9 минут назад, MikR0ReR сказал:

@alexavb Просмотрел индикатор 88, там есть алерт. Чем штатный не устраивает? По умолчанию он и настроен правильно, сигнал = 6.

Действительно есть. Видимо попутал со вторым индикатором. Вопрос в таком случае снят. Спасибо.

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...