Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1039

 

Estoy dibujando mi panel indicador. Tengo una pregunta, cómo hacer que no sea transparente para otros objetos gráficos inferiores.

Algunas líneas saltan (el ratón las atrapa) e intentan cambiar su posición.

En general, ¿cómo hacer que el panel no sea visible para los objetos que cubre?



Figura 1

 
Aleksandr Tyunev:

Estoy dibujando mi panel indicador. Tengo una pregunta, cómo hacer que no sea transparente para otros objetos gráficos inferiores.

Algunas líneas saltan (el ratón las atrapa) e intentan cambiar su posición.

En general, ¿cómo hacer que el panel no sea visible para los objetos que cubre?



No estoy exactamente seguro (ya que parece que estás creando tu panel usando la librería) - si es posible, deberías darle al panel una mayor prioridad al recibir los clics del ratón con esta función

ObjectSetInteger(ChartID(),name,OBJPROP_ZORDER,z_order);
 
jaffer wilson:

Dos declaraciones:

Impresión: 22,33

И

Impresión: 2.00000

¿Por qué hay diferentes resultados? En C / C ++ la declaración anterior funciona bien.

incluso en C, formateando
"%.*lf"

ligeramente diferente de lo que imaginaba :-)

el primer argumento es la precisión (es como un asterisco allí), probablemente pensaste lo contrario, y al obtener "2.0000" te sorprendes

PD/ no aprendas a programar con MQL.

 
Alexandr Sokolov:

No estoy exactamente seguro (ya que parece que estás creando tu panel usando la librería) - si es posible, tienes que darle al panel una mayor prioridad al recibir los clics del ratón con esta función

No importa la biblioteca basada o sólo el objeto = OBJ_RECTANGLE_LABEL. Cubrir los objetos gráficos por debajo del nivel, no funciona.

 
Aleksandr Tyunev:

Estoy dibujando mi panel indicador. Tengo una pregunta, cómo hacer que no sea transparente para otros objetos gráficos inferiores.

Algunas líneas saltan (el ratón las atrapa) e intentan cambiar su posición.

En general, ¿cómo hacer que un panel no sea visible para los objetos cerrados por él?

Recuerdo que hubo un tiempo, que se jodió un poco sobre él)))

Opción lista:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

if(id==CHARTEVENT_MOUSE_MOVE) { 
      
      int      x      =(int)lparam; // Координата по оси X
      int      y      =(int)dparam; // Координата по оси Y
      int      subwin =WRONG_VALUE; // Номер окна, в котором находится курсор
      datetime time   =NULL;        // Время соответствующее координате X
      double   level  =0.0;         // Уровень (цена) соответствующий координате Y
      string MState  =(string)sparam;  // Состояние левой кнопки мыши
      
      if (MState=="0") {
     //--- Получим местоположение курсора
      if(!::ChartXYToTimePrice(ChartID(),x,y,subwin,time,level))
         return;
     
     int obj_total=ObjectsTotal();
      for(int i=obj_total-1;i>=0;i--)
      {
      string name=ObjectName(i);
      // Для координат окна панели
      if (StringSubstr(name,5,10)=="ClientBack") {   // Ищем среди объектов больший (прямоугольник) с именем ClientBack (у меня так называется)
         
         int x_dist, x_size, y_dist, y_size;
         bool stop_selected_all;
         
         x_dist=ObjectGetInteger(ChartID(),name,OBJPROP_XDISTANCE,0);
         y_dist=ObjectGetInteger(ChartID(),name,OBJPROP_YDISTANCE,0);
         
         x_size=ObjectGetInteger(ChartID(),name,OBJPROP_XSIZE,0);
         y_size=ObjectGetInteger(ChartID(),name,OBJPROP_YSIZE,0);
         
         if (((x>x_dist-5)&&(x<x_dist+x_size+5))&&((y>y_dist-24)&&(y<y_dist+y_size))){
         ChartSetInteger(ChartID(),CHART_DRAG_TRADE_LEVELS,false);
         ChartSetInteger(ChartID(),CHART_MOUSE_SCROLL,false);
         //ObjectSetInteger(ChartID(),name,OBJPROP_ZORDER,1);
         //ObjectSetInteger(ChartID(),name,OBJPROP_BORDER_TYPE,BORDER_RAISED);
         if (stop_selected_all==false) {
            int obj_total_1=ObjectsTotal();
            for(int i=obj_total_1-1;i>=0;i--)
            {
            string name_1=ObjectName(i);
            ObjectSetInteger(ChartID(),name_1,OBJPROP_SELECTABLE,false);
            stop_selected_all=true;
            }
            }
         } else {
         ChartSetInteger(ChartID(),CHART_DRAG_TRADE_LEVELS,true);
         ChartSetInteger(ChartID(),CHART_MOUSE_SCROLL,true);
         //ObjectSetInteger(ChartID(),name,OBJPROP_ZORDER,0);
         //ObjectSetInteger(ChartID(),name,OBJPROP_BORDER_TYPE,BORDER_SUNKEN);
            int obj_total_1=ObjectsTotal();
            for(int i=obj_total_1-1;i>=0;i--)
            {
            string name_1=ObjectName(i);
            ObjectSetInteger(ChartID(),name_1,OBJPROP_SELECTABLE,true);
            stop_selected_all=false;
            }
         }
      }
      
      // End. Для координат окна панели
      }
      }
     
      return;
     }
  }

En general, el principio es el siguiente.

 
Vyacheslav Nekipelov:

Recuerdo que hubo un momento así, lo toqueteé un poco))

Una variante del acabado:

Básicamente, el principio es el siguiente.

Gracias. El principio está claro, ¡lo seguiré utilizando!

 
El manual mql5 chm no funciona correctamente por alguna razón. Cuando selecciono esta o aquella página, no muestra nada. ¿Cuál puede ser el motivo y cómo solucionarlo?
 
Yevhenii Levchenko:
El manual mql5 chm no funciona correctamente por alguna razón. Cuando selecciono esta o aquella página, no muestra nada. ¿Cuál puede ser el motivo y cómo solucionarlo?

Es necesario eliminar el bloqueo en las propiedades del archivo.

 
Por favor, ayuda. Tengo un indicador de garrapatas. Por alguna razón muestra el valor en 4 dígitos, pero lo necesito en 5 dígitos.
#property  indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua
double x[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,x);
   SetIndexDrawBegin(0,0);
   SetIndexLabel(0,"x");
   SetIndexShift(0,0);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double b=MarketInfo(Symbol(),MODE_BID);
   x[0]=b;
   for(int j=ArraySize(x)-1;j>=1;j--){x[j]=x[j-1];}
   return(0);
  }
//+------------------------------------------------------------------+
Создание тиковых индикаторов
Создание тиковых индикаторов
  • www.mql5.com
При торговле хочется иметь как можно больше информации. Возникает желание видеть более детальную картину изменения цен. Для этого можно использовать тиковый график. Попробуем построить тиковый график средствами MQL5. В этой статье описывается создание двух индикаторов: строящего тиковый график цены и рисующего "тиковые свечи" - свечи...
Archivos adjuntos:
ticks.png  4 kb
 
Oleg Bondarev:
Por favor, ayuda. Hay un indicador de garrapatas. Por alguna razón muestra un valor de 4 dígitos, mientras que yo necesito uno de 5 dígitos.

IndicadorDígitos(5)

Razón de la queja: