Buenos días,

Soy novato en esto de programar asesores expertos, por lo que aun estoy aprendiendo en mql5 y me he quedado atascado.

Esa forma de realizar las señales mediante un rsi la vi en el manual de mql5, aunque la adapte, por lo que no se si la estoy realizando correctamente.

El problema es que no me entra en el if (rsi_buffer[2]<30 && rsi_buffer[1]>30) ni en el else if(rsi_buffer[2]>70 && rsi_buffer[1]<70). Todo lo demás lo hace correctamente, ya que probé a quitarle los if.

Como podéis intuir el If lo que indica es que cuando el rsi se encuentre por debajo de 30 pase a la siguiente linea de código y haga un compra. Y con el otro sucede lo mismo, cuando esta por encima de 70 haga una venta.

Es algo muy simple pero por mas que he buscado no encuentro el error.


//+------------------------------------------------------------------+
//| Declaracion de variables
//+------------------------------------------------------------------+input double Lote=0.01; // Lotes
input int magic=7777777; // magic
//+------------------------------------------------------------------+
//| Declarar variables para almacenar los manejadores de indicadores |
//+------------------------------------------------------------------+
int rsi_handle;
int CCI_handle;
//+------------------------------------------------------------------+
//| Declarar variables para almacenar los datos de los indicadores |
//+------------------------------------------------------------------+
double rsi_buffer[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
rsi_handle=iRSI(Symbol(),Period(),14,PRICE_CLOSE);

if(rsi_handle==INVALID_HANDLE)
{
Alert("Error al cargar el indicador, intentar de nuevo");
return(-1);
}

return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(rsi_handle!=INVALID_HANDLE)IndicatorRelease(rsi _handle);

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CopyBuffer(rsi_handle,0,0,3,rsi_buffer)<0) // manejador del indicador // número del buffer del indicador //posición de inicio // cantidad de datos a copiar // array de destino en el que se copian los datos
{
return;
}

if(!ArraySetAsSeries(rsi_buffer,true))
{
return;
}

if(!PositionSelect(_Symbol))
{

MqlTradeRequest mrequest;
MqlTradeResult mresult;
ZeroMemory(mrequest);
mrequest.action = TRADE_ACTION_DEAL;
mrequest.symbol = Symbol();
mrequest.volume = Lote;
mrequest.magic = magic;

if (rsi_buffer[2]<30 && rsi_buffer[1]>30)
{

mrequest.type = ORDER_TYPE_BUY;
mrequest.price = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

}
else if(rsi_buffer[2]>70 && rsi_buffer[1]<70)
{

mrequest.type=ORDER_TYPE_SELL;
mrequest.price = SymbolInfoDouble(Symbol(),SYMBOL_BID);

}

}
}

No se si hay otra forma de implantar el código aquí, me refiero a que visualmente se asemeje a cuando lo haces en el editor del metatrader 5, y si lo hay ¿me podríais decir como hacerlo? ya que he copiado y pegado directamente.

Espero que podáis echarme una mano.

Un saludo y muchas gracias.
Foro de Forex Trading United