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

 

Hola. ¿Pueden decirme cómo organizar un retraso en la ejecución? Para que después de una nueva vela, transcurran 10 segundos antes de que se realice la actualización.

#define   WM_COMMAND                    0x0111
#property indicator_chart_window
#import "user32.dll"
int RegisterWindowMessageA(string lpstring);
int PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
int New_Bar;
datetime Time_0;
#import
int start()
 {
     New_Bar=0;                   // Для начала обнулимся
  if (Time_0 != Time[0])          // Если уже другое время начала бара
      {
      New_Bar= 1;                 // А вот и новый бар
      Time_0 = Time[0];           // Запомним время начала нового бара
      PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, 0);
      PostMessageA (WindowHandle (Symbol(), 0), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1);
      } 
 return(0);
 }
 
Hola, por favor escriba el código con la condición de que si se elimina 1 objeto del gráfico, entonces el resto (una elección) se eliminará

Tengo otros objetos unidos a 1 objeto, y cuando se elimina este objeto, el resto se queda colgado en el gráfico
 
Dmitry Ivkin:
Hola, te pido que escribas un código con la condición de que si eliminas un objeto del gráfico, el resto (según lo que elijas) se elimine

Tengo otros objetos unidos a un objeto, y cuando elimino este objeto, el resto se queda colgado en el gráfico
Al crear objetos, utilizo prefijos, es decir, nombres que comienzan. Por ejemplo: ObjectCreate("777_a" ... ObjectCreate("777_z" y luego eliminar el grupo ObjectsDelete(0, "777_")
 
werter:

Hola. ¿Pueden decirme cómo organizar un retraso en la ejecución? Quiero esperar 10 segundos después de una nueva vela antes de ejecutar la actualización.

La forma más fácil es añadir Sleep(10000); después de Time_0 = Time[0]; y creo que la directiva #import inferior debería subir 2 líneas

 
STARIJ:

La forma más fácil es insertar Sleep(10000); después de Time_0 = Time[0]; y creo que la directiva #import inferior debe ser elevada 2 líneas más arriba

Sí, eso sería un Asesor Experto... No se puede en el indicador de sueño, por desgracia.
 
STARIJ:
En la creación de objetos utilizo un prefijo, es decir, el comienzo de un nombre. Por ejemplo: ObjectCreate("777_a" ... ObjectCreate("777_z" y luego borro el grupo ObjectsDelete(0, "777_")

Gracias por responder, no no entiendes, tengo otros objetos adjuntos al objeto, y si borras el indicador entonces todo es normal, pero si haces click derecho y borras entonces borras exactamente 1 objeto y necesitas todos los adjuntos, espero que entiendas)

 
Dmitry Ivkin:

Gracias por responder, no, no entiendes, tengo otros objetos adjuntos al objeto y si borras el indicador entonces todo está bien, pero si haces clic derecho y borras entonces se borrará 1 objeto y necesito todos los adjuntos, espero que entiendas)

Comprobar periódicamente(¿cada tick?) la presencia del objeto principal y eliminar los objetos hijos por el prefijo si está ausente
 
werter Sí, bueno, si fuera un experto... No se puede en el indicador de sueño, por desgracia.
datetime Time_0=0;

void ...
{
   if (Time_0 < TimeCurrent())
   {
      Alert(TimeCurrent());
      Time_0 = Time[0]+PeriodSeconds()+10; 
   }
 

Hace mucho tiempo que no escribo en MQL4, ahora necesito reescribir mi EA desde MQL5. El código que debe abrir 1 operación en el símbolo donde se encuentra el EA, ¿es correcto?

En el Probador de Estrategias se abren 2 operaciones por alguna razón

...
if(!Orderex(_Symbol))
{
   OrderSend(NULL,OP_SELL,lot,Bid,30,Bid+stop*Point,Bid-take*Point,NULL,magicf,0,clrRed);
}
...
bool Orderex(string symbol)
{
   for(int i=OrdersTotal(); i>0; i--)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==symbol && OrderMagicNumber()==magicf) return true;
      
      
      
      }


   return false;
}
 

Me encontré con otro matiz en el que no había pensado antes

1) Tenemos muchos Asesores Expertos instalados en los pares

2) Al abrir una orden por cualquier Asesor Experto con su propia configuración (algún EA abre 0.1 o 0.5, por ejemplo), este registro aparecerá en la línea de EAs

3) Se lee la línea "Expertos" y otros robots se borrarán si hay posiciones abiertas por más de x lotes.


La cuestión es cómo leerlo y procesarlo... no está incluido en los archivos de registro.