Metatrader 4 ... Operador return()

 

Publi

... Operador return()

 

Publi

Página 1 de 3 123 ÚltimoÚltimo
Resultados 1 al 10 de 26


  1. #1
    Avatar de Vinisius
    Erectus


    Reputación:
    Poder de reputación: 12

    Espana
    Mensajes: 312
    Créditos: 126

    Re: ... Operador return()


    Publi
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------


    Hola indovinello y robertomar.

    Gracias por vuestras ayudas.

    He probado de poner en la primera declaración de la variable int gi_196 = 1 y bool gi_196 = FALSE y bool gi_196 = TRUE y al compilar no dá error en ninguno de estos casos.

    Pero .... también he puesto int gi_196 = 2 y int gi_196 = 3 y bool gi_196 = 2 y bool gi_196 = 3 .... y tampoco me sale error al compilar.

    ¿No debería salirme error fuera del valor 0 y 1 ?. osea en 2 y 3 debería haberme dado error , ¿no?.

    Gracias.
    Foro de Forex Trading United

  2. Publi
    Publi


  3. #2
    Avatar de indovinello



    Reputación:
    Poder de reputación: 24

    Bolivia
    Mensajes: 3.773
    Créditos: 12.975

    Re: ... Operador return()

    Cita Iniciado por Vinisius Ver mensaje
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    jajaja claro.


    Pero ya que estábamos ...


    Muchaaaaaaaaaas gracias a ti y a robertomar.

    Por cierto, ¿ sabeis de algún programador que sepa cambiarme lo que hace este robot al llegar a la última progresion, que en vez de abrirme una operacion de sentido contrario con los mismos lotajes , simplemente me ponga un stop loss y no meta esa operación contraría ?. Y que además sepa ponerme nombre a las variables o al menos a la mayoría de ellas para que se entiendan ?.

    Saludos.
    Alguien que trabaje en los grupos, igual te podría ayudar, sin embargo vamos muy cargados de trabajo.

    Luisfx (moderador) conoce también programadores y demás, igual te puede hechar una mano.

    Saludos.
    Foro de Forex Trading United




  4. #3
    Avatar de indovinello



    Reputación:
    Poder de reputación: 24

    Bolivia
    Mensajes: 3.773
    Créditos: 12.975

    Re: ... Operador return()

    Cita Iniciado por Vinisius Ver mensaje
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    Buenas a tod@s.


    LLevo ya unas cuantas semanas estudiando el código MQL4 para intentar aprenderlo.
    Salve decir que nunca he estudiado programación de ningún tipo por lo que la pregunta o cuestión que voy a plantear seguramente les resultará a la mayoría de Ustedes irrisoría pero les aseguro que para mí no lo es.

    Mi duda es sobre el operador return().

    Simplemente quería preguntaros si hay alguna diferencia entre:

    return;
    return();
    return(0);

    A mi me parece que son lo mismo pero he pensado que mejor preguntarlo que no cuesta nada.

    También he leído por ahí, aunque en ingles y medio entendiéndolo, que return(0) retornaría false y return(1) retornaría true. Pero me parece que no es así, y lo abre entendido mal.


    A ver si podeis echarme una mano , please.

    Gracias.

    Toda función debe devolver un valor de acuerdo con el tipo de la misma. Por ejemplo:

    int MiFuncion()

    Debe devolver un entero en todos los casos.

    Al utilizar la sentencia return dentro del código de la función estás indicando que quieres salir de la misma y, entre paréntesis especificas el valor. Por tanto, mejor especificarlo, el código es más claro.

    Ahora bien, el lenguaje permite ciertos atajos como los que indicas como son que un return, si va sin valor, devuelve un valor por defecto o bien, diferentes tipos de cast como es el caso de funciones lógicas que has mencionado que devuelven valores como 0 ó 1.

    Saludos.
    Foro de Forex Trading United




  5. #4
    Avatar de Vinisius
    Erectus


    Reputación:
    Poder de reputación: 12

    Espana
    Mensajes: 312
    Créditos: 126

    Re: ... Operador return()

    Muchas gracias robertomar.


    Osea si declaro una variable tipo boleana la puedo referenciar con true o false o 0 o 1.

    ¿ Pero indistintamente ?. Quiero decir:

    Declaro variable tipo boleano .... bool prueba=FALSE.

    Luego en el código puedo ponerle su valor numérico, por ejemplo cambiarle el valor de FALSE a true ... prueba=1
    Y si le cambio nuevamente el valor puedo ponerlo igualmente en valor númerico ... por ejemplo para volverlo de nuevo a FALSE estaría bién así ... prueba=0.

    ¿ De las 2 maneras estaría bién aunque en un principio la variable haya sido declarada con FALSE y no con 0 ?.


    Estoy destripando Robots y en uno de tipo martingala donde cuando se llega a la última progresión se abre otra operación en sentido contrario con el mismo numero de lotes en forma de protección y luego el trader manualmente decide si cerrar las operaciones o no. Pués bién, me encuentro lo siguiente:

    Declara una variable al comienzo de tipo integer (int). Esta decompilado (por eso salen esos nombres raros).

    int gi_196 = 0;


    Salta a la luz que no es del tipo boleano. Pero cuando me lo vuelvo a encontrar en el código parece que sea boleano ... no lo entiendo.

    Todas las referencias:

    if (gi_196 == FALSE) {
    Comment("\nCopyright 2011\n", "Cuenta Forex:", AccountServer(),
    "\n", "Fecha: ", Month(), "-", Day(), "-", Year(), " Hora servidor: ", Hour(), ":", Minute(), ":", Seconds());
    }

    ----------------------------------------------------------------------------------------------------------------------------------

    if (ticket_0 == 0 && gi_196 == FALSE) {
    if (ticket_8 != 0) OrderDelete(ticket_8);
    if (ticket_16 != 0) OrderDelete(ticket_16);
    price_32 = Ask - gi_208 * Point;
    if (gi_208 <= 0) price_32 = 0;
    price_40 = Ask + gi_204 * Point;
    g_ticket_112 = OrderSend(Symbol(), OP_BUY, g_lots_144, Ask, 0, 0, 0, "COMPRA ", num_magic, 0, CLR_NONE);
    if (g_ticket_112 > 0) {
    OrderSelect(g_ticket_112, SELECT_BY_TICKET);
    OrderModify(OrderTicket(), OrderOpenPrice(), price_32, price_40, 0, CLR_NONE);
    }

    -----------------------------------------------------------------------------------------------------------------------------------

    if (ticket_4 == 0 && gi_196 == FALSE) {
    if (ticket_12 != 0) OrderDelete(ticket_12);
    if (ticket_20 != 0) OrderDelete(ticket_20);
    price_32 = Bid + gi_208 * Point;
    if (gi_208 <= 0) price_32 = 0;
    price_40 = Bid - gi_204 * Point;
    g_ticket_112 = OrderSend(Symbol(), OP_SELL, g_lots_144, Bid, 0, 0, 0, "VENTA ", num_magic, 0, CLR_NONE);
    if (g_ticket_112 > 0) {
    OrderSelect(g_ticket_112, SELECT_BY_TICKET);
    OrderModify(OrderTicket(), OrderOpenPrice(), price_32, price_40, 0, CLR_NONE);
    }

    ---------------------------------------------------------------------------------------------------------------------------------

    Y así unos cuantos más de if (ticket_? == 0 && gi_196 == FALSE { ... etc

    Pero es que además, luego más adelante en el codigo, cambia su valor a TRUE. Si está declarado como integer como es que se comporta como tipo boleano ?.



    for (int pos_160 = 0; pos_160 < OrdersTotal(); pos_160++) {
    if (OrderSelect(pos_160, SELECT_BY_POS, MODE_TRADES)) {
    if (OrderMagicNumber() == num_magic && gi_196 == FALSE && Max_Protec == TRUE) {
    if (OrderType() == OP_BUY) g_order_lots_160 = OrderLots();
    if (OrderType() == OP_SELL) g_order_lots_168 = OrderLots();
    if (g_order_lots_160 == MaxiLot) {
    f0_0();
    g_lots_224 = 2.0 * (g_order_lots_160 - g_order_lots_168);
    g_ticket_112 = OrderSend(Symbol(), OP_SELL, g_lots_224, Bid, 0, 0, 0, "PROTECCION COMPRAS", num_magic, 0, CLR_NONE);
    for (pos_152 = 0; pos_152 < OrdersTotal(); pos_152++) {
    bool sel4=OrderSelect(pos_152, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && ticket_0 != 0 && OrderMagicNumber() == num_magic) bool mod4=OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, CLR_NONE);
    }
    Comment("\n Trading en cuenta : " + AccountNumber() + " ¡PROTEGIENDO COMPRAS! ");
    gi_196 = TRUE;
    }
    if (g_order_lots_168 == MaxiLot) {
    f0_0();
    g_lots_224 = 2.0 * (g_order_lots_168 - g_order_lots_160);
    g_ticket_112 = OrderSend(Symbol(), OP_BUY, g_lots_224, Ask, 0, 0, 0, "PROTECCION VENTAS", num_magic, 0, CLR_NONE);
    for (pos_152 = 0; pos_152 < OrdersTotal(); pos_152++) {
    bool sel5=OrderSelect(pos_152, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && ticket_4 != 0 && OrderMagicNumber() == num_magic) bool mod5=OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, CLR_NONE);
    }
    Comment("\n Trading en cuenta : " + AccountNumber() + " ¡PROTEGIENDO VENTAS! ");
    gi_196 = TRUE;
    }
    }
    }
    }
    } else {
    Comment("ROBOT PARADO");
    return;
    }
    return;
    }


    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Foro de Forex Trading United

  6. #5
    Avatar de indovinello



    Reputación:
    Poder de reputación: 24

    Bolivia
    Mensajes: 3.773
    Créditos: 12.975

    Re: ... Operador return()

    Cita Iniciado por Vinisius Ver mensaje
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Gracias de nuevo.

    Pero hay una cosa más.

    return(INIT_SUCCEEDED);

    void OnDeinit(const int reason)


    Cuando abro el nuevo metaeditor para hacer un EA desde 0 me sale eso. ¿Que significa?.


    //+------------------------------------------------------------------+
    int OnInit()
    {
    //---

    //---
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
    {
    //---

    }
    //+------------------------------------------------------------------+
    //| Expert tick function |
    //+------------------------------------------------------------------+
    void OnTick()
    {
    //---

    }
    Pues es una plantilla básica con todas las funciones que comunican tu expert con la plataforma (mt4). En ellos pones tu código.

    Pero como te ha dicho Roberto, todo esto viene explicado en el manual de metatrader. Échale un vistazo y verás cuantas dudas borras de un plumazo

    SAludos.
    Foro de Forex Trading United




  7. #6

    Re: ... Operador return()

    Pues eso, mejor dirígete siempre a MQL4.com que a cualquier página de por ahí donde te expliquen no se qué o cosa. Ahí lo tienes todo, paso a paso desde el inicio, tanto en Book como en Documentation, y si lo quieres en español te vas a MQL5.com (aunque en este caso varían algunas cosas al ser el código para MT5, pero todas esas cosas básicas, como el tipo de variables, etc lo puedes ver igualmente ahí, además con la actualización de código MQL4 cada vez se parece más a MQL5, lo han intentado homogeneizar y tal).

    Respecto a los nombres de las variables, suelen ponerlo así para que no sea tan fácil destriparlos, jeje. Cualquier programador acabaría con dolor de cabeza una tarde viéndolas todas, las localizaría y sabría lo que es cada una, pero menudo currazo, jajajaja.


    Saludos
    Foro de Forex Trading United

  8. #7
    Avatar de Vinisius
    Erectus


    Reputación:
    Poder de reputación: 12

    Espana
    Mensajes: 312
    Créditos: 126

    Re: ... Operador return()

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Gracias de nuevo.

    Pero hay una cosa más.

    return(INIT_SUCCEEDED);

    void OnDeinit(const int reason)


    Cuando abro el nuevo metaeditor para hacer un EA desde 0 me sale eso. ¿Que significa?.


    //+------------------------------------------------------------------+
    int OnInit()
    {
    //---

    //---
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
    {
    //---

    }
    //+------------------------------------------------------------------+
    //| Expert tick function |
    //+------------------------------------------------------------------+
    void OnTick()
    {
    //---

    }
    Foro de Forex Trading United

  9. #8
    Avatar de indovinello



    Reputación:
    Poder de reputación: 24

    Bolivia
    Mensajes: 3.773
    Créditos: 12.975

    Re: ... Operador return()

    Cita Iniciado por Vinisius Ver mensaje
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    Hay madre ... ya la hemos liado.


    He ido a esta pagina Programacion en MQL4. Tipos de Data

    y dice lo contrario que nosotros.

    0 es true y 1 es false.


    Pensaba que ya lo tenía solucionado y mi gozo en un pozo.

    Joder ... con la programación de los cojones.
    " In this case, the zero value will be interpreted as false, and all other values - as true."

    Bool Type - MQL4 Documentation


    Saludos.
    Foro de Forex Trading United




  10. #9
    Avatar de Vinisius
    Erectus


    Reputación:
    Poder de reputación: 12

    Espana
    Mensajes: 312
    Créditos: 126

    Re: ... Operador return()

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    jajaja claro.


    Pero ya que estábamos ...


    Muchaaaaaaaaaas gracias a ti y a robertomar.

    Por cierto, ¿ sabeis de algún programador que sepa cambiarme lo que hace este robot al llegar a la última progresion, que en vez de abrirme una operacion de sentido contrario con los mismos lotajes , simplemente me ponga un stop loss y no meta esa operación contraría ?. Y que además sepa ponerme nombre a las variables o al menos a la mayoría de ellas para que se entiendan ?.

    Saludos.

    - - - Updated - - -

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Al menos ... esa gi_196 a que carajo se refiere. Hay otras que yo mismo les he cambiado el nombre y hay otrás que estoy en la duda.

    Por lo que para un programador más o menos de nivel medio se lo hace en un periquete.

    Saludos.
    Foro de Forex Trading United

  11. #10
    Avatar de indovinello



    Reputación:
    Poder de reputación: 24

    Bolivia
    Mensajes: 3.773
    Créditos: 12.975

    Re: ... Operador return()


    Publi
    Cita Iniciado por Vinisius Ver mensaje
    Muchas gracias robertomar.


    Osea si declaro una variable tipo boleana la puedo referenciar con true o false o 0 o 1.

    ¿ Pero indistintamente ?. Quiero decir:

    Declaro variable tipo boleano .... bool prueba=FALSE.

    Luego en el código puedo ponerle su valor numérico, por ejemplo cambiarle el valor de FALSE a true ... prueba=1
    Y si le cambio nuevamente el valor puedo ponerlo igualmente en valor númerico ... por ejemplo para volverlo de nuevo a FALSE estaría bién así ... prueba=0.

    ¿ De las 2 maneras estaría bién aunque en un principio la variable haya sido declarada con FALSE y no con 0 ?.


    Estoy destripando Robots y en uno de tipo martingala donde cuando se llega a la última progresión se abre otra operación en sentido contrario con el mismo numero de lotes en forma de protección y luego el trader manualmente decide si cerrar las operaciones o no. Pués bién, me encuentro lo siguiente:

    Declara una variable al comienzo de tipo integer (int). Esta decompilado (por eso salen esos nombres raros).

    int gi_196 = 0;


    Salta a la luz que no es del tipo boleano. Pero cuando me lo vuelvo a encontrar en el código parece que sea boleano ... no lo entiendo.

    Todas las referencias:

    if (gi_196 == FALSE) {
    Comment("\nCopyright 2011\n", "Cuenta Forex:", AccountServer(),
    "\n", "Fecha: ", Month(), "-", Day(), "-", Year(), " Hora servidor: ", Hour(), ":", Minute(), ":", Seconds());
    }

    ----------------------------------------------------------------------------------------------------------------------------------

    if (ticket_0 == 0 && gi_196 == FALSE) {
    if (ticket_8 != 0) OrderDelete(ticket_8);
    if (ticket_16 != 0) OrderDelete(ticket_16);
    price_32 = Ask - gi_208 * Point;
    if (gi_208 <= 0) price_32 = 0;
    price_40 = Ask + gi_204 * Point;
    g_ticket_112 = OrderSend(Symbol(), OP_BUY, g_lots_144, Ask, 0, 0, 0, "COMPRA ", num_magic, 0, CLR_NONE);
    if (g_ticket_112 > 0) {
    OrderSelect(g_ticket_112, SELECT_BY_TICKET);
    OrderModify(OrderTicket(), OrderOpenPrice(), price_32, price_40, 0, CLR_NONE);
    }

    -----------------------------------------------------------------------------------------------------------------------------------

    if (ticket_4 == 0 && gi_196 == FALSE) {
    if (ticket_12 != 0) OrderDelete(ticket_12);
    if (ticket_20 != 0) OrderDelete(ticket_20);
    price_32 = Bid + gi_208 * Point;
    if (gi_208 <= 0) price_32 = 0;
    price_40 = Bid - gi_204 * Point;
    g_ticket_112 = OrderSend(Symbol(), OP_SELL, g_lots_144, Bid, 0, 0, 0, "VENTA ", num_magic, 0, CLR_NONE);
    if (g_ticket_112 > 0) {
    OrderSelect(g_ticket_112, SELECT_BY_TICKET);
    OrderModify(OrderTicket(), OrderOpenPrice(), price_32, price_40, 0, CLR_NONE);
    }

    ---------------------------------------------------------------------------------------------------------------------------------

    Y así unos cuantos más de if (ticket_? == 0 && gi_196 == FALSE { ... etc

    Pero es que además, luego más adelante en el codigo, cambia su valor a TRUE. Si está declarado como integer como es que se comporta como tipo boleano ?.



    for (int pos_160 = 0; pos_160 < OrdersTotal(); pos_160++) {
    if (OrderSelect(pos_160, SELECT_BY_POS, MODE_TRADES)) {
    if (OrderMagicNumber() == num_magic && gi_196 == FALSE && Max_Protec == TRUE) {
    if (OrderType() == OP_BUY) g_order_lots_160 = OrderLots();
    if (OrderType() == OP_SELL) g_order_lots_168 = OrderLots();
    if (g_order_lots_160 == MaxiLot) {
    f0_0();
    g_lots_224 = 2.0 * (g_order_lots_160 - g_order_lots_168);
    g_ticket_112 = OrderSend(Symbol(), OP_SELL, g_lots_224, Bid, 0, 0, 0, "PROTECCION COMPRAS", num_magic, 0, CLR_NONE);
    for (pos_152 = 0; pos_152 < OrdersTotal(); pos_152++) {
    bool sel4=OrderSelect(pos_152, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && ticket_0 != 0 && OrderMagicNumber() == num_magic) bool mod4=OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, CLR_NONE);
    }
    Comment("\n Trading en cuenta : " + AccountNumber() + " ¡PROTEGIENDO COMPRAS! ");
    gi_196 = TRUE;
    }
    if (g_order_lots_168 == MaxiLot) {
    f0_0();
    g_lots_224 = 2.0 * (g_order_lots_168 - g_order_lots_160);
    g_ticket_112 = OrderSend(Symbol(), OP_BUY, g_lots_224, Ask, 0, 0, 0, "PROTECCION VENTAS", num_magic, 0, CLR_NONE);
    for (pos_152 = 0; pos_152 < OrdersTotal(); pos_152++) {
    bool sel5=OrderSelect(pos_152, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && ticket_4 != 0 && OrderMagicNumber() == num_magic) bool mod5=OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, CLR_NONE);
    }
    Comment("\n Trading en cuenta : " + AccountNumber() + " ¡PROTEGIENDO VENTAS! ");
    gi_196 = TRUE;
    }
    }
    }
    }
    } else {
    Comment("ROBOT PARADO");
    return;
    }
    return;
    }


    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Sí, indistintamente, pero mejor no lo hagas por que cuando otra persona con tu misma duda lea el código volverá a estar en la misma situación de incertidumbre: el código,cuanto más pulcro y claro mejor.

    Un integer también puede comportarse como un booleano. El compilador sabe hacer "cast" de tipos cuando estos son compatibles, pero habitualmente lanza un warning. Los cast funcionan bien Casi siempre, pero hay veces que un cast puede llevar a un bug o malfuncionamiento del programa.

    Saludos.
    Foro de Forex Trading United




Página 1 de 3 123 ÚltimoÚltimo
This website uses cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

 

Publi


Aviso Legal
Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal