Buenas tardes,
He creado un EA pero me da errores.
Paso el código y los errores que me aparecen:
//+------------------------------------------------------------------+
//| IBT.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//Introducimos las variables globales
input double ForTarget=0.09; //Porcentaje de vela que vamos a utilizar para Target
input double ForStoploss=0.03; //Porcentaje de vela que vamos a utilizar para Stoploss
input double VolumenInicial=1; //Volumen a utilizar
input double ATRMenor=10; //Periodo corto de ATR
input double ATRMayor=50; //Periodo largo de ATR
input int PeriodoATR=10; //Periodo de ATR
input int PeriodoCCI=40; //Periodo de CCI
input int PeriodoRSI=11; //Periodo de RSI
input int PeriodoV=10; //Periodo de Volumen
double SL,TP;
int C,V;
int ContC=1;
int ContV=1; //Variable secundaria
double Precio;
double SumaV,SumaATR;
//FUNCIONES DE SUMA Y VENTA//
int Comprar(double Volumen)
{
int TicketNuevo=OrderSend(Symbol(),OP_BUY,Volumen,Ask,10,Ask-SL,Ask+TP);
return(TicketNuevo);
}
//FUNCIONES PARA REALIZAR EL PROCESO DE VENTA EN EL RECOVERY DE COMPRAS//
int Vender(double Volumen)
{
int TicketNuevo=OrderSend(Symbol(),OP_SELL,Volumen,Bid,10,Bid+SL,Bid-TP);
return(TicketNuevo);
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//Variables Locales//
double MediaATR, MediaV;
double ValorATR, ValorCCI, ValorRSI, ATRCorto, ATRLargo, ValorVolumen;
//PROCESO DE CALCULO VOLUMEN//
for( int i=0;i<PeriodoV;i++)
{
SumaV= SumaV+iVolume(Symbol(),0,1);
}
MediaV=SumaV/PeriodoV; //Calculamos la media del volumen
SumaV=0; //Reinicializamos el valor de la suma para el calculo de la próxima media
//PROCESO DE CALCULO ATR//
for( int i=0;i<PeriodoATR;i++)
{
SumaATR=SumaATR+iATR(Symbol(),0,10,i);
}
MediaATR=SumaATR/PeriodoATR; //Calculamos la media del ATR
SumaV=0; //Reinicializamos el valor de la suma para el calculo de la próxima media
//CALCULO DE VALORES QUE VAMOS A NECESITAR//
ValorATR=iATR(Symbol(),0,10,0);
ATRCorto=iATR(Symbol(),0,ATRMenor,0);
ATRLargo=iATR(Symbol(),0,ATRMayor,0);
ValorCCI=iCCI(Symbol(),0,PeriodoCCI,PRICE_CLOSE,0);
ValorRSI=iRSI(Symbol(),0,PeriodoRSI,PRICE_CLOSE,0);
ValorVolumen=iVolume(Symbol(),0,0);
//CONDICIONES PARA REALIZAR UNA COMPRA//
if( ContC==1 && ValorATR<MediaATR && ATRCorto>ATRLargo && ValorCCI<100 && ValorRSI>60 && ValorVolumen>MediaV)
{ContC=0; //No dejamos que se pueda comprar hasta que se cierre esta compra
Print("Comprar");
Precio=Ask;
TP=ForTarget*Precio;
SL=ForStoploss*Precio;
C=Comprar(VolumenInicial);
}
//CONDICIONES PARA REALIZAR UNA VENTA//
if( ContV==1 && ValorATR<MediaATR && ATRCorto>ATRLargo && ValorCCI>(-100) && ValorRSI<40 && ValorVolumen>MediaV)
{ContV=0; //No dejamos que se pueda vender hasta que se cierre esta venta
Print("vender");
Precio=Bid;
TP=ForTarget*Precio;
SL=ForStoploss*Precio;
C=Vender(VolumenInicial);
}
//SALIDA DE COMPRA/VENTA POR SL O TP//
//PROCESO SALIDA DE COMPRA//
int order=OrderSelect (C,SELECT_BY_TICKET);
if(ContC==0)
{ If(Ask<=OrderStopLoss() [] Ask>=OrderTakeProfit() )
{ ContC=1; //Permitimos que sea posible volver a comprar
}
}
//PROCESO SALIDA DE VENTA//
int Order=OrderSelect (V,SELECT_BY_TICKET);
if(ContV==0)
{ If(Bid>=OrderStopLoss() [] Bid<=OrderTakeProfit())
{ ContV=1; //Permitimos que sea posible volver a vender
}
}
//SALIDA DE COMPRA /VENTA POR CCI//
//COMPRA
if(ContC==0 && ValorCCI>100)
{
ContC=1;
Print("Se ha cerrado la compra por CCI");
OrderClose (C,VolumenInicial,Bid,3,Red);
}
//VENTA
if(ContV==0 && ValorCCI<(-100))
{
ContV=1;
Print("Se ha cerrado la venta por CCI");
OrderClose (C,VolumenInicial,Ask,3,Red);
}
}
//+------------------------------------------------------------------+
Muchas gracias.
Les debo una buena.
Saludos cordiales.
Linea 120 y 128: El operador "ó" no es "[]", sino "||"
Muchas gracias #Karachiento. Arreglado.
Ahora tengo este mensaje, no sé que quiere decir:
Son advertencias de dos tipos. El primer tipo es sobre typecasting (o conversion de tipos de datos) y el segundo tipo es para sugerirte que deberías checkear si la orden enviada fue colocada/cerrada en el mercado o si ocurrió un error.
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Buenas tardes,
He creado un EA pero me da errores.
Paso el código y los errores que me aparecen:
//+------------------------------------------------------------------+
//| IBT.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//Introducimos las variables globales
input double ForTarget=0.09; //Porcentaje de vela que vamos a utilizar para Target
input double ForStoploss=0.03; //Porcentaje de vela que vamos a utilizar para Stoploss
input double VolumenInicial=1; //Volumen a utilizar
input double ATRMenor=10; //Periodo corto de ATR
input double ATRMayor=50; //Periodo largo de ATR
input int PeriodoATR=10; //Periodo de ATR
input int PeriodoCCI=40; //Periodo de CCI
input int PeriodoRSI=11; //Periodo de RSI
input int PeriodoV=10; //Periodo de Volumen
double SL,TP;
int C,V;
int ContC=1;
int ContV=1; //Variable secundaria
double Precio;
double SumaV,SumaATR;
//FUNCIONES DE SUMA Y VENTA//
int Comprar(double Volumen)
{
int TicketNuevo=OrderSend(Symbol(),OP_BUY,Volumen,Ask,10,Ask-SL,Ask+TP);
return(TicketNuevo);
}
//FUNCIONES PARA REALIZAR EL PROCESO DE VENTA EN EL RECOVERY DE COMPRAS//
int Vender(double Volumen)
{
int TicketNuevo=OrderSend(Symbol(),OP_SELL,Volumen,Bid,10,Bid+SL,Bid-TP);
return(TicketNuevo);
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//Variables Locales//
double MediaATR, MediaV;
double ValorATR, ValorCCI, ValorRSI, ATRCorto, ATRLargo, ValorVolumen;
//PROCESO DE CALCULO VOLUMEN//
for( int i=0;i<PeriodoV;i++)
{
SumaV= SumaV+iVolume(Symbol(),0,1);
}
MediaV=SumaV/PeriodoV; //Calculamos la media del volumen
SumaV=0; //Reinicializamos el valor de la suma para el calculo de la próxima media
//PROCESO DE CALCULO ATR//
for( int i=0;i<PeriodoATR;i++)
{
SumaATR=SumaATR+iATR(Symbol(),0,10,i);
}
MediaATR=SumaATR/PeriodoATR; //Calculamos la media del ATR
SumaV=0; //Reinicializamos el valor de la suma para el calculo de la próxima media
//CALCULO DE VALORES QUE VAMOS A NECESITAR//
ValorATR=iATR(Symbol(),0,10,0);
ATRCorto=iATR(Symbol(),0,ATRMenor,0);
ATRLargo=iATR(Symbol(),0,ATRMayor,0);
ValorCCI=iCCI(Symbol(),0,PeriodoCCI,PRICE_CLOSE,0);
ValorRSI=iRSI(Symbol(),0,PeriodoRSI,PRICE_CLOSE,0);
ValorVolumen=iVolume(Symbol(),0,0);
//CONDICIONES PARA REALIZAR UNA COMPRA//
if( ContC==1 && ValorATR<MediaATR && ATRCorto>ATRLargo && ValorCCI<100 && ValorRSI>60 && ValorVolumen>MediaV)
{ContC=0; //No dejamos que se pueda comprar hasta que se cierre esta compra
Print("Comprar");
Precio=Ask;
TP=ForTarget*Precio;
SL=ForStoploss*Precio;
C=Comprar(VolumenInicial);
}
//CONDICIONES PARA REALIZAR UNA VENTA//
if( ContV==1 && ValorATR<MediaATR && ATRCorto>ATRLargo && ValorCCI>(-100) && ValorRSI<40 && ValorVolumen>MediaV)
{ContV=0; //No dejamos que se pueda vender hasta que se cierre esta venta
Print("vender");
Precio=Bid;
TP=ForTarget*Precio;
SL=ForStoploss*Precio;
C=Vender(VolumenInicial);
}
//SALIDA DE COMPRA/VENTA POR SL O TP//
//PROCESO SALIDA DE COMPRA//
int order=OrderSelect (C,SELECT_BY_TICKET);
if(ContC==0)
{ If(Ask<=OrderStopLoss() [] Ask>=OrderTakeProfit() )
{ ContC=1; //Permitimos que sea posible volver a comprar
}
}
//PROCESO SALIDA DE VENTA//
int Order=OrderSelect (V,SELECT_BY_TICKET);
if(ContV==0)
{ If(Bid>=OrderStopLoss() [] Bid<=OrderTakeProfit())
{ ContV=1; //Permitimos que sea posible volver a vender
}
}
//SALIDA DE COMPRA /VENTA POR CCI//
//COMPRA
if(ContC==0 && ValorCCI>100)
{
ContC=1;
Print("Se ha cerrado la compra por CCI");
OrderClose (C,VolumenInicial,Bid,3,Red);
}
//VENTA
if(ContV==0 && ValorCCI<(-100))
{
ContV=1;
Print("Se ha cerrado la venta por CCI");
OrderClose (C,VolumenInicial,Ask,3,Red);
}
}
//+------------------------------------------------------------------+
Muchas gracias.
Les debo una buena.
Saludos cordiales.