Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1039

 

Estou desenhando meu painel indicador. Tenho uma pergunta, como torná-lo não-transparente para outros objetos gráficos inferiores.

Algumas linhas saltam para fora (o mouse pega) e tentam mudar sua posição.

Em geral, como fazer com que o painel não seja visível para os objetos que ele cobre?



Fig. 1

 
Aleksandr Tyunev:

Estou desenhando meu painel indicador. Tenho uma pergunta, como torná-lo não-transparente para outros objetos gráficos inferiores.

Algumas linhas saltam para fora (o mouse pega) e tentam mudar sua posição.

Em geral, como fazer com que o painel não seja visível para os objetos que ele cobre?



Não estou exatamente certo (pois parece que você está criando seu painel usando a biblioteca) - se possível, você deve dar maior prioridade ao painel ao receber cliques do mouse com esta função

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

Duas declarações:

Impressão: 22.33

И

Impressão: 2.00000

Por que existem saídas diferentes? Em C / C ++ a afirmação acima funciona bem.

mesmo em C, formatação
"%.*lf"

um pouco diferente do que você imaginava :-)

o primeiro argumento é precisão (é como um asterisco ali), você provavelmente pensou o contrário, e ao receber "2.0000" você fica surpreso

PS/ não aprenda programação MQL.

 
Alexandr Sokolov:

Não tenho exatamente certeza (já que parece que você está criando seu painel usando a biblioteca) - se for possível, você precisa dar ao painel uma prioridade maior ao receber cliques do mouse com esta função

Não importa a biblioteca baseada ou apenas objeto = OBJ_RECTANGLE_LABEL. A cobertura de objetos gráficos abaixo do nível, não funciona.

 
Aleksandr Tyunev:

Estou desenhando meu painel indicador. Tenho uma pergunta, como torná-lo não-transparente para outros objetos gráficos inferiores.

Algumas linhas saltam para fora (o mouse pega) e tentam mudar sua posição.

Em geral, como fazer um painel não é visível para os objetos fechados por ele?

Eu me lembro que houve um tempo, um pouco de parafuso por cima))))

Opção pronta:

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

Em geral, o princípio é este.

 
Vyacheslav Nekipelov:

Lembro-me que houve um tempo em que eu estava lutando com isto))

Uma variante do acabado:

Basicamente, o princípio é este.

Obrigado! O princípio é claro, vou usá-lo ainda mais!

 
O manual de mql5 chm não funciona corretamente por alguma razão. Quando eu seleciono esta ou aquela página, ela não mostra nada. Qual poderia ser a razão e como consertá-lo?
 
Yevhenii Levchenko:
O manual de mql5 chm não funciona corretamente por alguma razão. Quando eu seleciono esta ou aquela página, ela não mostra nada. Qual poderia ser a razão e como consertá-lo?

É necessário remover a fechadura nas propriedades do arquivo.

 
Por favor, ajude. Eu tenho um indicador de carrapato. Por alguma razão ele mostra o valor em 4 dígitos, enquanto eu preciso dele em 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. В этой статье описывается создание двух индикаторов: строящего тиковый график цены и рисующего "тиковые свечи" - свечи...
Arquivos anexados:
ticks.png  4 kb
 
Oleg Bondarev:
Por favor, ajude. Há um indicador de carrapato. Por alguma razão, ele mostra um valor de 4 dígitos, enquanto eu preciso de um de 5 dígitos.

IndicadorDígitos(5)

Razão: