Группа "Стол заказов MQL"

Рейтинг 2156



РЕКОМЕНДУЮ



Добавить алерт индикатору.

Уважаемые программисты прошу добавить «Alert» и “Звуковой сигнал” к индикатору Up_and_Down.mq4 (8 Kb).
Каждой стрелке на графике должен соответствовать «Alert» и стрелки должны быть «буферные».



Заранее благодарен.
  • 0
  • Просмотров: 1985
  • 29 июля 2024, 19:37
  • Marik007
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
ТМА+МА
Следующая запись в группе  
Сделать аналог индюка
24 июля 2024
30 июля 2024

Брокер для ваших роботов, 15 лет на рынке

Комментарии (5)

+
0
скачал. что это?

avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 29 июля 2024, 21:12
+
0
Вот я тоже скачал:

<code>//+------------+-----------------------------------------------------+
//| v.22.04.05 |                                     up and Down.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_style1 STYLE_SOLID
#property indicator_color1 Yellow

#property indicator_level1 0
//#property indicator_level2 -2
//#property indicator_level3 2
//#property indicator_level4 -1
//#property indicator_level5 1
#property indicator_minimum -3
#property indicator_maximum 3
#define PREFIX "xxx"

extern int    period          = 18;
extern bool   Arrow           = true;
extern int    ArrowSize       = 1;
extern int    SIGNAL_BAR      = 1;
extern color  clArrowBuy      = Blue;
extern color  clArrowSell     = Red; 

double      ExtBuffer0[];
// -------------------------------------------------------------------------------------------------------------
int init()
  {
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0,ExtBuffer0);
    IndicatorShortName("Up and Down");
    return(0);
  }
// -------------------------------------------------------------------------------------------------------------
int deinit()                            
  {                                           
    for (int i = ObjectsTotal()-1; i >= 0; i--)   
    if (StringSubstr(ObjectName(i), 0, StringLen(PREFIX)) == PREFIX)
       ObjectDelete(ObjectName(i));
    return(0);  
  }
// -------------------------------------------------------------------------------------------------------------
int start()
  {
    int limit;
    int counted_bars;
    //double prev, current, old;
    double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
    double price;
    double MinL=0;
    double MaxH=0;
   
    counted_bars = IndicatorCounted();
    if ( counted_bars > 0 ) counted_bars--;
    limit = Bars - counted_bars;

    for(int i=0; i<limit; i++)
      {
        MaxH = High[iHighest(NULL,0,MODE_CLOSE,period,i)];                       
        MinL = Low[iLowest(NULL,0,MODE_CLOSE,period,i)];                          
        price = (Open[i]+ Close[i])/2;                                             

        if(MaxH-MinL == 0) Value = 0.33*2*(0-0.5) + 0.67*Value1;
        else Value = 0.33*2*((price-MaxH)/(MinL-MaxH)-0.5) + 0.67*Value1;

        Value=MathMin(MathMax(Value,-0.999),0.999);
 
        if(1-Value == 0) ExtBuffer0[i]=0.5+0.5*Fish1;
        else ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;

        Value1=Value;
        Fish1=ExtBuffer0[i];
      }
    int counted_bars2 = IndicatorCounted();
    if ( counted_bars2 > 0 ) counted_bars2--;
    int limit2 = Bars - counted_bars2;
    for ( int j = limit2; j >= 0; j-- )
      {
        if ( Arrow )
          {
            if ( ExtBuffer0[j+SIGNAL_BAR+1] > 0.0  && ExtBuffer0[j+SIGNAL_BAR] < 0.0 ) manageArr(j+1, clArrowBuy,  233, false);
            if ( ExtBuffer0[j+SIGNAL_BAR+1] < 0.0  && ExtBuffer0[j+SIGNAL_BAR] > 0.0 ) manageArr(j+1, clArrowSell, 234, true );
          }
      }
    return(0);
  }
