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);
}
}
}
}
}
}