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

 
Artyom Trishkin:

La mejor recomendación aquí es leer la ayuda más a menudo.

Especifica las propiedades que se pueden recuperar/establecer para el gráfico.

En particular, el desplazamiento del gráfico con el botón izquierdo del ratón.

Este es el lugar en la documentación que he leído.

Cuando CHART_EVENT_MOUSE_MOVE = 1, el gráfico recibe mensajes de movimiento del ratón, pero cuando CHART_EVENT_MOUSE_MOVE = 0, no. Esto es comprensible.
Pero no es relevante para mi pregunta... No importa qué valor se establezca para CHART_EVENT_MOUSE_MOVE, siempre tengo la posibilidad de "mover" el gráfico con AUTOSCROLL desactivado
"desplazar" el gráfico de la ventana hacia el pasado (en términos de tiempo) simplemente pulsando el botón izquierdo del ratón y sin soltarlo mover el ratón hacia la derecha.
Esto desplaza el gráfico en la ventana SIEMPRE.
Sin embargo, si presiono Ctrl+F (para llamar a Crosshair) - entonces cuando presiono el botón izquierdo del ratón, lo mantengo presionado y muevo el gráfico, veré el rayo
la información sobre la herramienta mostrará datos sobre el movimiento del ratón y el precio del nivel en el que se encuentra el puntero del ratón.
Y lo más importante: el propio gráfico en ese momento no se moverá en la ventana.

Así es como se consigue este efecto sin habilitar el Crosshair, eso es lo que pregunto...

P.D. Puedo grabar un vídeo de la pantalla y mostrarte cómo se ve.

 
Maksims Ignatovs:

He leído este lugar en la documentación.

Cuando CHART_EVENT_MOUSE_MOVE = 1, el gráfico recibe mensajes sobre el movimiento del ratón, pero si CHART_EVENT_MOUSE_MOVE = 0, no. Esto es comprensible.
Pero no es relevante para mi pregunta... No importa qué valor se establezca para CHART_EVENT_MOUSE_MOVE, siempre tengo la posibilidad de "mover" el gráfico con AUTOSCROLL desactivado
"desplazar" el gráfico de la ventana hacia el pasado (en términos de tiempo) simplemente pulsando el botón izquierdo del ratón y sin soltarlo mover el ratón hacia la derecha.
Esto desplaza el gráfico en la ventana SIEMPRE.
Sin embargo, si presiono Ctrl+F (para llamar a Crosshair) - entonces cuando presiono el botón izquierdo del ratón, lo mantengo presionado y muevo el gráfico, veré el rayo
la información sobre la herramienta mostrará datos sobre el movimiento del ratón y el precio del nivel en el que se encuentra el puntero del ratón.
Y lo más importante: el propio gráfico en ese momento no se moverá en la ventana.

Así es como se consigue este efecto sin encender el Crosshair, eso es lo que pregunto...

P.D. Puedo tomar un video de la pantalla y mostrarte cómo se ve.

¿No he respondido a eso?
Si se desplaza algo en el gráfico con el ratón, se prohíbe el desplazamiento del gráfico en este punto. En cuanto suelte el botón del ratón, permitirá que el gráfico se desplace.

 

¿Se puede acceder a los campos de una estructura utilizando la indexación, es decir, como una matriz unidimensional? ¿Es posible crear una matriz de campos de estructura?

Así que la idea es esta. Hay una estructura

struct MyStruct {int qw;double qe;}; MyStruct qr; 
//пример по сложнее
struct MyStruct1{int qw[5];double qe[5];}; MyStruct1 qr1;

Entonces, al pasar cualquier estructura a una función, tenemos que dirigirnos a cada elemento por su nombre por separado.

qr.qw qr.q51e, etc. Por supuesto, no podrás ponerlo en un bucle y procesarlo con un solo hilo. Quiero crear un array de campos que almacene estos elementos de la siguiente manera

Massiv[2];
//Massiv[0] отвечает за эту запись qr.qw
//Massiv[1] отвечает за эту запись qr.qе

Como resultado, podemos dirigirnos a estos elementos a través de la indexación y, por supuesto, la segunda estructura se puede poner en un bucle y manejar qw qe a través del bucle.

¿Es posible hacerlo, he visto esas entradas en Internet hace tiempo, pero quizás he entendido algo mal porque he perdido el sitio? ¿Quizás las macros typedef enum union puedan ayudar en este asunto?

 
Artyom Trishkin:
¿No he respondido a eso?
Si se mueve algo en el gráfico con el ratón, se desactiva el desplazamiento del gráfico en ese momento. En cuanto suelte el botón del ratón, permitirá que el gráfico se desplace.

No muevo nada en el gráfico. Si establezcoCHART_EVENT_MOUSE_MOVE = 0 no ayuda - el gráfico puede seguir moviéndose.
No sé cómo desactivar el procesamiento de ChartNavigate para el gráfico
. Tampoco lo he encontrado en la documentación.
Al mismo tiempo, la "retícula" se adapta de alguna manera a este caso. Por eso pregunto: ¿cómo?
Usted me contesta - simplemente establezca el valor correcto paraCHART_EVENT_MOUSE_MOVE. Lo he probado, pero no sirve de nada.
Con cualquier valor de
CHART_EVENT_MOUSE_MOVE, se puede seguir moviendo el gráfico con el ratón hacia adelante y hacia atrás en el tiempo, simplemente manteniendo pulsado el botón izquierdo del ratón sobre el gráfico y moviendo el ratón.
Al mismo tiempo, dependiendo de la dirección en que se mueva el ratón horizontalmente, el gráfico se desplazará en la ventana Si muevo el ratón hacia la derecha, el gráfico se desplazará hacia la izquierda (hacia la historia pasada),
y si muevo el ratón hacia la izquierda, el gráfico se desplazará hacia el futuro hasta que aparezca la barra actual. Después de eso, un intento de moverlo hacia la izquierda con el ratón no funcionará. Pero esto es comprensible.
Si
muevo el gráfico en la ventana a alguna fecha en el pasado usando ChartNavigate, ¿qué debo hacer para asegurar que bajo ninguna circunstancia (sin manipulaciones con clics y movimientos del ratón en el gráfico), la parte del gráfico que veo no se desplace? ¿Qué tengo que hacer?


 
Maksims Ignatovs:

No muevo nada en el gráfico. Si establezco CHART_EVENT_MOUSE_MOVE = 0 no ayuda - el gráfico puede seguir moviéndose.
No sé cómo desactivar el procesamiento de ChartNavigate para el gráfico
. Tampoco lo he encontrado en la documentación.


ChartSetInteger(0, CHART_MOUSE_SCROLL, 0); // Выключим прокрутку графика
 
Buenas tardes, por favor arreglen el indicador, es necesario mostrar la hora del servidor a través del botón, siempre y cuando el botón en su posición original debe mostrar
Esto es lo que NO conseguí:
#property copyright "Copyright 2014, ForexDE"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window

string s1="";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   PutButton("B",50,50,"KNOPKA");
   
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";

   ObjectCreate("WeekDay1",OBJ_LABEL,0,0,0);          
   ObjectSet("WeekDay1",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);
   ObjectSet("WeekDay1",OBJPROP_YDISTANCE,2);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_HIDDEN,true);
   ObjectSet("WeekDay1",OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_COLOR,Black);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_SELECTED,false);
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);
   
   return(INIT_SUCCEEDED);
}
/****************Custom indicator iteration function*****************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {
 
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";
 
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);

  return(rates_total);
 }/*******************************************************************/

/********************************************************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {

  if(id == CHARTEVENT_CLICK)
   {
   
         if(!ObjectGetInteger(0,"B",OBJPROP_STATE,false))
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,7000); // скрываю 
           }
         else
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);    // показываю обратно
           }
   


   }
   
 }
/*******************************************************************/
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
 

vebster005:
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

¿Qué es exactamente lo que has dejado de hacer? Es decir, en tus propias palabras lo que querías hacer...

se hace un botón, al pulsarlo, se sale de la pantalla (si no es ancho)

¿por qué no estás contento con el resultado?

 
Maxim Kuznetsov:

¿Qué es exactamente lo que no ha funcionado? Es decir, en tus propias palabras, lo que querías hacer...

el botón está hecho, al pulsarlo, se sale de la pantalla (si no es ancho)

¿Qué hay de malo en el resultado?

el resultado es que al pulsar el botón la hora se ocultaba y luego volvía a aparecer porque se actualiza por el hecho de que en la calculadora

 
Maxim Kuznetsov:

¿Qué es exactamente lo que no ha funcionado? Es decir, en tus propias palabras, lo que querías hacer...

se hace un botón, al pulsarlo, se sale de la pantalla (si no es ancho)

¿por qué no estás contento con el resultado?

Podrías hacer que funcione para los segundos y todo lo demás, como en el terminal, y puedes desactivar el botón
porque cuando desactivo el botón (lo quito de la pantalla) la hora vuelve a aparecer

 
vebster005:

¿Podría obtener el resultado que segundos y todo lo demás funciona, como en el terminal, y se puede desactivar el botón
porque cuando desactivo el botón (lo quito de la pantalla) la hora vuelve a aparecer

Aquí hay mucha gente que puede conseguir casi cualquier resultado.

Es importante que tú mismo intentes conseguirlos, en lugar de rogar a los demás que lo hagan por ti. Siempre están dispuestos a ayudar, pero a ayudar, no a hacerlo por ti.