Preguntas "para" de los operadores de bicicletas - página 4

 

Simón,

Ok, déjame tratar de añadir el nivel de parada a la EA también sólo para una buena medida.

El nivel de congelación para el USDJPY es 0 y el nivel de parada es 30.

Supongo que 30 representa 3 porque el broker es de 5 dígitos. Intenté usar el MODE_SPREAD y recibí 20. Obviamente el spread en USDJPY no es 20 pero ;) 2.0. También se podría decir que 2 pips equivalen a 20 puntos.

Gracias.

 

Una pista para ti . . . .

 

Simón,

Esto parece ser un problema de selección de orden una vez más.

La función OrderClose() está tratando de cerrar una orden (no la orden del USDJPY). Está tratando de cerrar la orden en el gráfico EURUSD.

La función OrderPrint() ha sido previamente seleccionada antes de su ejecución y claramente se asemeja a su propósito como se pretende.

El color rojo que rodea el precio inválido debe indicar INCORRECTO.

El color verde que rodea el USDJPY debe indicar CORRECTO.

Así que si todo es cierto debo centrarme en el círculo rojo y seleccionar la orden antes de la ejecución de la función OrderClose().

Gracias.

 
WhooDoo22:


¿Qué es la oferta y la demanda?

El precio de venta es el último precio conocido del vendedor (precio de venta) del símbolo actual.

Bid es el último precio comprador conocido (precio de oferta, precio de compra) del símbolo actual.

Usted ya sabe la razón por la que el cierre falló... sólo piense cuidadosamente por un minuto.


Mira tu código, ¿qué precio utilizas para cerrar la orden?

 

Simon,

Ask/Bid es el último precio conocido del vendedor/comprador para el símbolo actual.

El precio al que el EA desea cerrar la orden es el precio del símbolo EURUSD.

¿Por qué el EA depende de estar situado en un gráfico de USDJPY para cerrar su orden? La función OrderSelect () estaba destinada a seleccionar el número de entrada y una vez seleccionado el número de entrada, el EA podría seleccionar

Aparentemente, el EA debe estar en el gráfico del símbolo USDJPY para cerrar órdenes en ese


Tacha todo lo que acabo de decir.

Esta es la solución. El error está en el tercer parámetro. Estoy considerando especificar el símbolo y LUEGO colocar la variable ask/bid dentro de su parámetro (ubicación 3er parámetro de la función OrderClose()). Esto debería eliminar cualquier oscuridad del pensamiento.

Gracias.

 
WhooDoo22:.

Esta es la solución. El error está en el tercer parámetro. Estoy considerando especificar el símbolo y LUEGO colocar la variable ask/bid dentro de su parámetro (ubicación 3er parámetro de la función OrderClose()). Esto debería eliminar cualquier oscuridad del pensamiento.

Gracias.

Bid y Ask son variables prede finidas y son relevantes SOLO para el gráfico actual en el que se encuentra el EA. Si quieres Bid o Ask para un símbolo diferente al del gráfico en el que se encuentra el EA no puedes utilizar las variables predefinidas Bid y Ask. Sin embargo, puedes utilizar MarketInfo() ;-)
 

Simon,

El error está en el tercer parámetro de la función OrderClose() porque ;) Ask/Bid es el último precio conocido del vendedor/comprador para el símbolo actual. Si "para el símbolo actual" significa el gráfico actual en el que está colocado el EA entonces esto puede ser un poco confuso. Debo recordar que MQL4 ha estado alrededor de un tiempo y tiene sus métodos únicos de ilustración y representación.

La solución es sustituir las variables predefinidas Ask/Bid por una alternativa como...

// solution 1.

MarketInfo("USDJPY",MODE_BID);

// solution 2.

MarketInfo("USDJPY",MODE_ASK);

¿Qué opinas de esto?


He añadido una versión de este EA que tiene la capacidad de imprimir la información de la orden del USDJPY y cerrarla independientemente del gráfico en el que esté colocada. Todavía no he confirmado si ha modificado el SL y el TP de la orden del USDJPY, pero lo confirmaré cuando lo verifique. El EA produce un error final que no debería ser difícil de resolver. Estoy trabajando en esto actualmente. Aquí hay una instantánea de la lectura del error:

error de billete no válido

Gracias.

Archivos adjuntos:
 
WhooDoo22:

Simon,

El error se encuentra en el tercer parámetro de la función OrderClose() porque ;) Ask/Bid es el último precio conocido del vendedor/comprador para el símbolo actual. Si "para el símbolo actual" significa el gráfico actual en el que está colocado el EA entonces esto puede ser un poco confuso. Debo recordar que MQL4 ha estado alrededor de un tiempo y tiene sus métodos únicos de ilustración y representación.

La solución es sustituir las variables predefinidas Ask/Bid por una alternativa como...

¿Qué dices a esto?


He añadido una versión de este EA que tiene la capacidad de imprimir la información de la orden USDJPY y cerrarla independientemente del gráfico en el que se coloque. Todavía no he confirmado si ha modificado el SL y el TP de la orden del USDJPY, pero lo confirmaré cuando lo verifique. El EA produce un error final que no debería ser difícil de resolver. Estoy trabajando en esto actualmente. Aquí hay una instantánea de la lectura del error:


Gracias.

Y ahora ves las limitaciones de tu código . . ya no tienes una orden de USDJPY, por lo que tu while encuentra la orden en la posición 0 y no es USDJPY, luego encuentra la siguiente en la 1 y no es USDJPY luego mira la posición 2 y el OrderSelect() falla, esto termina el while pero el resto del código se ejecuta entonces, esto da un OrderModify() fallado, un OrderPrint() fallado, un OrderType() fallado y un OrderClose() fallado . . ¿qué está haciendo ese GetLastError() por su cuenta?
 

Simon,

El operador de ciclo 'while' se ejecuta como tal: Si la expresión es verdadera, el operador se ejecuta hasta que la expresión sea falsa. Si la expresión es falsa, el control se dará al siguiente operador.

El propósito del código en el cuadro SRC de abajo, es hacer lo siguiente:

Mientras la variable 'i' (contenida dentro de la función OrderSelect() ) NO es elnúmero de posición del billeteUSDJPYY el símbolo de la orden no es USDJPY, la variable 'i' se incrementa hasta que la variable 'i' ES el número de posición del billete USDJPY Y el símbolo de la orden ES USDJPY. Una vez que el ciclo 'while' se convierte en falso, el control se pasa a continuación, a la siguiente línea de código.

Proporcioné el encabezado y el cuerpo del 'while' como ayuda visual.

while(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!="USDJPY")

i++;

Creo que entiendes cómo el ciclo 'while' localiza una entrada en el par de divisas USDJPY incluso sin que haya una entrada en el par de divisas pero ;) Me temo que no.

¿Cómo puede el ciclo 'while' localizar una entrada en el gráfico de USDJPY si no hay una orden en el gráfico de USDJPY para localizar?

Creo que escribiste algo en la línea de localizar la orden en la posición 0. ¿Puedes exponer esto o posiblemente proporcionar un enlace para el estudio?

Gracias.

 
WhooDoo22:


Creo que entiendes cómo el ciclo 'while' localiza una entrada en el par de divisas USDJPY incluso sin que haya una entrada actualmente en el par de divisas pero ;) Me temo que no.

¿Cómo puede el ciclo 'while' localizar una entrada en el gráfico del USDJPY si no hay una orden en el gráfico del USDJPY que localizar?

Creo que escribiste algo en la línea de localizar la orden en la posición 0. ¿Puedes exponer esto o posiblemente proporcionar un enlace para el estudio?

Si quieres escribir código por ti mismo, entonces necesitas realizar la tarea de 3 personas, tal vez incluso 4. La persona que redacta el documento de requisitos, el ingeniero de software y el ingeniero de pruebas. No basta con conocer la sintaxis al revés y ser capaz de escribir código . . debes entender el problema que estás tratando de resolver y cómo vas a resolverlo, y también debes saber cómo probar el código para asegurarte de que cumple con el requisito.

En un nivel básico esto significa ir a través de su código línea por línea y asegurarse de que hace lo que usted quería hacer, comúnmente esto es con un rango de valores para cada variable que va desde su valor mínimo, a través de los valores típicos al valor máximo.


Hagamos esto con tu bucle while. . .

Cuando declaras una variable int sin establecer su valor tiene un valor inicial de 0, así que cuando declaras i (¿por qué no usar un nombre de variable que sea más descriptivo?¡) tiene un valor de 0, por lo que la primera vez que se ejecuta el bucle whilei es 0, por lo que OrderSelect() intenta seleccionar la orden en la posición 0 si eso funciona su llamada a OrderSymbol() devolverá el nombre correcto del símbolo de la orden en la posición 0 y si no es "USDJPY" entonces la expresión(OrderSymbol() !="USDJPY") dará comoresultado un valor verdadero , si el OrderSelect() es verdadero y la comprobación del símbolo es verdadera,verdadero y verdadero =verdadero y se ejecuta la siguiente línea de código ( esto es dentro del bucle while ).

Ahorai es 1 , el OrderSelect() selecciona la orden en la posición 1 por lo que resulta en un valor de true, el symbol check no encuentra un símbolode USDJPY por lo que devuelve true, de nuevo true y true = true
porlo que i++ se ejecuta de nuevo

Ahorai es 2 , el OrderSelect() intenta seleccionar la Orden en la posición 2 pero falla . . sólo hay 2 órdenes abiertas, en las posiciones 0 y 1, por lo que OrderSelect() devuelve false, ¿qué hace OrderSymbol() ? no hay ninguna orden válida seleccionada . . pero aunque devuelva true por alguna extraña razón, el OrderSelect() ya ha devuelto false,false y true = false . . el bucle while ha terminado yi está puesto en 2

Ahora trabaja con el resto del código teniendo en cuenta quei tiene un valor de 2.