#1351

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

BrainTrend2Sig.ex411 скач. BrainTrend2Sig.mq414 скач. LabTrend1_v4.ex411 скач. LabTrend1_v4.mq416 скач.

#1352
В 14.02.2020 в 22:36, Rever27 сказал:

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

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

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

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

Color Levels c.mq412 скач.

#1353

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

      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);
       }

 

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

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

#1354

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

Изменено 23 февраля, 2020 пользователем MikR0ReR

#1355

@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;
   }   
//+------------------------------------------------------------------+

 

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

Изменено 23 февраля, 2020 пользователем 0ll

#1356

@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() не забудь обратится к вновь испеченному имени.

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

#1357

@MikR0ReR Спасибо. Я понял ошибку.

А как теперь задать правильно удаление объектов?

 

#1358

@MakarFX StringFind(), ObjectName(), ObjectsTotal(), ArUpRSI

как минимум так.

#1359

@MikR0ReR Спасибо, но то, что Вы написали для меня "китайская грамота".

Спасибо за помощь.

#1360

@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);

а с тем нет?

 

#1361

@MikR0ReR

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

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

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

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

#1362

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

 

Смысл таков

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

@MikR0ReR

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

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

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

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

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

#1364

@MakarFX Значит у них имя начинается тоже на AR

#1365

@MikR0ReR Да, спасибо!!! Поменял имя и все работает. Еще раз большое спасибо.:)

#1366

@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);   
    }

 

#1367

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

Flexi_bars_swing_v2_Alert(trueforex.pp.ua).mq456 скач.

#1368

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

#1369

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

88_filter.mq418 скач. ТС Static Pips.zip34 скач.

#1370

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

Спойлер

//+------------------------------------------------------------------+
//|                                            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 ЗОНЫ.ex49 скач. 2 ЗОНЫ.mq410 скач.

Изменено 1 марта, 2020 пользователем 0ll

#1371

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

#1372

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

Изменено 1 марта, 2020 пользователем 0ll

#1373

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

 

Пишу советник с использованием индикатора 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.mq411 скач.

Изменено 1 марта, 2020 пользователем UncleSam

#1374

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

#1375
9 минут назад, MikR0ReR сказал:

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

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

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

Перейти к списку тем
Форум · 2.0.20260627.0025