Pregunta OrderModify()

 

Hola foro MQL4,

{OrderModify(ticket,0,Ask-500*Point,0,0,Blue);}}}}

El código anterior funciona, pero mueve el sl hacia arriba o hacia abajo como el precio de venta se mueve hacia arriba o hacia abajo.

He probado esto, como solución...

{OrderModify(ticket,0,OrderOpenPrice()-500*Point,0,0,Blue);}}}}

(la orden seleccionada es una orden de compra)

He comprobado en el diario el error que se recibe y pone 4051. Hay múltiples errores 4051. Básicamente no funciona, y tengo curiosidad por saber si alguien ha solucionado antes este problema y tiene una explicación.

No veo por qué esta solución no funcionaría (sí, creo que estoy seleccionando correctamente el pedido porque la primera solución incorrecta de OrderModify está funcionando).

Gracias.

 
WhooDoo22:


He comprobado en el diario el error recibido y pone 4051. Hay múltiples errores 4051. Básicamente no funciona, y tengo curiosidad por saber si alguien ha resuelto este problema anteriormente y tiene una explicación.

Cuando tengas un problema con una función lee la documentación de esa función... OrderModify()<----- Click ME ! ¡! ¡!

No puedes modificar el precio de apertura de la orden a 0,0. . . suponiendo que hayas realizado correctamente un OrderSelect(), utiliza OrderOpenPrice() para el 2º parámetro que pasas a OrderModify()

 

Simon, he leído la documentación de la función OrderModify() y me he dado cuenta de que el ejemplo que se utiliza es un trailing stop. No deseo utilizar un trailing stop para el EA. Esto se debe a que si utilizo un trailing stop, (según el ejemplo) el EA necesitaría que el mercado viajara x puntos por encima del sl actual para modificar el sl al precio especificado. Básicamente esto es demasiado complicado. Sólo quiero añadir un stop loss a la orden DESPUÉS de que la orden haya sido enviada al mercado.

De todos modos, estoy probando nuevas soluciones actualmente también.

Gracias.

 
WhooDoo22:

Simon, he leído la documentación de la función OrderModify() y me he dado cuenta de que el ejemplo que se utiliza es un trailing stop. No deseo utilizar un trailing stop para el EA. Esto se debe a que si utilizo un trailing stop, (según el ejemplo) el EA necesitaría que el mercado viajara x puntos por encima del sl actual para modificar el sl al precio especificado. Básicamente esto es demasiado complicado. Sólo quiero añadir un stop loss a la orden DESPUÉS de que la orden haya sido enviada al mercado.

De todos modos, estoy probando nuevas soluciones actualmente también.

Gracias.

Entonces, ¿por qué está tratando de cambiar el precio de apertura a 0,0? necesita dejar el precio de apertura sin cambios, es decir, OrderOpenPrice() probarlo....
 

Simon,

probador de estrategias:

1. 2. Modo visual

2. Velocidad 31

3. 2010.12.29

4. EURUSD

5. M15

ejecute"Sólo precios abiertos", no todos los ticks.


MetaEditor: Editar -> Buscar... -> "// elección 1."


opción 1. = no hay errores, pero obviamente no quiero esto.

opción 2. = pestaña Diario -> Diario lee: "error 4051".

Gracias.

Archivos adjuntos:
test1.mq4  12 kb
 

Evidentemente, el uso de la función OrderOpenPrice() dentro de los parámetros de OrderModify() se considera un "parámetro de función no válido" según el error 4051. Estoy pensando "?". :) Podría guardar el valor de OrderOpenPrice() e incluirlo en los parámetros de la función OrderModify para hacer lo que deseo, pero realmente... Seguro que hay una forma más sencilla. Vuelvo a la rutina para mí ;)

Gracias.

 
WhooDoo22:
Evidentemente, el uso de la función OrderOpenPrice() dentro de los parámetros de OrderModify() se considera un "parámetro de función no válido" según el error 4051.
Evidentemente, su código es incorrecto. OrderOpenPrice() está bien. Publique el código incluyendo su OrderSelect.
 

William,

Evidentemente, publiqué el EA en un enlace para que lo descargues y lo veas en el MetaEditor si deseas dar tu apoyo. La función OrderSelect( ) no es actualmente un problema. ¿Sabe qué? Voy a publicar esto sólo para ti, William.

//***************************************************
// EMERGENCY BUY ORDER STOP LOSS PROTECTION SECTION ;
//***************************************************

   OrderSelect(0,SELECT_BY_TICKET,MODE_TRADES); // was ticket.
   if(OrdersTotal()>0)                                                                         {
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderSend1==true)                                                                        {
//   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<=OrderOpenPrice()-500*Point)                     {
     
// choice 1.     
//     {OrderModify(ticket,OrderOpenPrice(),Ask-500*Point,0,0,Blue);}}}}
// choice 2.
     {OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice()-500*Point,0,0,Blue);}}}}

Como usted pidió.

Gracias.

 
WhooDoo22:

William,

Evidentemente, publiqué el EA en un enlace para que lo descargues y lo veas en el MetaEditor si deseas dar tu apoyo. La función OrderSelect() no es actualmente un problema. ¿Sabe qué? Voy a publicar esto sólo para ti, William.

Como usted pidió.

Gracias.

El 0 NO es un número de entrada válido, ni siquiera en el Probador de Estrategias, prueba tu OrderSelect() y lo verás por ti mismo....
 

Simon, haré pruebas para averiguarlo.

Gracias.

 

Ah-ha! Cambié el ticket número 0 por el 1, entonces todo funcionó como un reloj. Sí, me equivoqué William... La función OrderSelect () era un problema. Obviamente, la función OrderSelect() debe seleccionar un ticket. Si el número de ticket es 0, ¿qué ticket seleccionará el EA? :O "?". Gracias a ambos por su ayuda.

Gracias.