[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 188

 
Pero no sé cómo borrar una orden pendiente si el pentamino fue menor a 30 pips.
 
hoz:

Sí, ¿y qué?

Hay una serie de limitaciones cuando se trabaja en modo de visualización
 

¿Qué he hecho mal? !!!!

Se me ocurrió esta solución a mi problema

int start()
  {
     double Price=Ask+300*Point;    
     double SL=Price-300*Point;    
     double TP=Price+150*Point;
     bool New_Bar;
                          
     if (Time[0])                                                                           //   если образовался новый бар               
         int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP ); //   выставить отложенный ордер
     return ;
     Fun_New_Bar();                                                                      
     if ( New_Bar==true)                                                // если образовался следующий бар
        OrderDelete(Ticket);                                          // удалить отложенный ордер
  
//+------------------------------------------------------------------+
     void  Fun_New_Bar();                            //НО ПО ОТНОШЕНИЮ К ЭТОЙ СТРОКЕ КОМПИЛЯТОР ПИШЕТ ОШИБКУ       '(' - function definition unexpected  
       {                                                                           
          static datetime New_Time=0;
          New_Bar=false;
                                
         if( New_Time!==Time[0])                       
            New_Time=Time[0];                         
         New_Bar=true;                             
      }

/* lo siento, he cambiado ligeramente el post - para que el Vinin sea legible */

 
Gracias por su preocupación. ¿Qué botón debo pulsar para obtener el código en este formato?
 
solnce600:

¿Qué he hecho mal? !!!!

Se me ocurrió esta solución a mi problema

/* lo siento, he cambiado un poco el post - para que el Vinin sea legible */

Esta línea
 if (Time[0])

significa: "si el tiempo de la última barra no es cero". Por lo tanto, siempre no es igual a cero.

Además, la variable

bool New_Bar;

se define dentro de la función start(), por lo que no será visible dentro de otras funciones. Además, la función Fun_New_Bar() que intentaste definir dentro del cuerpo de start(), no puedes hacerlo en MQL, todas las funciones deben ser declaradas a nivel de módulo global. La declaración de New_Bar también debería colocarse ahí.

 

Además, durante una ejecución de la función start() (si no está en bucle), no se puede definir la formación de la barra y luego esperar a la formación de la siguiente barra: start() por definición se llama y termina en cada tick (con matices, pero en general es así).

Aconsejo releer la ayuda y eliminar las lagunas en la ejecución del programa MQL, y ver un ejemplo de escritura de un programa en bucle, no en bucle también.

 
solnce600:
Gracias por su atención. ¿Qué botón debo pulsar para obtener el código en este formato?

SRC----------------------------\|/

--------------------------------------- V

 
Tiene derecho.
 
alsu:
Esta línea
 if (Time[0])

significa: "si el tiempo de la última barra no es igual a cero". Por lo tanto, siempre no es igual a cero.


Gracias, pero no entiendo dónde está el "NO" en esta línea. La no igualdad se indica con el símbolo !==.

Lo que quería decir es que en cuanto aparece la hora de apertura de una nueva barra, es decir, aparece una nueva barra, se abre la orden.

Y este es efectivamente el código que abre una orden en la apertura de cada cinco barras

 int start()

  {
 double Price=Open[0]+300*Point;	
 double SL=Price-300*Point;	
 double TP=Price+150*Point;
 if (Time[0])                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
  

 
 }


 

Decidí tomar lo que me pareció una ruta más sencilla.

No eliminar la orden pendiente - sino colocar la orden pendiente sólo si la vela de cinco minutos no ha terminado

Es decir, la orden pendiente debe colocarse sólo cuando se cumplan dos condiciones. Si se cumple la primera condición

 if (Time[0])

- Lo he comprobado, el orden está establecido.

Cómo debo establecer la segunda condición, es decir, establecer una orden pendiente sólo si no han pasado aún 5 minutos. if (---------- && ?????????)

int start()

  {
 double Price=Open[0]+300*Point;    
 double SL=Price-300*Point;     
 double TP=Price+150*Point;
 
  
 
 
                          
   if (Time[0]&& ?????????  )                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
 return(0);
 
  }