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

 
Artyom Trishkin:

Arriba mostré lo que hay que hacer. ¿Por qué complicarse tanto cuando hay un método recomendado por los desarrolladores?

¿Se trata de elegir en qué plazos se mostrará el objeto y en cuáles no?

Digamos que hay un panel de operaciones en el gráfico. Luego construyo manualmente los objetos (niveles de operación, líneas verticales, rectángulos).

Todo lo que construya manualmente se aplicará al panel de operaciones. Todos los objetos están en el mismo marco temporal.

¿Y cómo ayuda el "método recomendado por los desarrolladores" en este caso?

 
Aliaksei Karalkou:
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.

https://www.mql5.com/ru/code/23304

Multi_ATR_Bands
Multi_ATR_Bands
  • www.mql5.com
Индикатор Three ATR Bands with multiple selection
 
Artyom Trishkin:

Propiedad OBJPROP_TIMEFRAMES:

OBJ_NO_PERIODS - no es visible en todos los períodos,

OBJ_ALL_PERIODS - visible en todos los períodos

Gracias.

El método resultó realmente eficaz y es muy compacto.

El objeto queda ahora visualmente por encima de todos los demás.

 
Maksym Mudrakov:

¿Se trata de seleccionar en qué plazos se muestra el objeto y en cuáles no?

Digamos que hay un panel de operaciones en el gráfico. Luego construyo manualmente los objetos (niveles de operación, líneas verticales, rectángulos).

Todo lo que construya manualmente se aplicará al panel de operaciones. Todos los objetos están en el mismo marco temporal.

¿Y cómo ayuda el "método recomendado por los desarrolladores" en este caso?

He tomado nota de tu sugerencia, pero he tenido parpadeos al borrar y volver a dibujar un objeto.

El método propuestopor Artyom Trishkin funciona de verdad.

Ahora no hay redibujado ni parpadeo del objeto y se mantiene visualmente por encima de todo.

Por cierto, en mi caso también era un panel de operaciones que estaba bloqueado por flechas de operaciones abiertas y cerradas.

Cómo resolví el problema:

// Глобальное объявление
int last_tick_objects = 0;                // количество объектов на прошлом тике
// имена графических объектов:
string tp_rctngl = "TP Rectangle";
string sl_rctngl = "SL Rectangle";
string vol_rctngl = "Volume Rectangle";

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   long cid = ChartID();
   if(ObjectsTotal() != last_tick_objects)  // количество объектов поменялось
     {
      last_tick_objects = ObjectsTotal();   // запоминаем новое количество объектов
      // выводим на передний план объекты: tp_rctngl, sl_rctngl, vol_rctngl
      if(ObjectFind(cid, tp_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, tp_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS);  // делаем невидимым на всех таймах
         ObjectSetInteger(cid, tp_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS); // делаем видимым на всех таймах
        }
      //---
      if(ObjectFind(cid, sl_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, sl_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS);  // делаем невидимым на всех таймах
         ObjectSetInteger(cid, sl_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS); // делаем видимым на всех таймах
        }
      //---
      if(ObjectFind(cid, vol_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, vol_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS); // делаем невидимым на всех таймах
         ObjectSetInteger(cid, vol_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);// делаем видимым на всех таймах
        }
      ChartRedraw(cid);// перерисовка графика для применения изменений
     }
  }
//+------------------------------------------------------------------+
 

Estoy escribiendo un EA que de vez en cuando necesita realizar varios ciclos largos de diferentes recálculos (por ejemplo, cada 12, 24, 48 horas). Cada uno de estos recálculos tarda entre 1,5 y 2 horas en un núcleo (es decir, en un hilo) y, naturalmente, el procesamiento de nuevos ticks y la negociación por parte de este EA están en pausa

... Estos cálculos pueden ser delegados a otro EA en otro hilo y los datos finales pueden ser transferidos entre EAs usandola función EventChartCustom y el manejador de eventos OnChartEvent


Pero necesito poder publicar el EA en el mercado, por lo que delegar los recálculos en el mismo hilo no es adecuado. ¿Existe un análogo de la biblioteca de hilos de C++ o alguna otra versión para implementar un EA tan específico en MQL5? (He introducido la palabra "hilo" con el filtro "documentación" en el buscador de la web y no hay nada).

 
Oleg Remizov:

He tomado nota de tu sugerencia, pero he tenido parpadeos al borrar y volver a dibujar un objeto.

El método propuestopor Artyom Trishkin funciona de verdad.

Ahora no hay redibujo ni parpadeo del objeto y se mantiene visualmente por encima de todo.

Por cierto, en mi caso también era un panel de operaciones que estaba bloqueado por flechas de operaciones abiertas y cerradas.

Cómo resolví el problema:

La cuestión es que el parpadeo se debe a que el borrado y el renderizado se producen muy a menudo, sólo hay que captar la aparición de nuevos objetos. Si el método funciona, por supuesto que también lo tendré en cuenta, pero como la documentación no menciona una propiedad tan útil, nunca le he prestado atención.

Aunque la pregunta sigue siendo si usted utiliza su propio panel de operaciones junto con un indicador de terceros que también construye objetos.

 
Maksym Mudrakov:

¿Se trata de elegir en qué plazos se mostrará el objeto y en cuáles no?

Digamos que hay un panel de operaciones en el gráfico. Luego construyo manualmente los objetos (niveles de operación, líneas verticales, rectángulos).

Todo lo que construya manualmente se aplicará al panel de operaciones. Todos los objetos están en el mismo marco temporal.

¿Y cómo ayuda el "método recomendado por los desarrolladores" en este caso?

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias

Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos

Oleg Remizov, 2020.04.26 14:44

Gracias.

El método ha demostrado ser realmente eficaz y muy compacto.

Ahora el objeto es visualmente más alto que todos los demás.


 
Maksym Mudrakov:

La cuestión es que el parpadeo se debe a que el borrado y el renderizado se producen muy a menudo, sólo hay que captar la aparición de nuevos objetos. Si el método funciona, por supuesto que lo adoptaré también, pero como la documentación no menciona una propiedad tan útil, nunca le he prestado atención.

Aunque la pregunta sigue siendo si usted utiliza su propio panel de operaciones en combinación con un indicador de terceros que también construye objetos.

El método recomendado por Slava era el único aceptable. Puedes buscar sus posts - está en su perfil - publicaciones/todos los posts.

Y, sí, ¿cómo ayuda tu método de recrear todos los objetos en la misma situación?

 
Artyom Trishkin:

Slava recomendó el método como el único más adecuado. Puedes buscar sus posts - está en su perfil - publicaciones/todos los posts.

Y, sí, ¿cómo ayudaría tu método de recrear todos los objetos en la misma situación?

Yo haría lo siguiente, con un indicador de terceros que necesita para realizar un seguimiento de ObjectsTotal(), y si el mayor índice de mi objeto de panel es menor que ObjectsTotal()-1, entonces recrear el panel. Necesito probar tu método en todo tipo de situaciones primero, pero hasta ahora no veo más libertad en el uso de la Visibilidad de Objetos.
 
Artyom Trishkin:

No puedo construir Meta Trader 5