// -------------------------------------------------------------------------------------------------------------
void manageArr(int j, color clr, int theCode, bool up)   
  {
    string objName = PREFIX + Time[j];
    double gap  = 3.0*iATR(NULL,0,20,j)/4.0;
    
    ObjectCreate(objName, OBJ_ARROW,0,Time[j],0);
    ObjectSet   (objName, OBJPROP_COLOR, clr);  
    ObjectSet   (objName, OBJPROP_ARROWCODE,theCode);
    ObjectSet   (objName, OBJPROP_WIDTH,ArrowSize);  
    if ( up )
      ObjectSet(objName,OBJPROP_PRICE1,Open[j]+gap);
    else  
      ObjectSet(objName,OBJPROP_PRICE1,Close[j] -gap);
  }
// -------------------------------------------------------------------------------------------------------------

</code>



Редактирован: 29 июля 2024, 21:23
avatar

  19  Marik007 Автор Сообщений: 425 - Forexman

  • 29 июля 2024, 21:18
+
+1
avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 29 июля 2024, 22:11
+
0
Спасибо, все работает. *yes* 
Редактирован: 29 июля 2024, 23:18
avatar

  19  Marik007 Автор Сообщений: 425 - Forexman

  • 29 июля 2024, 22:41
+
0
Немного улучшил индикатор.
Кроме гистограм, показывающих цветом направление рынка, уменьшил задержки сигнала
и добавил дополнительные.

Сравните показания.

<code>
//+------------+-----------------------------------------------------+
//| v.12.01.25 |                                     Up and Down.mq4 |
//|                      Copyright © 2025, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2025, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 3

#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_style2  STYLE_SOLID
#property indicator_color2  clrRed
#property indicator_width2  2

#property indicator_style3  STYLE_SOLID
#property indicator_color3  clrBlue
#property indicator_width3  3

#property indicator_level1 0
#property indicator_minimum -3
#property indicator_maximum 3
#define PREFIX "xxx"

extern int    period          = 14;
extern double Rol             = 1.15;   // от 0  до 3
extern bool   Arrow           = true;
extern int    ArrowSize       = 0;
extern int    SIGNAL_BAR      = 1;
extern color  clArrowBuy      = Blue;
extern color  clArrowSell     = Red; 

double      ExtBuffer0[];
double      ExtBufferUp[];
double      ExtBufferDn[];
// -------------------------------------------------------------------------------------------------------------
int init()
{
      SetIndexBuffer(0,ExtBuffer0);       SetIndexStyle(0,DRAW_NONE);
      SetIndexBuffer(1,ExtBufferUp);      SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,clrRed);
      SetIndexBuffer(2,ExtBufferDn);      SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2,clrBlue);
      
      IndicatorShortName("Up and Down Histo");
    return(0);
}
// -------------------------------------------------------------------------------------------------------------
int deinit()                            
{                                           
       for (int i = ObjectsTotal()-1; i >= 0; i--)   
          if (StringSubstr(ObjectName(i), 0, StringLen(PREFIX)) == PREFIX)
             ObjectDelete(ObjectName(i));
    return(0);  
}
// -------------------------------------------------------------------------------------------------------------
int start()
{
       int limit, counted_bars;
       double Value  = 0,     // prev
              Value1 = 0,     // current
              Value2 = 0,     // old
              Fish   = 0,     // prev
              Fish1  = 0,     // current
              Fish2  = 0,     // old
              MinL   = 0,
              MaxH   = 0,
              price;
      
       counted_bars = IndicatorCounted();
       
       if (counted_bars > 0) 
           counted_bars--;
          
       limit = Bars - counted_bars;
   
       for(int i=0; i<limit; i++)
           {
           MaxH  = High[iHighest(NULL,0,MODE_CLOSE,period,i)];                       
           MinL  = Low[iLowest(NULL,0,MODE_CLOSE,period,i)];                          
           price = (Open[i]+ Close[i])/2;                                             
   
           if(MaxH-MinL == 0) 
              Value = 0.33*2*(0-0.5) + 0.67*Value1;
           else 
              Value = 0.33*2*((price-MaxH)/(MinL-MaxH)-0.5) + 0.67*Value1;
   
           Value=MathMin(MathMax(Value,-0.999),0.999);
    
           if(1-Value == 0)
              ExtBuffer0[i] = 0.5+0.5*Fish1;
           else 
              ExtBuffer0[i] = 0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
              
           if(ExtBuffer0[i]>=0)
              {
              ExtBufferUp[i] = ExtBuffer0[i];
              ExtBufferDn[i] = EMPTY_VALUE;
              }
           else
              {
              ExtBufferDn[i] = ExtBuffer0[i];
              ExtBufferUp[i] = EMPTY_VALUE;
              }
              
   
           Value1=Value;
           Fish1=ExtBuffer0[i];
           }
       //---    
       int counted_bars2 = IndicatorCounted();
       
       if (counted_bars2 > 0)
           counted_bars2--;
           
       int limit2 = Bars - counted_bars2;
       
       for(int j = limit2;j >= 0;j--)
           {
           if (Arrow)
               {
               if (ExtBuffer0[j+SIGNAL_BAR+1] > Rol  && ExtBuffer0[j+SIGNAL_BAR] < Rol) 
                  manageArr(j+1, clArrowBuy,  108, false);
               if (ExtBuffer0[j+SIGNAL_BAR+1] < -Rol  && ExtBuffer0[j+SIGNAL_BAR] > -Rol) 
                  manageArr(j+1, clArrowSell, 108, true );
               //---
               if (ExtBuffer0[j+SIGNAL_BAR+1] > -Rol  && ExtBuffer0[j+SIGNAL_BAR+1] < Rol) 
                  {
                  if (ExtBuffer0[j+SIGNAL_BAR+3] > ExtBuffer0[j+SIGNAL_BAR+2]  && ExtBuffer0[j+SIGNAL_BAR+2] > ExtBuffer0[j+SIGNAL_BAR+1]  && ExtBuffer0[j+SIGNAL_BAR+1] < ExtBuffer0[j+SIGNAL_BAR])
                        manageArr(j+1, clArrowSell, 108, true );
                  if (ExtBuffer0[j+SIGNAL_BAR+3] < ExtBuffer0[j+SIGNAL_BAR+2]  && ExtBuffer0[j+SIGNAL_BAR+2] < ExtBuffer0[j+SIGNAL_BAR+1]  && ExtBuffer0[j+SIGNAL_BAR+1] > ExtBuffer0[j+SIGNAL_BAR])
                        manageArr(j+1, clArrowBuy,  108, false);
                  }
               }
           }
    return(0);
}
// -------------------------------------------------------------------------------------------------------------
void manageArr(int j, color clr, int theCode, bool up)   
{
    string objName = PREFIX + Time[j];
    double gap  = 2*iATR(NULL,0,9,j)/4.0; 
    
    ObjectCreate(objName, OBJ_ARROW,0,Time[j],0);
    ObjectSet   (objName, OBJPROP_COLOR, clr);  
    ObjectSet   (objName, OBJPROP_ARROWCODE,theCode);
    ObjectSet   (objName, OBJPROP_WIDTH,ArrowSize);  
    if ( up )
       {
       ObjectSet(objName,OBJPROP_PRICE1,Open[j]+gap);
//       Alert("Open OP_SELL");
       }
    else 
       { 
       ObjectSet(objName,OBJPROP_PRICE1,Close[j] -gap);
//       Alert("Open OP_BUY");
       }
}
// -------------------------------------------------------------------------------------------------------------
</code>




Все равно, индикатор для работы не совсем подходит.
Он перерисовывает свои показания. А на истории ляля.

Кроме того алерты в моем исполнении лучше отключить. Что и сделал. Они срабатывают постоянно. Почему???

Пытался каждые Х секунд переинициализировать индикатор, чтобы он постоянно «приходил в чувство».
Получилась полная лажа. Как на конечном участке (а именно он нас интересует) рисовал, так и рисует.

Есть еще потенциал для улучшения, но смысла нет. Ибо он РИСУЕТ.

Но все равно этот индикатор лучше оригинала.

Редактирован: 13 февраля 2025, 11:21
avatar

  8  kvashnin007 Сообщений: 734 - Андрей

  • 13 февраля 2025, 11:05

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