[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 373

 
sv.:

extraño.
comprobado, muestra todo.
tal vez el gráfico necesita ser comprimido verticalmente, si el canal es amplio, puede no ser visible cuando se amplía.

Algo surgió después de ajustar los parámetros. Sólo un rango muy estrecho se ajusta a las condiciones del EA. Un paso a la izquierda, un paso a la derecha - nada. Y estas condiciones no se ajustan a la definición de piso. Estoy recibiendo un piso a 100 puntos en 4 dígitos. Y todo se muestra con precisión.

//+------------------------------------------------------------------+
//|                                           ind_FletChannel_07.mq4 |
//|                                            Copyright © 2013, sv. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, sv."
#property link      "7009731@mail.ru"
//----
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
//----
extern int    Distans     = 20;      // Количество баров для определения канала
extern int    Channel     = 1000;     // Размер в пипсах канала
extern int    ZoneUnSence = 80;      // Размер выхода за границы канала, в пипсах
extern int    PauseBar    = 1;       // А это по ходу дела - смещение баров,т.е. где нужно считать.
//----
double Up[];
double Down[];
double UpSupport[];
double DownResistance[];

double pnt;
double high,   low;
double high_1 = 0,
       low_1  = 0;
bool   up_chanel, dn_chanel, FirstChanel;
bool   DrawChannel = false;
int    limit,  History=0;        // 0- все бары
int    n=0, n_up=0, n_dn=0;
int    Bar;

//+------------------------------------------------------------------+
int init() 
  {
//----
 //  pnt=Point;
 //  if(Digits==5 || Digits==3) pnt*=10;
   
 //  IndicatorDigits(Digits);
 //  IndicatorBuffers(4);
//----      
   SetIndexBuffer(0,Up);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexEmptyValue(0,0.0);

   SetIndexBuffer(1,Down);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexEmptyValue(1,0.0);
   
   SetIndexBuffer(2,UpSupport);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexEmptyValue(2,0.0);

   SetIndexBuffer(3,DownResistance);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexEmptyValue(3,0.0);
//----      
   return(0);
  }
//+------------------------------------------------------------------+
int start() 
  { 
   limit = Bars-IndicatorCounted()-1; 
   if(limit > 1)                    limit = Bars-1;
   if(History!=0 && limit>History)  limit = History-1;                   // кол-во пересчетов по истории

   Bar = limit;
   
   // ------------------------------------------------------------------
   for(int i=limit; i>=0; i--) 
     {
      if(i < Bar-PauseBar)
       {
        // если не активна отрисовка канала, ищем канал.
        if(DrawChannel==false)
         {
          // отределяется минимум и максимум на заданном интервале Distans
          double low  = iLow (NULL,0,iLowest (NULL,0,MODE_LOW, Distans,i));
          double high = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,Distans,i));
          
          // и если разность между максимумом и минимумом меньше заданной ширины канала Channel
          if( (high-low) < Channel*Point )  DrawChannel=true;
         }  
       }
      // ------------------------------------------------------------------
      if(DrawChannel)
       {  
        // определяются границы канала как максимум и минимум на интервале Distans
        
        // отрисовка первоначального отправного канала
        if(FirstChanel) { Up[i]   = high;   Down[i] = low;  }
        if(up_chanel)   { Up[i]   = high;   UpSupport[i]      = high - Channel*Point; }   // отрисовка канала тренда вверх
        if(dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel*Point; }   // отрисовка канала тренда вниз
        
        // определяются границы отправного первоначального канала
        // ------------------------------------------------------------------
        if( high_1==0 && low_1==0 )    
         {
          FirstChanel=true;  high_1=high;  low_1=low; 
         }
        else                     // если первоначальный отправной канал уже определён и отрисован
         { 
          if(high > high_1)      // если верхняя граница нового канала выше верхней границы предыдущего канала, то это восходящий тренд
           {
            up_chanel=true;      // активируем флаг отрисовки канала тренда вверх
            high_1 = high;       // и перезаписываем значение
            low_1  = low;
           }
        
          if(low < low_1)        // если нижняя граница нового канала ниже нижней границы предыдущего канала, то это нисходящий тренд
           {
            dn_chanel=true;      // активируем флаг отрисовки канала тренда вниз
            high_1=high;         // и перезаписываем значение
            low_1=low;
           }
         }  
        // ------------------------------------------------------------------
        
        if(Up[i]!=0 && UpSupport[i]!=0)        // пока условие выполняется, границы канала не изменяются
         {
          if ((Close[i] > Up[i]        + ZoneUnSence*Point) ||
              (Close[i] < UpSupport[i] - ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается - Т.е. если не в границах канала
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false; 
            DrawChannel=false;
           }
         } 
        // ------------------------------------------------------------------
        if(Down[i]!=0 && DownResistance[i]!=0)
         {
          if ((Close[i] > DownResistance[i]+ZoneUnSence*Point) ||
              (Close[i] < Down[i]-ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается - Т.е. если не в границах канала
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false;
            DrawChannel=false;
           }
         }
        if(Up[i]!=0 && Down[i]!=0)
         {
          if ((Close[i] > Up[i]   + ZoneUnSence*Point) ||
              (Close[i] < Down[i] - ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false; 
            DrawChannel=false;
           }
         }    
        Bar = i; 
       }    
     } 
   // Конец перебора
   // ------------------------------------------------------------------
   return(0);
  }
//+------------------------------------------------------------------+

Lo he modificado un poco, he tratado de entenderlo. Pero funciona así. Utilicé el H1. Lo malo es que no lo mostré en otros TFs debido a la selección de parámetros. Por ejemplo, en 5 y 15 minutos. - Se podría sugerir que sería posible lograr un piso usando esos TFs. (Si alguien con un punto de vista más experimentado da algunas ideas o señala los errores).

Pero no he notado ningún problema de renderización.

En tu indicador, como en la gran mayoría, lo que se dibuja es lo que había antes; eso es normal para la plantilla de escritura del indicador. Pero lo que está pasando ahora (como usted dijo - en la barra actual) no entrar en las condiciones de este indicador. Por lo tanto, no hay ningún problema en el bar actual.

 
Chiripaha:

Algo surgió después de ajustar los parámetros. Sólo un rango muy estrecho se ajusta a las condiciones del EA. Un paso a la izquierda, un paso a la derecha - nada. Y estas condiciones no se ajustan a la definición de piso. Estoy recibiendo un piso a 100 puntos en 4 dígitos. Todo está dibujado con claridad.

Puede que lo haya alterado un poco, he intentado entenderlo. Pero funciona así. Usé H1. Lo malo es que no lo mostré en otros TFs a través de la selección de parámetros. Por ejemplo, en 5 y 15 minutos. - Se podría sugerir que sería posible lograr un piso usando esos TFs. (Si alguien con un punto de vista más experimentado da algunas ideas o señala los errores).

No he notado ningún problema de dibujo.

Lo que tienes en este indicador, al igual que la gran mayoría, es renderizar lo que fue una vez; lo cual es normal para la plantilla de escritura de indicadores. Pero lo que está pasando ahora (como has dicho - en la barra actual) no se ajusta a las condiciones de este indicador. Por lo tanto, no hay ningún problema en la barra actual.


El parámetroPauseBar es la distancia mínima que separa un canal de otro, en su edición este parámetro debe ser mayor que 5, luego se dibuja en otros parámetros diferentes.
Pero el problema de la renderización con barras nuevas sigue existiendo.

 
sv.:


El parámetroPauseBar es la distancia mínima que separa un canal de otro, en su versión este parámetro debe ser mayor que 5, luego se dibuja con otros parámetros diferentes.
Pero el problema del renderizado con la llegada de nuevas barras seguía siendo.

Para ser honesto, no entiendo la lógica del trabajo de su indicador (aunque entiendo su esencia). Pero...

Mira - el problema radica exactamente en este bloque:

        if(FirstChanel) { Up[i]   = high;   Down[i] = low;  }                             // отрисовка первоначального отправного канала
        if(up_chanel)   { Up[i]   = high;   UpSupport[i]      = high - Channel*Point; }   // отрисовка канала тренда вверх
        if(dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel*Point; }   // отрисовка канала тренда вниз

En algún momento los valores no se escriben en los búferes y, por lo tanto, se les asigna un valor de "cero". De ahí los palos hacia abajo - a cero. Cómo construir la lógica y qué añadir - no puedo entender. Pero los datos no se escriben, obviamente, porque tiene banderas, incluyendo el parámetro

DrawChannel=false;

Por lo tanto, los valores no llegan a ser asignados a los buffers. - Tienes que jugar con esto de alguna manera.

 
Chiripaha:

No puedo ser más específico todavía - Para ser honesto, no entiendo la lógica de su indicador (aunque lo entiendo). Pero...

Mira - el problema radica exactamente en este bloque:

En algún momento los valores no se escriben en los búferes y por lo tanto se les asigna un valor de "cero". De ahí los palos hacia abajo - a cero. Cómo construir la lógica y qué añadir - no puedo entender. Pero los datos no se escriben, obviamente, porque tiene banderas, incluyendo el parámetro

Por lo tanto, los valores no llegan a ser asignados a los buffers. - Tienes que jugar con esto de alguna manera.


Ya veo, así que es una cuestión de lógica. Lo pensaré.
Gracias por su ayuda.

P.D.
Comprueba si todo se renderiza bien en tu historial con el aumento del parámetro PauseBar con otro conjunto de otros parámetros, o también hay algún problema con él?

 
¿cómo puedo ver y visualizar el símbolo de la tabla ascicodia ampliada?
 
sv.:


Ya veo, así que es una cuestión de lógica. Seguiré pensando.
Gracias por su ayuda.

P.D.
¿Compruebas al menos si todo se muestra correctamente en tu historial al aumentar el parámetro PauseBar con otro conjunto de parámetros, o también hay algún problema con él?

Lo he comprobado con el aumento de la PauseBar y he obtenido estos palos a 1 y 5 min. Pero no sé cómo evitarlos correctamente. Entiendo que hay que escribir probablemente (pero no obviamente) si el valor

DrawChannel=false;

в

if(dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel*Point; }   // отрисовка канала тренда вниз

el valor de las barras anteriores - algo así:

if(dn_chanel)   { Down[i] = Down[i+1];    DownResistance[i] = DownResistance[i+1]; }   // отрисовка канала тренда вниз
Pero cuando intento hacerlo, todo mi indicador se "mueve" - porque no entiendo la lógica y no puedo entender dónde ponerlo y bajo qué condiciones.
 
zfs:
¿cómo puedo ver y visualizar el carácter de la tabla ascicode ampliada?

Esto se llama ANSI.

Se adjunta el guión.

Archivos adjuntos:
ansi.mq4  2 kb
 
Por primera vez en el foro, he decidido hacer una pregunta que me interesa - ¿es posible hacer cambios en el terminal para insertar mi comentario (1 o más veces) cuando una posición ya está abierta? no inmediatamente cuando se abre un comentario. sino cuando ya se ha abierto - para que aparezca el comentario actual?
 
Por favor, aconseje cómo resolver el problema: El mismo EA está en varios gráficos, una señal para abrir una orden aparece en dos gráficos al mismo tiempo, por ejemplo. Sin embargo, necesitamos que la segunda orden no se abra. El EA tiene una comprobación de una orden abierta pero no ayuda porque el primer EA probablemente ha abierto una orden y el segundo también envía una solicitud para abrir una orden. ¿Hay alguna solución posible?
 
Twoberg:
Por primera vez en el foro, me decidí a hacer una pregunta que me interesa - ¿es posible hacer tales cambios en el terminal para insertar mi comentario (1 o más veces) en una posición abierta ya? no inmediatamente cuando se abre un comentario. pero cuando ya se ha abierto - para que aparezca el comentario actual?

No

Razón de la queja: