Ayuda: Por qué el EA no cierra una operación - página 2

 
crossy:


Gracias onewithzachy,

Primero creo que tienes un pequeño error con:

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

Tienes que añadir la corrección en verde y en negrita.

Pero, no entiendo en qué nos puede ayudar la siguiente línea

#include "..\Nbibliotecas\Nstdlib.mq4"

Gracias.

Tienes razón con lo de la cuenta, sin embargo, si lo escribimos como yo, el OrderSelect() devolverá false, y el bucle for continuará con la siguiente cuenta.

Ese include imprimirá el error en este código ...

Print("failed to close buy position ", ErrorDescription(GetLastError())  ); 

.. para que sepamos por qué tu EA no cierra ninguna orden :(.

También puedes escribir ese include así ...

#include <stdlib.mqh>

Hay un ejemplo en la carpeta de scripts del MetaEditor titulado trade.mq4.


Supongo que sabes dónde poner el include, ¿verdad? Póngalo en la parte superior de su EA (al igual que la variable global o al igual que el trade.mq4).

El stdlib.mq4 se encuentra en MetaEditor > Ventana del Navegador (Ctrl + D) > pestaña de archivos > carpeta de bibliotecas > stdlib.mq4.

Vaya, espero que no te importe que me haya explayado, porque no sé si ya lo sabes o no lo sabes :)

 
onewithzachy:

Tienes razón con lo de la cuenta, sin embargo, si lo escribimos como yo, el OrderSelect() devolverá false, y el bucle for continuará con la siguiente cuenta.

Ese include imprimirá el error en este código ...

.. para que sepamos por qué tu EA no cierra ninguna orden :(.

También puedes escribir ese include así ...

Hay un ejemplo en la carpeta de scripts del MetaEditor titulado trade.mq4.


Supongo que sabes dónde poner el include, ¿verdad? Póngalo en la parte superior de su EA (al igual que la variable global o al igual que el trade.mq4).

El stdlib.mq4 se encuentra en MetaEditor > Ventana del Navegador (Ctrl + D) > pestaña de archivos > carpeta de bibliotecas > stdlib.mq4.

Vaya, espero que no te moleste que haya entrado en detalles, porque no sé si ya lo sabes o no lo sabes :)


Gracias onewithzachy,

Hice lo que me sugeriste, y espero la stuación correcta. Voy a actualizar.

 
crossy:


Gracias onewithzachy,

Hice lo que me sugeriste, y espero la stuación correcta. Voy a actualizar.

Mmm...., no soy un gran fan de la prueba de espalda, sin embargo, RaptorUK sugerir en otro hilo(haga clic aquí), que podemos depurar nuestro código utilizando backtesting.
 
onewithzachy:
Mmm...., no soy un gran fan de las pruebas de espalda, sin embargo, RaptorUK sugerir en otro hilo(haga clic aquí), que podemos depurar nuestro código utilizando backtesting.


El EA es multipares, por lo que el backtesting es imposible.

De todos modos, puedo obtener la situación pertinente muy rápidamente. Y ya tengo resultados. Voy a actualizar ..

Gracias

 
crossy:


El EA es multipares, por lo que el backtesting es imposible.

No backtesting. . depuración . . incluso con una cartera basada en la depuración de EA todavía puede ser posible.
 

Gracias Raptor,

Me he dado cuenta de que el ORDERSELECT es una variable bool, y a veces el MT4 no consigue

hacerlo. Por eso onewithzachy recomendó hacerlo:

for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
if(OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true &&
OrderSymbol()==Pair &&
OrderType()==OP_BUY)
{
// código para cerrar
}
}

Mi pregunta es: si el ORDERSELECT es falso como puedo hacer el LOOP "cnt" de nuevo, sin que se pierda...?

Espero que me entiendan.

Y.

 
crossy:

Gracias Raptor,

Me he dado cuenta de que el ORDERSELECT es una variable bool, y a veces el MT4 no consigue

hacerlo. Por eso onewithzachy recomendó hacerlo:

for(int cnt=0; cnt<OrdersTotal(); cnt++ )

Mi pregunta es: si el ORDERSELECT es falso ¿cómo puedo hacer el LOOP "cnt" de nuevo, sin que se pierda...?

Espero que me entiendan.

Y.

Si estás cerrando Órdenes debes contar hacia abajo... NO hacia arriba.
 
RaptorUK:
Si estás cerrando Órdenes debes contar hacia abajo... NO hacia arriba.


Lo siento Raptor, acabo de hacer un Copy_paste de un post anterior, pero lo he cambiado dentro de mi código.

De todos modos, ¿tiene usted alguna idea sobre mi pregunta previa?

 
crossy:


Lo siento Raptor, acabo de hacer un Copy_paste de un post anterior, pero lo cambié dentro de mi código.

De todos modos, ¿tienes alguna idea sobre mi pre pregunta?

Muestre su código y puedo dar una opinión.
 
RaptorUK:
Muestra tu código y podré opinar.


Rap, son 4016 líneas de código....

De todos modos, mi pregunta es técnica. Una vez aprendí FORTRAN, y allí tenías números para las líneas de código deseadas, así que podías hacer

"GO to 120", y el código volvía a esa línea.

Aquí si Orderselect es FALSE cómo el EA puede volver a la línea de código: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

???