Ayuda Podéis corregir este código mql4?

 

Publi

Podéis corregir este código mql4?

 

Publi

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 11


  1. #1
    Avatar de P6J6L6B
    habilis


    Reputación:
    Poder de reputación: 10

    Espana
    Mensajes: 110

    Re: Podéis corregir este código mql4?


    Publi
    Cita Iniciado por Jorge_Martin Ver mensaje
    Al final ya he conseguido crear el programa.

    Doy por finalizado este tema y lo cierro.
    Hola jorge
    soy Pablo
    en primer lugar enhorabuena si conseguiste realizar eso solo con los videos de youtuve le tuviste que echar bien d horas yo tb estoy empezando con ello pero no a tu nivel queria saber como te fue, si le has dado un uso real y efectivo?
    y en que proyectos trabajas ahora de MQL4 por si te puedo echar una mano y kizas tu a mi en el futuro

    un saludo , tu nuevo amigo espero ^_^
    Foro de Forex Trading United

  2. Publi
    Publi


  3. #2

    Re: Podéis corregir este código mql4?

    Lo es os pongo a continuación es unas pequeñas modificaciones que he realizado en el EA. También os pongo más abajo el el resultado del diario al ejecutarlo en Metatrader


    Código:
    extern double lotesrunnercorto = 0.1; // Lotes del runner corto
    //extern double lotesrunnerlargo = 0.1; // Lotes del runner largo
    extern double distanciaSL = 150; // Distancia a Stop Loss runner corto venta
    extern double distanciaTP = 50; // Distancia a Stop Loss runner corto compra
    extern double distanciabreakevencorto = 0.00400; // Distancia a Break Even runner corto
    extern int rsiperiod = 14; // Periodo promedio para el RSI
    extern double nivelmaxrsi = 70; // Nivel maximo de entrada del RSI
    extern double nivelminrsi = 30; // Nivel minimo de entrada del RSI
    extern int magic = 2143;
    int ticket = 0;
    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //---
       
    //---
       return(INIT_SUCCEEDED);
      }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
    //---
       
      }
    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    void OnTick()
      {
    //---
     double RSI30;
     double RSI15;
     double RSI5;
     RSI30 = iRSI(Symbol(), PERIOD_M30, rsiperiod, PRICE_CLOSE, 0);
     RSI15 = iRSI(Symbol(), PERIOD_M15, rsiperiod, PRICE_CLOSE, 0);
     RSI5 = iRSI(Symbol(), PERIOD_M5, rsiperiod, PRICE_CLOSE, 1);
     
    double distanciaslrunnercortoAsk = Ask +  distanciaSL * Point; // Distancia a Stop Loss runner corto venta
    double distanciaslrunnercortoBid = Bid - distanciaSL * Point; // Distancia a Stop Loss runner corto compra
    double distanciatprunnercortoAsk = Ask -  distanciaTP * Point;  // Distancia a Take Profit runner corto venta
    double distanciatprunnercortoBid = Bid + distanciaTP * Point;  // Distancia a Take Profit runner corto compra
    
    
    
    
     
     if(ticket == 0) {
     // No hay orden aberta.
     // chequeo si debemos abrir orden de venta.
     //Nivel de entrada de compra
       if( RSI30 <= nivelminrsi && RSI15 <= nivelminrsi && RSI5 <= nivelminrsi){//Falta la condicion que la ultima vela (shift=2) sea positiva
        ticket = OrderSend(Symbol(), OP_BUY, lotesrunnercorto, Ask, 3, distanciaslrunnercortoBid, distanciatprunnercortoBid, NULL, magic,0, Blue);
       }
       if( RSI30 >= nivelmaxrsi && RSI15 >= nivelmaxrsi && RSI5 >= nivelmaxrsi){//Falta la condicion que la ultima vela (shift=2) sea negativa
        //Nivel de entrada de venta
        ticket = OrderSend(Symbol(), OP_SELL, lotesrunnercorto, Bid, 3, distanciaslrunnercortoAsk, distanciatprunnercortoAsk, NULL, magic,0, Blue);
       }
      else{
       if(OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES) == true){
       
         if( OrderType() == OP_SELL){
             if( RSI30 <= nivelminrsi && RSI15 <= nivelminrsi && RSI5 <= nivelminrsi){//Falta la condicion que la ultima vela (shift=2) sea positiva
              //Nivel de entrada de compra
              ticket = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, Brown);
              ticket = OrderSend(Symbol(), OP_BUY, lotesrunnercorto, Ask, 3, distanciaslrunnercortoBid, distanciatprunnercortoBid, NULL, magic,0, Blue);
             }
          }
         
         if( OrderType() == OP_BUY){
             if( RSI30 >= nivelmaxrsi && RSI15 >= nivelmaxrsi && RSI5 >= nivelmaxrsi){//Falta la condicion que la ultima vela (shift=2) sea negativa
             //Nivel de entrada de venta
             ticket = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, Brown);
             ticket = OrderSend(Symbol(), OP_SELL, lotesrunnercorto, Bid, 3, distanciaslrunnercortoAsk, distanciatprunnercortoAsk, NULL, magic,0, Blue);
              }
             }
          }
         
         }
       
        }
      }
    //+------------------------------------------------------------------+
    
    
    
    
    DIARIO DE METATRADER: 
    
    2015.01.08 23:01:46.777    EURUSD,M30: 1078845 tick events (2167 bars, 1079845 bar states) processed within 10047 ms (total time 13369 ms)
    2015.01.08 23:01:45.977    2014.12.01 15:44  Triple_RSI EURUSD,M30: OrderSend error 130
    2015.01.08 23:01:36.734    Triple_RSI inputs: lotesrunnercorto=0.1; distanciaSL=0.015; distanciaTP=0.005; distanciabreakevencorto=0.004; rsiperiod=14; nivelmaxrsi=70; nivelminrsi=30; magic=2143; 
    2015.01.08 23:01:36.718    TestGenerator: unmatched data error (high value 1.19246 at 2015.01.05 12:00 is not reached from the least timeframe, high price 1.19238 mismatches)
    2015.01.08 23:01:33.410    TestGenerator: current spread 18 used
    2015.01.08 22:59:47.526    Expert Moving Average EURUSD,M30: removed
    Foro de Forex Trading United

  4. #3
    Avatar de Neo Trader



    Reputación:
    Poder de reputación: 0

    Espana
    Mensajes: 5.432
    Créditos: 19.549

    Re: Podéis corregir este código mql4?

    Hola Jorge_Martin. Por favor recuerda utilizar títulos descriptivos en los temas
    Foro de Forex Trading United



  5. #4

    Podéis corregir este código mql4?

    Hola, veréis he intentado realizar un EA por mi mismo gracias a los tutoriales de youtube. El caso es que mas o menos lo he encaminado y tras la compilación (sin errores), realizo un backtesting donde no se ha ejecutado ni una sola orden. Por ello os pido un poquito de ayuda para ver donde esta el error en el código, yo he supuesto que se trata por utilizar varios timeframe, pero no lo se la verdad...

    Gracias por adelantado,




    Código:
    extern double lotesrunnercorto = 0.1; // Lotes del runner corto
    //extern double lotesrunnerlargo = 0.1; // Lotes del runner largo
    extern double distanciaslrunnercorto = 0.01500; // Distancia a Stop Loss runner corto
    //extern double distanciaslrunnerlargo = 0.01500; // Distancia a Stop Loss runner largo
    extern double distanciatprunnercorto = 0.00500;  // Distancia a Take Profit runner corto
    //extern double distanciatprunnerlargo = 0.00100;  // Distancia a Take Profit runner largo
    extern double distanciabreakevencorto = 0.00400; // Distancia a Break Even runner corto
    //extern int distanciabreakevenlargo = 0.00500;  // Distancia a Break Even runner largo
    extern int rsiperiod = 14; // Periodo promedio para el RSI
    extern double nivelmaxrsi = 70; // Nivel maximo de entrada del RSI
    extern double nivelminrsi = 30; // Nivel minimo de entrada del RSI
    extern int magic = 2143;
    int ticket = 0;
    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //---
       
    //---
       return(INIT_SUCCEEDED);
      }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
    //---
       
      }
    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    void OnTick()
      {
    //---
     double RSI30;
     double RSI15;
     double RSI5;
     RSI30 = iRSI(Symbol(), PERIOD_M30, rsiperiod, PRICE_CLOSE, 2);
     RSI15 = iRSI(Symbol(), PERIOD_M15, rsiperiod, PRICE_CLOSE, 2);
     RSI5 = iRSI(Symbol(), PERIOD_M5, rsiperiod, PRICE_CLOSE, 2);
     
     if(ticket == 0) {
     // No hay orden aberta.
     // chequeo si debemos abrir orden de venta.
     //Nivel de entrada de compra
       if( RSI30 <= nivelminrsi && RSI15 <= nivelminrsi && RSI5 <= nivelminrsi){//Falta la condicion que la ultima vela (shift=2) sea positiva
        ticket = OrderSend(Symbol(), OP_BUY, lotesrunnercorto, Ask, 3, distanciaslrunnercorto, distanciatprunnercorto, NULL, magic,0, Blue);
       }
       if( RSI30 >= nivelmaxrsi && RSI15 >= nivelmaxrsi && RSI5 >= nivelmaxrsi){//Falta la condicion que la ultima vela (shift=2) sea negativa
        //Nivel de entrada de venta
        ticket = OrderSend(Symbol(), OP_SELL, lotesrunnercorto, Bid, 3, distanciaslrunnercorto, distanciatprunnercorto, NULL, magic,0, Blue);
       }
      else{
       if(OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES) == true){
       
         if( OrderType() == OP_SELL){
             if( RSI30 <= nivelminrsi && RSI15 <= nivelminrsi && RSI5 <= nivelminrsi){//Falta la condicion que la ultima vela (shift=2) sea positiva
              //Nivel de entrada de compra
              ticket = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, Brown);
              ticket = OrderSend(Symbol(), OP_BUY, lotesrunnercorto, Ask, 3, distanciaslrunnercorto, distanciatprunnercorto, NULL, magic,0, Blue);
             }
          }
         
         if( OrderType() == OP_BUY){
             if( RSI30 >= nivelmaxrsi && RSI15 >= nivelmaxrsi && RSI5 >= nivelmaxrsi){//Falta la condicion que la ultima vela (shift=2) sea negativa
             //Nivel de entrada de venta
             ticket = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, Brown);
             ticket = OrderSend(Symbol(), OP_SELL, lotesrunnercorto, Bid, 3, distanciaslrunnercorto, distanciatprunnercorto, NULL, magic,0, Blue);
              }
             }
          }
         
         }
       
        }
      }
    Foro de Forex Trading United

  6. #5

    Re: Podéis corregir este código mql4?

    Al final ya he conseguido crear el programa.

    Doy por finalizado este tema y lo cierro.
    Foro de Forex Trading United

  7. #6

    Re: Podéis corregir este código mql4?

    Lo siento es que no sabía que título ponerle... He aprendido a hacer este trozito de código en un par de dias y estoy muy perdido con esto de la programación...
    Foro de Forex Trading United

  8. #7

    Re: Podéis corregir este código mql4?

    Hola Pablo:

    Lo cierto es que al principio es un tanto complicado, pero después lo vas viendo con otros ojos, te digo que no te desanimes, en un mes puedes estar haciendo ea sencillos, por lo menos el mio es bastante sencillo. El problema es que simplemente con hacer el ea no es suficiente, ya que después viene el proceso de optimización y estudio para saber cuales son los parámetros más adecuado para ejecutarlo.

    Uno piensa que realizar el ea ya es suficiente para ganar, pero ni mucho menos, hace falta más trabajo... Aún así no te desanimes, jajajaja es que creo que te he metido mucha presión, cuando ves la luz en alguno de ellos piensas que al final el trabajo vale la pena, aunque sea por un pequeño margen... A mi aún me queda bastante recorrido ya que me encuentro en la fase de optimización y estudio, y la verdad es que me hace falta una buena guía para saber en que parámetros, debo fijarme para saber si mi ea es bueno con ellos o no...
    Foro de Forex Trading United

  9. #8

    Re: Podéis corregir este código mql4?

    Siento el retraso. Aquí esta el programa, he realizado un par de pequeñas modificaciones para ver si lo conseguía al fin.

    Muchas gracias por la ayuda,
    Foro de Forex Trading United
    Archivos adjuntados Archivos adjuntados

  10. #9
    Avatar de Wolfman



    Reputación:
    Poder de reputación: 22

    Mensajes: 2.039
    Créditos: 8.196

    Re: Podéis corregir este código mql4?

    Cita Iniciado por Jorge_Martin Ver mensaje
    Lo es os pongo a continuación es unas pequeñas modificaciones que he realizado en el EA. También os pongo más abajo el el resultado del diario al ejecutarlo en Metatrader


    Código:
    extern double lotesrunnercorto = 0.1; // Lotes del runner corto
    //extern double lotesrunnerlargo = 0.1; // Lotes del runner largo
    extern double distanciaSL = 150; // Distancia a Stop Loss runner corto venta
    extern double distanciaTP = 50; // Distancia a Stop Loss runner corto compra
    extern double distanciabreakevencorto = 0.00400; // Distancia a Break Even runner corto
    extern int rsiperiod = 14; // Periodo promedio para el RSI
    extern double nivelmaxrsi = 70; // Nivel maximo de entrada del RSI
    extern double nivelminrsi = 30; // Nivel minimo de entrada del RSI
    extern int magic = 2143;
    int ticket = 0;
    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //---
       
    //---
       return(INIT_SUCCEEDED);
      }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
    //---
       
      }
    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    void OnTick()
      {
    //---
     double RSI30;
     double RSI15;
     double RSI5;
     RSI30 = iRSI(Symbol(), PERIOD_M30, rsiperiod, PRICE_CLOSE, 0);
     RSI15 = iRSI(Symbol(), PERIOD_M15, rsiperiod, PRICE_CLOSE, 0);
     RSI5 = iRSI(Symbol(), PERIOD_M5, rsiperiod, PRICE_CLOSE, 1);
     
    double distanciaslrunnercortoAsk = Ask +  distanciaSL * Point; // Distancia a Stop Loss runner corto venta
    double distanciaslrunnercortoBid = Bid - distanciaSL * Point; // Distancia a Stop Loss runner corto compra
    double distanciatprunnercortoAsk = Ask -  distanciaTP * Point;  // Distancia a Take Profit runner corto venta
    double distanciatprunnercortoBid = Bid + distanciaTP * Point;  // Distancia a Take Profit runner corto compra
    
    
    
    
     
     if(ticket == 0) {
     // No hay orden aberta.
     // chequeo si debemos abrir orden de venta.
     //Nivel de entrada de compra
       if( RSI30 <= nivelminrsi && RSI15 <= nivelminrsi && RSI5 <= nivelminrsi){//Falta la condicion que la ultima vela (shift=2) sea positiva
        ticket = OrderSend(Symbol(), OP_BUY, lotesrunnercorto, Ask, 3, distanciaslrunnercortoBid, distanciatprunnercortoBid, NULL, magic,0, Blue);
       }
       if( RSI30 >= nivelmaxrsi && RSI15 >= nivelmaxrsi && RSI5 >= nivelmaxrsi){//Falta la condicion que la ultima vela (shift=2) sea negativa
        //Nivel de entrada de venta
        ticket = OrderSend(Symbol(), OP_SELL, lotesrunnercorto, Bid, 3, distanciaslrunnercortoAsk, distanciatprunnercortoAsk, NULL, magic,0, Blue);
       }
      else{
       if(OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES) == true){
       
         if( OrderType() == OP_SELL){
             if( RSI30 <= nivelminrsi && RSI15 <= nivelminrsi && RSI5 <= nivelminrsi){//Falta la condicion que la ultima vela (shift=2) sea positiva
              //Nivel de entrada de compra
              ticket = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, Brown);
              ticket = OrderSend(Symbol(), OP_BUY, lotesrunnercorto, Ask, 3, distanciaslrunnercortoBid, distanciatprunnercortoBid, NULL, magic,0, Blue);
             }
          }
         
         if( OrderType() == OP_BUY){
             if( RSI30 >= nivelmaxrsi && RSI15 >= nivelmaxrsi && RSI5 >= nivelmaxrsi){//Falta la condicion que la ultima vela (shift=2) sea negativa
             //Nivel de entrada de venta
             ticket = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, Brown);
             ticket = OrderSend(Symbol(), OP_SELL, lotesrunnercorto, Bid, 3, distanciaslrunnercortoAsk, distanciatprunnercortoAsk, NULL, magic,0, Blue);
              }
             }
          }
         
         }
       
        }
      }
    //+------------------------------------------------------------------+



    DIARIO DE METATRADER:

    2015.01.08 23:01:46.777 EURUSD,M30: 1078845 tick events (2167 bars, 1079845 bar states) processed within 10047 ms (total time 13369 ms)
    2015.01.08 23:01:45.977 2014.12.01 15:44 Triple_RSI EURUSD,M30: OrderSend error 130
    2015.01.08 23:01:36.734 Triple_RSI inputs: lotesrunnercorto=0.1; distanciaSL=0.015; distanciaTP=0.005; distanciabreakevencorto=0.004; rsiperiod=14; nivelmaxrsi=70; nivelminrsi=30; magic=2143;
    2015.01.08 23:01:36.718 TestGenerator: unmatched data error (high value 1.19246 at 2015.01.05 12:00 is not reached from the least timeframe, high price 1.19238 mismatches)
    2015.01.08 23:01:33.410 TestGenerator: current spread 18 used
    2015.01.08 22:59:47.526 Expert Moving Average EURUSD,M30: removed
    No estoy seguro pero recuerdo que error 130 tiene que ver con el lotaje, el sl, tp, veo que que te esta marcando 0.015 que serian 150 pips, tp 0.005 que son 50 pips.

    Talvez si explicas mejor la idea se te pueda echar la mano de mejor manera.

    Saludos.
    Foro de Forex Trading United



    "La mente es como un paracaídas, sólo funciona si se abre. Albert Einstein

  11. #10

    Re: Podéis corregir este código mql4?


    Publi
    La idea es entrar al mercado cuando el RSI este por encima de 70 o por debajo de 30 en tres timeframes diferentes de 5, 15 y 30 minutos. Tomando como beneficio 5 pips y con el SL de 15 pips. Lo expreso así por que según expresa los pips metatrader 5 pips son 50...

    Muchas gracias por contestar,
    Foro de Forex Trading United

Página 1 de 2 12 Ú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