Error con un pequeño asesor experto mql5

 

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:
 

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.

 
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!