EA MT4 Por Favor Ayuda Robot

 

Publi

Por Favor Ayuda Robot

 

Publi

Resultados 1 al 9 de 9


Vista híbrida

  1. #1

    Re: Por Favor Ayuda Robot

    Compi, ya te lo comenté por privado, si lo que quieres es que solo abra la compra cuando cruce 100 hacia arriba (y solo la venta cuando cruce de -100 hacia abajo) te dije como tenías que hacerlo, no vale con que pongas que CCI > 100, porque entonces mientras esté por encima de 100 seguirá lanzando compras una y otra vez.

    Aparte, si quieres que teniendo una orden abierta, ya no lance ninguna más hasta que cierre esa, antes de lanzarlas tendrías que chequear si tienes órdenes abiertas o no.

    Código:
       double CCI0 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 0);
       double CCI1 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 1);
       
       if(CCI1 <= 100 && CCI0 > 100)
       {
       //  Compruebas que el EA no tenga ninguna orden abierta
       //  Y si no tiene, entonces das orden de compra
       
       }
       
       if(CCI1 >= -100 && CCI0 < -100)
       {
       //  Compruebas que el EA no tenga ninguna orden abierta
       //  Y si no tiene, entonces das orden de venta
       
       }
    Si quieres que sea a cierre de vela en lugar de 0 y 1 en el ultimo parámetro del CCI le tendrías que poner 1 y 2.

    Disculpa, pero no tengo más tiempo como para hacertelo yo entero, por aquí por el foro hay varios posts donde varios compañeros, entre ellos yo, ya pusimos códigos para poder chequear las órdenes que lleva abiertas el EA en relación a su Magic Number, etc, etc.

    Espero que lo puedas solucionar con estas indicaciones y las de los posts que te hablo, que son de julio o por ahí, vamos que son recientes.

    Saludos y un abrazo.
    Foro de Forex Trading United

  2. #2
    Avatar de cazandovelas



    Reputación:
    Poder de reputación: 12

    Mensajes: 194
    Créditos: 3.688

    Re: Por Favor Ayuda Robot

    Cita Iniciado por robertomar Ver mensaje
    Compi, ya te lo comenté por privado, si lo que quieres es que solo abra la compra cuando cruce 100 hacia arriba (y solo la venta cuando cruce de -100 hacia abajo) te dije como tenías que hacerlo, no vale con que pongas que CCI > 100, porque entonces mientras esté por encima de 100 seguirá lanzando compras una y otra vez.

    Aparte, si quieres que teniendo una orden abierta, ya no lance ninguna más hasta que cierre esa, antes de lanzarlas tendrías que chequear si tienes órdenes abiertas o no.

    Código:
       double CCI0 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 0);
       double CCI1 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 1);
       
       if(CCI1 <= 100 && CCI0 > 100)
       {
       //  Compruebas que el EA no tenga ninguna orden abierta
       //  Y si no tiene, entonces das orden de compra
       
       }
       
       if(CCI1 >= -100 && CCI0 < -100)
       {
       //  Compruebas que el EA no tenga ninguna orden abierta
       //  Y si no tiene, entonces das orden de venta
       
       }
    Si quieres que sea a cierre de vela en lugar de 0 y 1 en el ultimo parámetro del CCI le tendrías que poner 1 y 2.

    Disculpa, pero no tengo más tiempo como para hacertelo yo entero, por aquí por el foro hay varios posts donde varios compañeros, entre ellos yo, ya pusimos códigos para poder chequear las órdenes que lleva abiertas el EA en relación a su Magic Number, etc, etc.

    Espero que lo puedas solucionar con estas indicaciones y las de los posts que te hablo, que son de julio o por ahí, vamos que son recientes.

    Saludos y un abrazo.

    Muchas gracias amigo por querer ayudarme lo valoro mucho gracias de corazon.Te pido perdon si soy un poco cansado o molesto mucho, lo siento.

    Te he hecho caso he añadido tu codigo al que estaba haciendo y he buscado una forma de selecionas la orden y cerrar la que estviera abierta, pero despues de comprobar el codigo y ponerlo a prueba sigue sin funcionar como yo quiero el codigo es este.

    Código:
     // Variables Externasextern double Lote = 0.1;
    extern double StopLoss = 20;
    extern double TakeProfit = 40;
    
    
    extern int Slippage = 0;
    extern int MagicNumber = 123;
    
    
    
    
    extern int numerOrdenes = 1;
    extern int Desfase = 0;
    
    
    // Variables Globales
    double ConvPip;
    int ConvPipSlippage;
    int TickectCompra;
    int TickectVenta;
    
    
    
    
    
    
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    
    
      
     
    
    
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
      {
    
    
          
       OrderSelect(0,SELECT_BY_POS);
       
          if (TickectCompra > 0 && Bid - OrderOpenPrice() >= 2 * ConvPip)
          {
             double StopLossCompraMod = OrderOpenPrice();
             OrderModify(TickectCompra,OrderOpenPrice(),StopLossCompraMod,OrderTakeProfit(),0,Blue);
          }
          
          if (TickectVenta > 0 && OrderOpenPrice() - Ask >= 2 * ConvPip)
          {
             double StopLossVentaMod = OrderOpenPrice();
             OrderModify(TickectVenta,OrderOpenPrice(),StopLossVentaMod,OrderTakeProfit(),0,Blue);
          }     
       
       
       int TotalOrdenes = OrdersTotal();
       
       if(TotalOrdenes == 1) return(0);
       
       //Orden de Compra
       double CCI0 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 0); 
       double CCI1 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 1); 
       
       
       if(CCI1 <= 100 && CCI0 > 100) {
    
    
          OrderSelect(TickectVenta,SELECT_BY_TICKET);
          
          //Cerrar orden Venta
          if(TickectVenta > 0)
          {
             OrderClose(TickectVenta,OrderLots(),Ask,ConvPipSlippage,Red);
          }
          
          
          // Abrir Operacion de compra
          TickectCompra = OrderSend(Symbol(),OP_BUY,Lote,Ask,ConvPipSlippage,Ask - (StopLoss * Point),Ask + (TakeProfit * Point),"Orden de Compra",MagicNumber,0,Green);
          
          TickectVenta = 0;
      
       }
        
       
       //Orden de Venta
       if(CCI1 >= -100 && CCI0 < -100)
       {
          OrderSelect(TickectCompra,SELECT_BY_TICKET);
          
          //Cerrar orden Venta
          if(TickectCompra > 0)
          {
             OrderClose(TickectCompra,OrderLots(),Bid,ConvPipSlippage,Red);
          }
    
    
          // Abrir Operacion de venta
          TickectVenta = OrderSend(Symbol(),OP_SELL,Lote,Bid,ConvPipSlippage,Bid + (StopLoss * Point),Bid - (TakeProfit * Point),"Orden de Venta",MagicNumber,0,Red);
          
          TickectCompra = 0;
       }    
     
     return(0);
      }

    Amigo creo que me rindo por que aun poniendo lo que me has dicho sigue abriendo mas ordenes si esta por encima de 100 o por debajo de 100 es decir que no abre una sola posicion sigue abriendo una y otra, me refiero a que abre una y otra pero cuando se cierra la actual es decir siempre hay una sola posicion abierta en ese momento Pero lo que yo es que solo se abra una vez la posicion cuando cruce la linea y No que cuando este encima de 100 vuelva a abrir otra eso no quiero pero parece que es imposible hacerlo con codigo ME RINDO.

    Bueno amigo y compañero , te agredezco mucho tu ayuda incluso te voy a dar Reputacion por tu aporte educativo sobre mql4, ademas creo que eres un excelente programador por eso si empiezo ganar en el foro algo lo primero sera contratarte como programador para poder hacer un EA ROBOT mucho mas complejo y con muchas mas opciones y parametros que no seria para nada igual que este sencillo ea que quiero construir para uso personal pero bueno no se puede hacer y lo acepto
    Foro de Forex Trading United


  3. #3

    Re: Por Favor Ayuda Robot

    Cita Iniciado por cazandovelas Ver mensaje
    Muchas gracias amigo por querer ayudarme lo valoro mucho gracias de corazon.Te pido perdon si soy un poco cansado o molesto mucho, lo siento.

    Te he hecho caso he añadido tu codigo al que estaba haciendo y he buscado una forma de selecionas la orden y cerrar la que estviera abierta, pero despues de comprobar el codigo y ponerlo a prueba sigue sin funcionar como yo quiero el codigo es este.

    Código:
     // Variables Externasextern double Lote = 0.1;
    extern double StopLoss = 20;
    extern double TakeProfit = 40;
    
    
    extern int Slippage = 0;
    extern int MagicNumber = 123;
    
    
    
    
    extern int numerOrdenes = 1;
    extern int Desfase = 0;
    
    
    // Variables Globales
    double ConvPip;
    int ConvPipSlippage;
    int TickectCompra;
    int TickectVenta;
    
    
    
    
    
    
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    
    
      
     
    
    
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
      {
    
    
          
       OrderSelect(0,SELECT_BY_POS);
       
          if (TickectCompra > 0 && Bid - OrderOpenPrice() >= 2 * ConvPip)
          {
             double StopLossCompraMod = OrderOpenPrice();
             OrderModify(TickectCompra,OrderOpenPrice(),StopLossCompraMod,OrderTakeProfit(),0,Blue);
          }
          
          if (TickectVenta > 0 && OrderOpenPrice() - Ask >= 2 * ConvPip)
          {
             double StopLossVentaMod = OrderOpenPrice();
             OrderModify(TickectVenta,OrderOpenPrice(),StopLossVentaMod,OrderTakeProfit(),0,Blue);
          }     
       
       
       int TotalOrdenes = OrdersTotal();
       
       if(TotalOrdenes == 1) return(0);
       
       //Orden de Compra
       double CCI0 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 0); 
       double CCI1 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 1); 
       
       
       if(CCI1 <= 100 && CCI0 > 100) {
    
    
          OrderSelect(TickectVenta,SELECT_BY_TICKET);
          
          //Cerrar orden Venta
          if(TickectVenta > 0)
          {
             OrderClose(TickectVenta,OrderLots(),Ask,ConvPipSlippage,Red);
          }
          
          
          // Abrir Operacion de compra
          TickectCompra = OrderSend(Symbol(),OP_BUY,Lote,Ask,ConvPipSlippage,Ask - (StopLoss * Point),Ask + (TakeProfit * Point),"Orden de Compra",MagicNumber,0,Green);
          
          TickectVenta = 0;
      
       }
        
       
       //Orden de Venta
       if(CCI1 >= -100 && CCI0 < -100)
       {
          OrderSelect(TickectCompra,SELECT_BY_TICKET);
          
          //Cerrar orden Venta
          if(TickectCompra > 0)
          {
             OrderClose(TickectCompra,OrderLots(),Bid,ConvPipSlippage,Red);
          }
    
    
          // Abrir Operacion de venta
          TickectVenta = OrderSend(Symbol(),OP_SELL,Lote,Bid,ConvPipSlippage,Bid + (StopLoss * Point),Bid - (TakeProfit * Point),"Orden de Venta",MagicNumber,0,Red);
          
          TickectCompra = 0;
       }    
     
     return(0);
      }

    Amigo creo que me rindo por que aun poniendo lo que me has dicho sigue abriendo mas ordenes si esta por encima de 100 o por debajo de 100 es decir que no abre una sola posicion sigue abriendo una y otra, me refiero a que abre una y otra pero cuando se cierra la actual es decir siempre hay una sola posicion abierta en ese momento Pero lo que yo es que solo se abra una vez la posicion cuando cruce la linea y No que cuando este encima de 100 vuelva a abrir otra eso no quiero pero parece que es imposible hacerlo con codigo ME RINDO.

    Bueno amigo y compañero , te agredezco mucho tu ayuda incluso te voy a dar Reputacion por tu aporte educativo sobre mql4, ademas creo que eres un excelente programador por eso si empiezo ganar en el foro algo lo primero sera contratarte como programador para poder hacer un EA ROBOT mucho mas complejo y con muchas mas opciones y parametros que no seria para nada igual que este sencillo ea que quiero construir para uso personal pero bueno no se puede hacer y lo acepto

    Gracias compañero, de momento supongo que no me puedes dar más reputación porque ya me diste el otro día, así que hasta que no le des a otros compañeros el sistema no te dejará, pero vamos, eso es lo de menos, jajajaja.

    A ver, con lo que yo te puse, solo te podrá abrir operaciones en la vela donde cruce, en la siguiente vela ya no, lo que pasa es que en esa vela, mientras está en curso el valor del CCI se va moviendo arriba y abajo, por lo cual, si cierras cuando baje de 100, entonces te la cerrará y en cuanto llegue otro tick en el que de nuevo esté por encima de 100 te volverá a abrir otra. Para que solo te abra una orden en esa vela, tendrías que ponerle a esa parte del código que te lo haga solamente a apertura de vela nueva, y en los parámetros del CCI ponerle al shift 1 y 2, en lugar de 0 y 1, tal como te comenté en el otro post. En ese caso, cuando en una vela se produzca el cruce, y cierre dicha vela estando por encima, automáticamente al abrir nueva vela te hará la compra.

    Para esto, solo tendrías que poner un pequeño fragmenteo de código, para que te lo haga solamente a apertura de vela:

    Código:
        // Esto fuera de todas las llaves de todas las funciones, es decir arriba, donde se declaran las variables internas del EA
        datetime  lastOpenBarTime;
        bool        IsBarOpen;
       
        // Esto dentro de la función OnTick() o de la función start() si lo estás haciendo con código antiguo
    
        if(lastOpenBarTime == 0) lastOpenBarTime = Time[0];
        if(lastOpenBarTime != Time[0] { 
           lastOpenBarTime =  Time[0];
           IsBarOpen = true; 
        } else {
           IsBarOpen = false;  }
        
        // y luego antes de meter el OrderSend, le pones :
        if(IsBarOpen)   OrderSend(tal tal tal....)
    Si lo que quieres es que entre en la vela en curso (no a cierre de vela), entonces tendrías que dejar los shit en 0 y 1, pero para que no reentre más veces en dicha vela, tendrías que almacenar el Time[0] de dicha vela en una variable en el momento en que entres, y ponerle como condición que el Time[0] de la vela corriente sea mayor que el valor de esa variable que tienes almacenada.

    No obstante, yo no pondría que cierre la operación al bajar de 100, puesto que te la va a abrir e inmediatamente la mayoría de las veces te la va a cerrar en un instante, ya que en la vela en curso el valor de cualquier indicador se está moviendo constantemente,. Por lo tanto, vas a ir perdiendo el spread en cada entrada.

    Tampoco es una forma adecuada como estás chequeando si tienes órdenes abiertas, los post de los que te hablé en los que se explicó como hacerlo correctamente son estos:

    http://www.tradingunited.es/foro/tra...tml#post146252

    http://www.tradingunited.es/foro/tra...tml#post148410

    Habría que aplicar esa misma metodología, aplicada a tu EA.

    Espero que te sirva y lo puedas solucionar.

    Saludos y un abrazo.
    Foro de Forex Trading United
    Última edición por robertomar; 02:58 a las


  4. #4
    Avatar de didaz



    Reputación:
    Poder de reputación: 14

    Espana
    Mensajes: 191
    Créditos: 2.335

    Re: Por Favor Ayuda Robot

    Buenas....
    Creo que es más o menos lo que querías
    Le he añadido algunas cosas : un breakeven, traillingstop , control de horarios

    Espero que te sea útil .

    Por Favor Ayuda Robot-cazandovelas-dax-m5.png
    Foro de Forex Trading United
    Archivos adjuntados Archivos adjuntados

  5. #5
    Avatar de cazandovelas



    Reputación:
    Poder de reputación: 12

    Mensajes: 194
    Créditos: 3.688

    Re: Por Favor Ayuda Robot

    Cita Iniciado por didaz Ver mensaje
    Buenas....
    Creo que es más o menos lo que querías
    Le he añadido algunas cosas : un breakeven, traillingstop , control de horarios

    Espero que te sea útil .

    Por Favor Ayuda Robot-cazandovelas-dax-m5.png
    MUCHAS GRACIAS POR TODO EL TRABAJO QUE HAS HECHO CON EL CODIGO GRACIAASSSSSS!!

    Que sorpresa me he llevado, estoy contento y alegre, te estoy muy agradecido ha sido todo un detalle todas las molestias que te has tomado gracias, he estado leyendo el codigo y hasta tiene comentarios y todo trailling stop breakeven esta muy completo gracias.

    Lo he estado testeando con la prueba de estrategia de la metatrader y no me funciona lo del CCi por que lo pongo en modo visual y espero aver si funciona lo del indicador como yo lo queria el cci pero veo que pasa la linea de 100 y la de -100 y no se abre la posicion y despues alomejor sin venir a cuento mas adelante se abre la posicion pero no creo que sea por que se cumple la condicion del cci, es que si lo veo en modo visual veo que pasa las lineas del cci como si nada y no ejecuta nada. Alomejor no es ningun fallo y e falta algo en la configuracion activar no se...

    Pero no pasa nada, te estoy muy agradecido ahora tengo una base de codigo excelente para poder continuar con mi aprendizaje para poderle hacer las modificaciones que aprenda para que el cci haga exactamente lo que yo queria,

    Gracias por todo compañero, eternamente agradecido te deseo que te vaya todo bien en el trading y la vida
    Foro de Forex Trading United


  6. #6
    Avatar de cazandovelas



    Reputación:
    Poder de reputación: 12

    Mensajes: 194
    Créditos: 3.688

    Re: Por Favor Ayuda Robot

    Cita Iniciado por robertomar Ver mensaje
    Compi, ya te lo comenté por privado, si lo que quieres es que solo abra la compra cuando cruce 100 hacia arriba (y solo la venta cuando cruce de -100 hacia abajo) te dije como tenías que hacerlo, no vale con que pongas que CCI > 100, porque entonces mientras esté por encima de 100 seguirá lanzando compras una y otra vez.

    Aparte, si quieres que teniendo una orden abierta, ya no lance ninguna más hasta que cierre esa, antes de lanzarlas tendrías que chequear si tienes órdenes abiertas o no.

    Código:
       double CCI0 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 0);
       double CCI1 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 1);
       
       if(CCI1 <= 100 && CCI0 > 100)
       {
       //  Compruebas que el EA no tenga ninguna orden abierta
       //  Y si no tiene, entonces das orden de compra
       
       }
       
       if(CCI1 >= -100 && CCI0 < -100)
       {
       //  Compruebas que el EA no tenga ninguna orden abierta
       //  Y si no tiene, entonces das orden de venta
       
       }
    Si quieres que sea a cierre de vela en lugar de 0 y 1 en el ultimo parámetro del CCI le tendrías que poner 1 y 2.

    Disculpa, pero no tengo más tiempo como para hacertelo yo entero, por aquí por el foro hay varios posts donde varios compañeros, entre ellos yo, ya pusimos códigos para poder chequear las órdenes que lleva abiertas el EA en relación a su Magic Number, etc, etc.

    Espero que lo puedas solucionar con estas indicaciones y las de los posts que te hablo, que son de julio o por ahí, vamos que son recientes.

    Saludos y un abrazo.
    Gracias compañero y amigo por querer ayudarme Gracias.
    Voy a aplicarme el estudio de mql4 y voy a seguir tus indicaciones para seguir aprendiendo y algun dia hare mi propio robot rentable estoy seguro aunqe tarde 2 o 3 años jeje xD

    Muchas gracias por contestarte. Gracias por todo.
    Foro de Forex Trading United


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