Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1039

 

Sto disegnando il mio pannello indicatore. Ho una domanda, come renderlo non trasparente per altri oggetti grafici inferiori.

Alcune linee saltano fuori (il mouse cattura) e cercano di cambiare la loro posizione.

In generale, come fare in modo che il pannello non sia visibile agli oggetti che copre?



Fig. 1

 
Aleksandr Tyunev:

Sto disegnando il mio pannello indicatore. Ho una domanda, come renderlo non trasparente per altri oggetti grafici inferiori.

Alcune linee saltano fuori (il mouse cattura) e cercano di cambiare la loro posizione.

In generale, come fare in modo che il pannello non sia visibile agli oggetti che copre?



Non sono esattamente sicuro (dato che sembra che tu stia creando il tuo pannello usando la libreria) - se possibile, dovresti dare al pannello una priorità più alta nel ricevere i clic del mouse con questa funzione

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

Due dichiarazioni:

Stampa: 22.33

И

Stampa: 2.00000

Perché ci sono diverse uscite? In C / C ++ la dichiarazione di cui sopra funziona bene.

anche in C, formattando
"%.*lf"

leggermente diverso da quello che immaginavi :-)

il primo argomento è la precisione (è come un asterisco lì), probabilmente avete pensato il contrario, e ottenendo "2.0000" siete sorpresi

PS/ non imparare la programmazione MQL.

 
Alexandr Sokolov:

Non sono esattamente sicuro (dato che sembra che tu stia creando il tuo pannello usando la libreria) - se è possibile, devi dare al pannello una priorità maggiore nel ricevere i clic del mouse con questa funzione

Non importa che sia basato sulla libreria o solo sull'oggetto = OBJ_RECTANGLE_LABEL. Coprire gli oggetti grafici sotto il livello, non funziona.

 
Aleksandr Tyunev:

Sto disegnando il mio pannello indicatore. Ho una domanda, come renderlo non trasparente per altri oggetti grafici inferiori.

Alcune linee saltano fuori (il mouse cattura) e cercano di cambiare la loro posizione.

In generale, come fare in modo che un pannello non sia visibile agli oggetti chiusi da esso?

Mi ricordo che c'è stato un periodo in cui ho fatto un po' di casino per questo)))

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

In generale, il principio è questo.

 
Vyacheslav Nekipelov:

Ricordo che c'è stato un momento simile, ci ho giocherellato un po'))

Una variante di quello finito:

Fondamentalmente, il principio è questo.

Grazie! Il principio è chiaro, lo userò ancora!

 
Il manuale chm di mql5 non funziona correttamente per qualche motivo. Quando seleziono questa o quella pagina, non mostra nulla. Quale potrebbe essere la ragione e come risolvere il problema?
 
Yevhenii Levchenko:
Il manuale chm di mql5 non funziona correttamente per qualche motivo. Quando seleziono questa o quella pagina, non mostra nulla. Quale potrebbe essere la ragione e come risolvere il problema?

È necessario rimuovere il blocco nelle proprietà del file.

 
Per favore, aiutatemi. Ho un indicatore di tick. Per qualche motivo mostra il valore in 4 cifre, ma io ne ho bisogno in 5 cifre.
#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. В этой статье описывается создание двух индикаторов: строящего тиковый график цены и рисующего "тиковые свечи" - свечи...
File:
ticks.png  4 kb
 
Oleg Bondarev:
Per favore, aiutatemi. C'è un indicatore di tick. Per qualche motivo mostra un valore a 4 cifre, mentre io ho bisogno di un valore a 5 cifre.

IndicatoreCifre(5)