Error con un pequeño asesor experto mql5

Para añadir comentario, por favor Autorícese o regístrese
Ronin22
9
Ronin22  

Hola,

Estoy aprendiendo por mi cuenta mql5 y he hecho un pequeño asesor experto pero, me salen unos errores que no sé como solucionar

¿Alguien me podría ayudar a dar con la solución?

El primer error me sale en la línea 52 donde tengo esto:

" //Establecemos el trailing stop, usando como punto de referencia el precio, Ask

      CheckTrailingStop(Ask);"

Este es el código que he escrito:

// Simple orden de compra

// Cuando el cierre es mayor a la apertura, compra

// Stop de 300 y profit de 150


// PRIMER PASO

//Abrir librería y clase

// Librería Trade, para poder abrir órdenes

#include<Trade\Trade.mqh>

// Declaramos clase CTrade

CTrade trade;



//SEGUNDO PASO:

//En void ontick, hacemos lo siguiente:

   //le pedimos que obtenga el precio de compra

   //creamos una array para guardar los precios

   //le decimos desde donde calcular la array

   //Llenamos el array con el dato del precio

   //Ya podemos establecer condiciones de compra o venta


void OnTick()

  {

  //Obtenemos precio de COMPRA

   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK), _Digits);   

   //Creamos un array para los precios, le llamamos priceinfo

   MqlRates PriceInfo[];

   //Le pedimos que calcule el array desde la vela corriente en adelante

   ArraySetAsSeries(PriceInfo,true);

   

   //Llenamos el array con el dato del precio

   int PriceData= CopyRates(_Symbol,_Period,0,3,PriceInfo);

   

   // condición para comprar...

   // Si el cierre de vela 1 es menor que su apertura...

   if (PriceInfo[1].close > PriceInfo[1].open)

   // y...

   //El número de posiciones abiertas es cero

   if (PositionsTotal()==0)

      {

         trade.Buy

            (

            0.10,             //lotes

            NULL,             //Par actual

            Ask,              //A qué precio

            Ask-1000*_Point,   //Qué stop loss

            Ask+500*_Point,   //Qué take profit

            NULL              //Comentario, opcional

            );

  

  

      //Establecemos el trailing stop, usando como punto de referencia el precio, Ask

      CheckTrailingStop(Ask); //PRIMER ERROR QUE ME MARCA

 

      }

     

//creamos la variable CheckTrailingStop, de tipo decimal.

void CheckTrailingStop(double Ask)

   {

   //Establecemos que el stop sigua al precio a una distancia de 150 puntos.

   //En este caso, 150 pips por debajo, es compra

   double SL=NormalizeDouble(Ask-150*_Point);

   //Le pedimos que revise si hay más posicones abiertas y, de ser así, modificarlas también

   //Mira todas las posicones y, si i es mayor a cero, resta una cada vez

   for (int i=PositionsTotal()-1; i>=0; i--)

   //Nos aseguramos de que la posición pertenece al par correcto con positiongetsymbol de i

      {

      

         string symbol=PositionGetSymbol(i);

         //si el símbolo del actual par es igual al símbolo de nuestra posicion...

            if (_Symbol==Symbol)

            {

            //Obtener el ticket de la posicion...

            ulong PositionTicket=PositionGetInteger(POSITION_TICKET);

            //Ahora calculamos el stop loss actual

            double CurrentStopLoss=PositionGetDouble(POSITION_SL);

            

         

            }

         

      }

   

   }   

   

   

   

      

   

  }



Esto es todo.

Agradezco cualquier sugerencia para mejorar mi mql5

Gracias!

Archivos adjuntos:
Imanol Salazar Garcia
992
Imanol Salazar Garcia  

Primer consejo, el codigo debe meterse en formato codigo al escribir el mensaje en el foro, hay una pestañita para esto, quedaria algo así:

// Simple orden de compra
// Cuando el cierre es mayor a la apertura, compra
// Stop de 300 y profit de 150

// PRIMER PASO
//Abrir librería y clase
// Librería Trade, para poder abrir órdenes
#include<Trade\Trade.mqh>

// Declaramos clase CTrade
CTrade trade;

//SEGUNDO PASO:
//En void ontick, hacemos lo siguiente:
   //le pedimos que obtenga el precio de compra
   //creamos una array para guardar los precios
   //le decimos desde donde calcular la array
   //Llenamos el array con el dato del precio
   //Ya podemos establecer condiciones de compra o venta

void OnTick()
  {
  //Obtenemos precio de COMPRA
   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK), _Digits);   

   //Creamos un array para los precios, le llamamos priceinfo
   MqlRates PriceInfo[];

   //Le pedimos que calcule el array desde la vela corriente en adelante
   ArraySetAsSeries(PriceInfo,true);

   //Llenamos el array con el dato del precio
   int PriceData= CopyRates(_Symbol,_Period,0,3,PriceInfo);

   // condición para comprar...
   // Si el cierre de vela 1 es menor que su apertura...

   if (PriceInfo[1].close > PriceInfo[1].open)
   // y...
   //El número de posiciones abiertas es cero
   if (PositionsTotal()==0)
      {
         trade.Buy
            (
            0.10,             //lotes
            NULL,             //Par actual
            Ask,              //A qué precio
            Ask-1000*_Point,   //Qué stop loss
            Ask+500*_Point,   //Qué take profit
            NULL              //Comentario, opcional
            );

      //Establecemos el trailing stop, usando como punto de referencia el precio, Ask
      CheckTrailingStop(Ask); //PRIMER ERROR QUE ME MARCA

      }

//creamos la variable CheckTrailingStop, de tipo decimal.
void CheckTrailingStop(double Ask)
   {

   //Establecemos que el stop sigua al precio a una distancia de 150 puntos.
   //En este caso, 150 pips por debajo, es compra
   double SL=NormalizeDouble(Ask-150*_Point);

   //Le pedimos que revise si hay más posicones abiertas y, de ser así, modificarlas también
   //Mira todas las posicones y, si i es mayor a cero, resta una cada vez
   for (int i=PositionsTotal()-1; i>=0; i--)
   //Nos aseguramos de que la posición pertenece al par correcto con positiongetsymbol de i
      {
         string symbol=PositionGetSymbol(i);

         //si el símbolo del actual par es igual al símbolo de nuestra posicion...
            if (_Symbol==Symbol)
            {
            //Obtener el ticket de la posicion...
            ulong PositionTicket=PositionGetInteger(POSITION_TICKET);

            //Ahora calculamos el stop loss actual
            double CurrentStopLoss=PositionGetDouble(POSITION_SL);
            }
      }
   }   
  }

Luego, es necesario especificar que tipo de error te esta dando, si es al compilar el codigo o si es al ejecutar el EA, y copiar o hacer una captura de que error es, si quieres que alguien te entienda.

Otro tema a tener en cuenta es que la gente de aqui es probable que no te pueda o tenga tiempo de ayudarte en tu problema, si realmente quieres aprender y solucionarlo vas a tener que recurrir a la documentación de mql5, bajarte el Manual.pdf y buscar y aprender ahi que esta todo super bien explicado.

Esos son los consejillos que se me ocurre darte.

Por último, dices que eres nuevo? pues bienvenido company.
Saludos.

Ronin22
9
Ronin22  
Imanol Salazar Garcia:

Primer consejo, el codigo debe meterse en formato codigo al escribir el mensaje en el foro, hay una pestañita para esto, quedaria algo así:

Luego, es necesario especificar que tipo de error te esta dando, si es al compilar el codigo o si es al ejecutar el EA, y copiar o hacer una captura de que error es, si quieres que alguien te entienda.

Otro tema a tener en cuenta es que la gente de aqui es probable que no te pueda o tenga tiempo de ayudarte en tu problema, si realmente quieres aprender y solucionarlo vas a tener que recurrir a la documentación de mql5, bajarte el Manual.pdf y buscar y aprender ahi que esta todo super bien explicado.

Esos son los consejillos que se me ocurre darte.

Por último, dices que eres nuevo? pues bienvenido company.
Saludos.

Muchas gracias!
Para añadir comentario, por favor Autorícese o regístrese