Error nº 1 al modificar los pedidos - página 5

 
borilunad:

Víctor, ¿por qué has modificado el SL y el TP en las posiciones pendientes? En general, tiene sentido fijar el SL sólo después de abrir una posición, y el TP después de la transferencia del SL al B/S. Entonces, ¿por qué molestar tanto al servidor para nada y por qué hay que pasar por todas estas molestias?

Debemos minimizar y simplificar el código, para que funcione de forma rápida y clara, ¡y luego será más fácil retocarlo por los caprichos del mercado! Tenga en cuenta todos los matices de la realidad del mercado.

También pongo un stop loss en las órdenes pendientes, por si la conexión se interrumpe o algo me impide establecer un stop más preciso (desde el punto de vista del sistema) después de que la orden se dispare.

Si todo está bien, después de que la orden se dispare, pongo un stop en el nivel adecuado.

 
Stells:

También pongo un stop loss en las órdenes pendientes de forma inmediata, por si la conexión se interrumpe o algo me impide poner un stop más correcto, desde el punto de vista del sistema, después de que la orden se haya disparado.

Si todo está bien, después de que la orden se dispare, pongo un stop en el nivel adecuado.

¡En esto tienes razón, si según el TS pones tu SL cerca del precio de apertura! Pero modificar el precio de apertura, el SL y el TP varias veces no es razonable, gasta tanto esfuerzo y complica el código, ¡no vale la pena!
 

Victor, si lo necesitas tanto, ¡puedes hacerlo más fácil! Compruebe sólo el precio de apertura, y marque el SL y el TP de la misma manera que lo hace cuando establece una orden pendiente con SL y TP.

¡Eso significa que para el SL escriba Ask-SL o Bid+SL, y para el TP, respectivamenteAsk+TP o Bid-TP! Pruébalo, debería funcionar bien. Así que nada es imposible. :)

 
borilunad:

¿Quiere la función Modify()?

Yo no diría que no. E incluso estoy esperando en algún lugar... Desde anoche.

keekkenen:
el código parece estar bien... pero en real (no en la demo) funciona ?
Sí. En muchos EAs en los que no he tenido que modificar 3 parámetros de entrada a la vez funciona. Tenga en cuenta que he descargado una variante para el probador y también hay una variante para el mundo real.

borilunad:

Víctor, ¿por qué empezaste a modificar el SL y el TP en las órdenes pendientes? ¡En general, tiene sentido establecer el SL sólo después de abrir una posición y el TP después de que el SL se mueva a B/B! Entonces, ¿por qué molestar tanto al servidor para nada y por qué hay que pasar por todas estas molestias?

Debemos minimizar y simplificar el código, para que funcione de forma rápida y clara, ¡y luego será más fácil retocarlo por los caprichos del mercado! Piense cuidadosamente en todos los matices relacionados con las realidades del mercado.

Boris, si según la documentación se pueden modificar 3 parámetros simultáneamente, ¿por qué no utilizarlo? Después de todo, ¡es conveniente! Sin embargo, quiero que esta opción funcione correctamente, si esta característica se especifica en la documentación. Si no lo es, debemos escribir que no es posible. Entonces la pregunta desaparecerá por sí sola.
 
borilunad:
¡En esto tienes razón, si según el TS pones tu SL cerca del precio de apertura! Pero modificar el precio de apertura, el SL y el TP varias veces no es razonable para perder tanto esfuerzo y complicar el código, ¡no vale la pena!

Boris, ¿quién dice que estoy golpeando el servidor con demasiada frecuencia? No estaba hablando del sistema de comercio. Hay diferentes variantes. A veces sólo se mueve STOP, a veces también se mueven STOP y TAKE. Se trata de diferentes variantes. Pero en este caso, en mi caso, las paradas se mueven cada varias horas de media. O una vez cada hora. ¿Es eso mucho complica ¿Código?

Por el contrario, el código se convierte... más sencillo. Llamas a una función de modificación... poner 3 parámetros en él y modificarlo... En el mejor de los casos, sin contar ningún fallo en el terminal.

Pero si no lo hace. Luego tendremos que modificar el PRECIO DE APERTURA, luego se cumplen las condiciones... el precio de STOP, y después de que se cumplan algunas condiciones o haya pasado algún tiempo, tendremos que modificar el precio de TAKE. ¿Esto es como Simplificando ¿Código?

 
hoz:

No diré que no. E incluso estoy esperando en algún lugar... Así que desde anoche.

Sí. En muchos EAs en los que no he tenido que modificar 3 parámetros de entrada a la vez funciona. Tenga en cuenta que he descontado la versión para el probador, y también hay para el real.

Boris, si según la documentación se pueden modificar 3 parámetros simultáneamente, ¿por qué no utilizarlo? Después de todo, ¡es conveniente! Sin embargo, quiero que esta opción funcione correctamente, si esta característica se especifica en la documentación. Si no lo es, debemos escribir que no es posible. Entonces la pregunta desaparecerá por sí sola.

¡Víctor, echa un vistazo a mi siguiente post en el que te doy la idea de comprobar sólo el precio de apertura y reajustar el SL y el TP a partir del precio sin ningún problema!

¡Y voy a publicar la función ahora! ¡También "esperé" en algún lugar que respondieras ayer! Seremos más simples.

#include <stderror.mqh>//штатные инклюдники, чтобы 
#include <stdlib.mqh>  //вызывался ErrorDescription()



//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3) {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0) { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }

Si tiene alguna duda, pregunte, ¡no espere hasta mañana! ;)

¡La función es universal, sirve para cualquier modificación con posiciones pendientes y abiertas! Buena suerte.

Justo ahora, como ayer, ¡voy a almorzar! Todo lo mejor.

 
borilunad:

¡Voy a publicar la función ahora! ¡Yo también estaba esperando en alguna parte que respondieras ayer! Hagámoslo sencillo.

Si tiene alguna pregunta, no espere hasta mañana. ;)

¡La función es universal, sirve para cualquier modificación con posiciones pendientes y abiertas! Buena suerte.

¿Qué pasa con los controles de parada y frizzle? ¿O no es necesario hoy en día? :) Con respecto a su código de función, estoy de acuerdo. Es simple y sencillo. Pero los cheques... no están ahí. ¿Por qué no?

Me voy a cenar:

Justo ahora, como ayer, ¡vamos a almorzar! ¡Todo!

Quién está almorzando y quién está ya cenando a esta hora...
 
hoz:

¿Cómo puedo deshacerme de este maldito error? Estoy harto. Estoy comprobando cada parámetro de entrada de la función. Para mí, en este momento, es así:

Es decir, si el parámetro no ha sido modificado, no es necesario cambiarlo. No lo he hecho antes, pero he decidido...

A continuación, los parámetros se pasan al método de modificación de la orden de la siguiente manera:

Nw salida en el registro:

Entonces, el diario nos notifica, como modificación: OK, pero luego un error. Ninguno de los parámetros ha cambiado.

La orden está pendiente. Así que podemos cambiar el precio de apertura, de parada y de toma. Y esto, según tengo entendido, no contradice la documentación.

¿Quién se ha encontrado con algo así? ¿Cómo solucionarlo?

Quita lo demás.
 
hoz:

Boris, ¿qué pasa con las comprobaciones de Stopplevel y Frizzlevel? ¿O es que eso no es necesario hoy en día? :) En cuanto a su código de función... estoy de acuerdo. Es simple y sencillo. Pero los cheques... no están ahí. ¿Por qué no?

Quién está almorzando y quién está ya cenando a esta hora...

Todas las comprobaciones se hacen antes del bucle, que tiene condiciones relativas a cada tipo y una llamada a esta función, que sólo comprueba los errores de Modify():

            ModifyOrder(OrderTicket(),OOP,SL,0,0,clrBlue); return(0);

Cualquier otra cosa, pregunta, pero ahora me voy a cenar. ;)

 
¿Cómo ha votado?
Razón de la queja: