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

 
Buenos días a todos.
Escribí un código simple en mql4 que abre una orden en un gráfico de minutos cada vez que el precio sube 30 pips desde el mínimo local más cercano. Después de abrir la orden, el mínimo local se convierte en el precio de apertura de la orden.
void OnTick()
{
if (Bid<LoU)
LoU=Bid;
//********************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
}
}

Lo que no me gusta de mi código..... Que tiene que ser ejecutado en casi cada tic. Puedo mejorar este código y no se ejecutará en cada tick, sino en casi cada vela de minuto. Esto significa que el programa tiene que hacer una gran cantidad de trabajo para encontrar el punto en el que se abre la orden.

Q:

¿Podría sugerir una estructura de lenguaje que me ayude a encontrar el punto de apertura de la orden mencionada en mi código sin intentar ticks o candelabros, o con un intento mínimo posible, es decir, que el programa emplee el menor tiempo posible en encontrar el punto de apertura.

Gracias por su ayuda.

 
ANDREY:
Buenos días a todos.
Escribí un código simple en mql4 que abre una orden en un gráfico de minutos cada vez que el precio sube 30 pips desde el mínimo local más cercano. Después de abrir la orden, el mínimo local se convierte en el precio de apertura de la orden.

Lo que no me gusta de mi código..... Que tiene que ser ejecutado en casi cada tic. Puedo mejorar este código y no se ejecutará en cada tick, sino en casi cada vela de minuto. Esto significa que el programa tiene que hacer una gran cantidad de trabajo para encontrar el punto en el que se abre la orden.

Q:

¿Podría sugerir una estructura de lenguaje que me ayude a encontrar el punto de apertura de la orden mencionada en mi código sin intentar ticks o candelabros, o con un intento mínimo posible, es decir, que el programa emplee el menor tiempo posible en encontrar el punto de apertura.

Gracias por la ayuda.

//+------------------------------------------------------------------+
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

Gracias por su ayuda.

Pero el resultado de mi código no es el mismo que el mío. Aquí está el resultado de mi código en GBPUSD en un gráfico de minutos durante un día del 04.01.2010 al 05.01.2010.
Este es el resultado de mi código

Y este es el resultado de su código

 
ANDREY:

Gracias por su ayuda.

Pero el resultado de mi código no es el mismo que el mío. Aquí está el resultado de mi código en GBPUSD en un gráfico de minutos durante un día del 04.01.2010 al 05.01.2010.
Este es el resultado de mi código

Este es el resultado de su código

Mostrar código OnInit()

 
MakarFX:

Muéstrame el código OnInit().

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }

Acabo de copiar tu código en el MetaEditor y obtuve el resultado, que está arriba.

Su código abre una orden y cuenta 30 pips hacia abajo (amarillo), y el mío cuenta hacia abajo (azul)

Gracias por su ayuda

 
ANDREY:

Acabo de copiar tu código en el MetaEditor y he obtenido el resultado anterior.

Gracias por su ayuda.

Necesito su código para entender el punto.

En tu código LoU cambia en cada tick si el precio baja, pero en el mío LoU cambia sólo después de abrir una operación.

 
MakarFX:

Necesito su código para entender de qué se trata.

En su código, el LoU cambia en cada tick si el precio baja, mientras que mi LoU cambia sólo después de abrir una operación.

Tienes 30 pips en el lado equivocado. He añadido una imagen al post anterior
Y mi código está en el primer post. Tan pronto como el precio ha pasado 30 pips desde el mínimo local *bottom-up* - abrir una orden. Y mi código abre el pedido exactamente como lo necesito. Pero quiero que pase un tiempo mínimo para ello.

De acuerdo en mi código LoU cambia en cada tick después de abrir cada orden. Sin ella, el programa no encontrará el mínimo local más cercano, a partir del cual deberíamos contar 30 pips. Estoy tratando de encontrar la solución, para que LoU no cambie en cada tick o en cada vela de minuto, pero las órdenes se abren en los mismos lugares donde mi código las abre.
 
ANDREY:

Acabo de copiar tu código en el MetaEditor y he obtenido el resultado anterior.

Su código abre la orden y cuenta 30 pips hacia abajo (amarillo), y el mío cuenta hacia abajo (azul)

Gracias por su ayuda

Mi error... reemplazar

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid-30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

Mi error... reemplazar

Gracias por su ayuda.
Lo hice. Abre un gran número de pedidos (27657 pedidos), entre los que se encuentran los que necesito

Esta es una captura de pantalla de los pedidos iniciales

 
MakarFX:

Mi error... reemplazar

Aquí está su código con la línea cambiada.

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
¿Cómo puedo hacer que el código abra sólo los pedidos requeridos?
Razón de la queja: