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

 
ascerdfg:
¿Dónde hago clic con el botón derecho?

Ctrl T para que aparezca el menú de la parte inferior, Trading, Assets, ..... , por último Log. Haz clic en el cuaderno de bitácora y haz clic con el botón derecho del ratón en una de las entradas para ver

 
Alexey Viktorov:

Es posible que el precio y el tiempo de las coordenadas del objeto sean iguales a cero. Compruébelo de esta manera: pulse Ctrl+B, pulse el botón "Todos" en el cuadro de diálogo que aparece y vea la lista de objetos existentes. Si hay uno, abra las propiedades y vea las coordenadas.

depurado, todo está bien al crear todos los objetos

 
ascerdfg:
¿Dónde debe hacer clic con el botón derecho?

especialmente, rzewski: un ratón para pinchar en el lugar correcto

 
Maxim Kuznetsov:

Especialmente para Rzewski: un ratón para hacer clic en el lugar correcto

Para ser honesto, el método de tientas para encontrar donde se llama el registro, y le gustaba la palabra vista, presionado. y ahí está el log))))) Y por cierto, ¿no hay forma de llamar al registro a través de la contraclave o qué?

 

Buenas tardes.

¿Es posible establecer que un objeto esté siempre por encima de los demás, incluidos los objetos recién colocados? ¿Para que cuando los objetos se superpongan, el objeto deseado nunca se superponga al superior?

Inicialmente pensé que la propiedad OBJPROP_ZORDER podría ayudar, si el objeto requerido siempre se establece en el valor más alto. Pero en la práctica, sólo es prioritario para la captura de clics. Visualmente, el objeto no llega más alto que todos ellos.

También en la práctica, descubrí que si un objeto se dibuja en último lugar, definitivamente será visualmente más alto que los demás. Así que tengo que crear alguna propiedad que desconozco, o bien redibujar el objeto, que no debería solapar la parte superior cada vez que cambia el número de objetos en el gráfico. Pero al volver a dibujar, me encontré con un problema: el parpadeo de un objeto que fue eliminado y dibujado de nuevo. ¿Hay alguna forma de redibujar el objeto de forma agradable, sin parpadeos, o de hacer que no se superponga desde arriba?


 
Oleg Remizov:

Buenas tardes.

¿Es posible establecer que un objeto esté siempre por encima de los demás, incluidos los objetos recién colocados? ¿Para que cuando los objetos se superpongan, el objeto deseado nunca se superponga al superior?

Inicialmente pensé que la propiedad OBJPROP_ZORDER podría ayudar, si el objeto requerido siempre se establece en el valor más alto. Pero en la práctica, sólo es prioritario para la captura de clics. Visualmente, el objeto no llega más alto que todos ellos.

También en la práctica, descubrí que si un objeto se dibuja en último lugar, definitivamente será visualmente más alto que los demás. Así que tengo que crear alguna propiedad que desconozco, o redibujar el objeto, que no debería solapar la parte superior cada vez que cambia el número de objetos en el gráfico. Pero al volver a dibujar, me encontré con un problema: el parpadeo de un objeto que fue eliminado y dibujado de nuevo. ¿Hay alguna forma de redibujar el objeto de forma agradable, sin parpadeos, o hacer que no se superponga desde arriba?


OBJPROP_TIMEFRAMES:

OBJ_NO_PERIODS - invisible en todos los períodos,

OBJ_ALL_PERIODS - visible en todos los períodos

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
Oleg Remizov:

Buenas tardes.

¿Es posible establecer que un objeto esté siempre por encima de los demás, incluidos los objetos recién colocados? ¿Para que cuando los objetos se superpongan, el objeto deseado nunca se superponga al superior?

Inicialmente pensé que la propiedad OBJPROP_ZORDER podría ayudar, si el objeto requerido siempre se establece en el valor más alto. Pero en la práctica, sólo es prioritario para la captura de clics. Visualmente, el objeto no llega más alto que todos ellos.

También en la práctica, descubrí que si un objeto se dibuja en último lugar, definitivamente será visualmente más alto que los demás. Así que tengo que crear alguna propiedad que desconozco, o bien redibujar el objeto, que no debería solapar la parte superior cada vez que cambia el número de objetos en el gráfico. Pero al volver a dibujar, me encontré con un problema: el parpadeo de un objeto que fue eliminado y dibujado de nuevo. ¿Hay alguna forma de redibujar el objeto de forma agradable, sin parpadeos, o hacer que no se superponga desde arriba?


Los objetos se muestran según el índice:

string  ObjectName( 
   int    object_index   // номер в списке объектов
   );

De ello se deduce que, visualmente, el objeto con el índice más alto estará en primer plano.

Salgo de esta situación de la siguiente manera:

string pref="own"; //префикс в именах своих объектов
bool CheckOtherObj(string &arrObjOther[]){
   CheckOtherObjDelete(&arrObjOther);
   for(int i=ObjectsTotal(0,-1,-1)-1; i>=0; i--){
      string name=ObjectName(0,i,-1,-1);
      if(StringFind(name,pref)>=0)continue;
      bool add=true;
      for(int k=ArraySize(arrObjOther)-1; k>=0; k--){
         if(arrObjOther[k]==name){
            add=false;
            break;
         }
      }
      if(add){
         AddToArr(name,arrObjOther);
         return(true);
      }
   }
   return(false);
}
void CheckOtherObjDelete(string &arrObjOther[]){
   string arrdel[];
   ArrayFree(arrdel);
   for(int k=0; k<ArraySize(arrObjOther); k++){
      bool add=true;
      for(int i=0; i<ObjectsTotal(0,-1,-1); i++){
         string n=ObjectName(0,i,-1,-1);
         if(StringFind(n,pref)>=0)continue;
         if(n==arrObjOther[k]){
            add=false;
            break;  
         }
      }
      if(add) AddToArr(arrObjOther[k],arrdel);
   }
   if(ArraySize(arrdel)>0){
      string temp[];
      ArrayCopy(temp,arrObjOther);
      ArrayFree(arrObjOther);
      for(int i=0; i<ArraySize(temp); i++){
         bool add=true;
         for(int k=0; k<ArraySize(arrdel); k++){
            if(arrdel[k]==temp[i]){
               add=false;
               break;
            }
         }
         if(add)AddToArr(temp[i],arrObjOther);
      }
   }
}
void AddToArr(string value, string &arr[]){
   int s=ArraySize(arr);
   ArrayResize(arr,s+1);
   arr[s]=value;
}


en este caso, tengo una matriz de nombres de objetos en mi código que no fueron creados por el programa (otros). En cuanto aparece otro objeto nuevo, borro todos los objetos creados por el programa (los míos) y los creo de nuevo. En este caso, los objetos propios siempre tendrán el índice más alto en la lista de objetos y, por tanto, estarán visualmente en primer plano. Pero también es necesario limpiar siempre el array de otros objetos, en caso de que se eliminen del gráfico, para que el array no crezca de forma incontrolada.

Si necesitas controlar tus objetos, es más fácil. Sólo hay que controlar los índices de los objetos.

 
Maksym Mudrakov:
Los objetos se muestran según el índice:

se deduce que visualmente el objeto con el índice más alto estará en primer plano.

Así es como salgo de esta situación:


En este caso, mi código tiene un array de nombres de objetos no creados en el programa (otros). En cuanto aparece otro objeto nuevo, borro todos los objetos creados por el programa (los míos) y los vuelvo a crear. En este caso, los objetos propios siempre tendrán el índice más alto en la lista de objetos y, por tanto, estarán visualmente en primer plano. Pero también es necesario limpiar siempre el array de otros objetos, en caso de que se borren del gráfico, para que el array no crezca de forma incontrolada.

Si quieres controlar tus objetos, es más fácil. Sólo hay que controlar los índices de los objetos.

Más arriba he mostrado lo que hay que hacer. ¿Por qué ir tan lejos cuando hay un método recomendado por el desarrollador?

 
Hola.

Quiero transferir el indicador ATP al gráfico de precios. Pero no sé cómo hacerlo. Quiero que muestre el máximo movimiento de volatilidad desde la línea media del mismo periodo. Si alguien tiene el código, gracias por compartirlo.
 
Hola! No sé por dónde empezar, ya que después de un mes de búsqueda en vano, mi cabeza estaba hecha un lío terrible. He decidido escribir un mensaje en este hilo. Si me estoy equivocando de lugar, lo siento. ¿Quizás alguien pueda decir en qué rama es mejor plantear este tema? El corazón de mi pregunta es: ¿Cuál es la mejor y más fácil manera de obtener datos en MT4 desde un sitio de terceros para la posterior visualización de esta información en un gráfico de símbolos utilizando Asesor Experto, indicador o un script? Por el momento estoy utilizando mi propio script que abre el archivo Book1.csv en la dirección "MT4 Data Directory"\MQL4\Files. Antes de ejecutar el script tengo que lanzar el navegador Chrome, ir a la página de recursos, seleccionar un símbolo en esta página, luego seleccionar el tipo de datos mostrados para este símbolo (la dirección de la página no cambia), después de mostrar los datos para este símbolo como una tabla con los valores de los parámetros en un rango limitado de niveles de precios, uso la extensión Table Capture para el navegador Chrome, copio los datos de la tabla en la página de recursos al portapapeles, luego abro Excel y pego los datos del portapapeles en la hoja Exel. Luego convierto los datos numéricos en Exel (sustituyendo las comas de los números por puntos) y guardo el archivo en formato csv en el directorio de datos del terminal. Y ya después de realizar este conjunto de acciones ejecuto el script. Obviamente, la función WebRequest no se ajusta a esta tarea, porque no hay datos en la dirección de la página especificada al principio (aparece después de seleccionar el instrumento y el tipo de datos). Agradecería a quien me pueda indicar la dirección correcta (obviamente, puede haber varias direcciones).
Razón de la queja: