Discusión sobre el artículo "Guía paso a paso para escribir un Expert Advisor en MQL5 para principiantes" - página 13

 
Necesito ayuda no se puede arreglar un error en Expert Advisors, quiero escribir el tiempo para entrar en el mercado y salir para poder cambiar la configuración,
Archivos adjuntos:
 
michael sedgley:
Con todos los cambios en la programación MQL5 se necesita una versión actualizada de este código paso a paso, si copio este código ya no compila - ¿hay una versión con los últimos cambios - muchas gracias.

Hola Michael,

Gracias por tu comentario. Voy a mirar en su sugerencia y si cualquier actualización de los códigos son necesarios, se pondrá a disposición en breve.

 

¿por qué sale el código de error:10030?

Archivos adjuntos:
2.png  74 kb
 

ayuda, ¿Hay alguien aquí ?


¿Por qué sale el código de error:10030?

 

En primer lugar gracias por el artículo, me está ayudando a iniciarme en la programación en mql5.

He probado tu código y hay un poco de código en el OnInit() que no entiendo el propósito de la misma:

//--- Manejemos pares de divisas con precios de 5 o 3 dígitos en lugar de 4

STP = StopLoss;

TKP = TakeProfit;

if(_Digitos==5 || _Digitos==3)

{

STP = STP*10;

TKP = TKP*10;

}

Esta parte modifica los valores de los pibs take profit y stop loss causando una diferencia entre los valores de entrada y los que realmente se están utilizando.

Sin embargo, si elimino las dos líneas dentro del if, a menudo recibo el error 10016 (stops inválidos) al enviar la orden al servidor. El primer intento de colocar una orden va bien y recibo el 10009, pero luego la mayoría de las veces siguientes recibo un 10016. He depurado el EA, y todos los stop loss y take profit parecen estar bien con la diferencia de ser stop loss 30 o 300 y take profit 100 o 1000 pibs por encima o por debajo del precio actual.

No encuentro el motivo por el cual el servidor me da un error 10016 cuando el STP y el TKP no se multiplican por 10.

¿Alguien me puede explicar por qué se produce el error o el propósito de multiplicar por 10 cuando _Digits son 5 o 3?

Gracias por vuestra ayuda.

 
an you please guguqiaqia:

ayuda, ¿Hay alguien aquí ?


¿Por qué sale el código de error:10030?

Hola,

¿Puede decirnos cómo se produce el error?

 

eshelios.sr:


En primer lugar gracias por el artículo, me está ayudando a iniciarme en la programación en mql5.

He probado su código y hay un poco de código en el OnInit() que no entiendo el propósito de la misma:

//--- Manejemos pares de divisas con precios de 5 o 3 dígitos en lugar de 4

STP = StopLoss;

TKP = TakeProfit;

if(_Digitos==5 || _Digitos==3)

{

STP = STP*10;

TKP = TKP*10;

}

Esta parte modifica los valores de los pibs take profit y stop loss causando una diferencia entre los valores de entrada y los que realmente se están utilizando.

Sin embargo, si elimino las dos líneas dentro del if, a menudo recibo el error 10016 (stops inválidos) al enviar la orden al servidor. El primer intento de colocar una orden va bien y recibo el 10009, pero luego la mayoría de las veces siguientes recibo un 10016. He depurado el EA, y todos los stop loss y take profit parecen estar bien con la diferencia de ser stop loss 30 o 300 y take profit 100 o 1000 pibs por encima o por debajo del precio actual.

No encuentro el motivo por el cual el servidor me da un error 10016 cuando el STP y el TKP no se multiplican por 10.

¿Alguien me puede explicar por qué se produce el error o el propósito de multiplicar por 10 cuando _Digits son 5 o 3?

Gracias por vuestra ayuda.

Hola,

Primero por tu explicación, cuando has quitado esas líneas de código, te da error y cuando no has multiplicado los valores de stoploss/takeprofit por 10, ¿te da error? Esto creo que ha explicado que esas líneas de código son muy importantes.

Volviendo al artículo, explicaba que esas líneas de código son necesarias si estás utilizando un gráfico con pares de divisas de 5 dígitos decimales (0.XXXXX) o 3 dígitos decimales (0.XXX).

Así que aquí queremos asegurarnos de que nuestro EA funciona muy bien con todos los brokers.Dígitos o Digits()devuelve el número de dígitos decimales que determinan la precisión del precio del símbolo del gráfico actual. Para un gráfico de precios de 5 o 3 dígitos, multiplicamos tanto el Stop Loss como el Take Profit por 10.

Vea los ejemplos a continuación:

Precio de 5 cifras decimales

5 - Dígitos Decimales precio

3 - Precio con cifras decimales

3 - Precio de dígitos decimales

Espero haber respondido a su pregunta.

 
Samuel Olowoyo:

Hola,

¿Puede decirnos cómo se produce el error?

paso 1: descarga este código de ejemplo.

paso 2: compilarlo en mql5 .

paso 3: en mt5, abra el gráfico eurusd 1m, a continuación, haga clic en "auto trading".

paso 4:poner simbolo de ruptura en la linea de codigo 223,224 etc...

paso 5: haga clic en el boton de inicio de depuracion en mt5, entonces, mostrar este error.

 
 guguqiaqia:

paso 1: descarga este código de ejemplo.

paso 2: compilarlo en mql5 .

paso 3: en mt5, abra el gráfico eurusd 1m, a continuación, haga clic en "auto trading".

paso 4:poner simbolo de ruptura en la linea de codigo 223,224 etc...

paso 5: haga clic en el boton de inicio de depuracion en mt5, entonces, mostrar este error.

Hola,

Gracias por compartir sus pasos. Si puedo llevarte al código,

if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
{
   Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
}
else
{
   Alert("The Buy order request could not be completed -error:",GetLastError());    // line 223
   ResetLastError();                                                                // line 224
   return;

Por lo que yo sé, el código hizo lo que se supone que debe hacer. Usted obtuvo el error porque la orden que trató de colocar no tuvo éxito y eso es lo que la línea 223 se supone que debe hacer. Por favor, lea esto - https://www.mql5.com/es/docs/constants/errorswarnings/enum_trade_return_codes - para saber lo que significa el error. (En realidad, 10030 significa Invalidorder filling type ).

Para entender lo que el tipo de orden de llenado -ORDER_FILLING_FOK -

mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type  ( line 213 )

lea https://www.mql5.com/es/docs/consta nts/tradingconstants/orderproperties#enum_order_type_filling

Espero que esto haya respondido a su pregunta.

 

Hola Samuel,

He descargado el código, instalado y ejecutado y me di cuenta de que es la apertura de órdenes de compra y venta en su mayoría en cada vela que cumplen los criterios (Estoy usando H1 como marco de tiempo).

No depuración y se dio cuenta de alguna parte de los códigos no se activan. ¿Son capaces de ejecutar la EA correctamente con el código disponible para su descarga?

Archivos adjuntos:
screen.jpg  417 kb