Código:
extern double lotesrunnercorto = 0.1; // Lotes del runner corto
//extern double lotesrunnerlargo = 0.1; // Lotes del runner largo
extern double distanciaSL = 150; // Distancia a Stop Loss runner corto venta
extern double distanciaTP = 50; // Distancia a Stop Loss runner corto compra
extern double distanciabreakevencorto = 0.00400; // Distancia a Break Even runner corto
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, 0);
RSI15 = iRSI(Symbol(), PERIOD_M15, rsiperiod, PRICE_CLOSE, 0);
RSI5 = iRSI(Symbol(), PERIOD_M5, rsiperiod, PRICE_CLOSE, 1);
double distanciaslrunnercortoAsk = Ask + distanciaSL * Point; // Distancia a Stop Loss runner corto venta
double distanciaslrunnercortoBid = Bid - distanciaSL * Point; // Distancia a Stop Loss runner corto compra
double distanciatprunnercortoAsk = Ask - distanciaTP * Point; // Distancia a Take Profit runner corto venta
double distanciatprunnercortoBid = Bid + distanciaTP * Point; // Distancia a Take Profit runner corto compra
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, distanciaslrunnercortoBid, distanciatprunnercortoBid, 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, distanciaslrunnercortoAsk, distanciatprunnercortoAsk, 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, distanciaslrunnercortoBid, distanciatprunnercortoBid, 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, distanciaslrunnercortoAsk, distanciatprunnercortoAsk, NULL, magic,0, Blue);
}
}
}
}
}
}
//+------------------------------------------------------------------+
DIARIO DE METATRADER:
2015.01.08 23:01:46.777 EURUSD,M30: 1078845 tick events (2167 bars, 1079845 bar states) processed within 10047 ms (total time 13369 ms)
2015.01.08 23:01:45.977 2014.12.01 15:44 Triple_RSI EURUSD,M30: OrderSend error 130
2015.01.08 23:01:36.734 Triple_RSI inputs: lotesrunnercorto=0.1; distanciaSL=0.015; distanciaTP=0.005; distanciabreakevencorto=0.004; rsiperiod=14; nivelmaxrsi=70; nivelminrsi=30; magic=2143;
2015.01.08 23:01:36.718 TestGenerator: unmatched data error (high value 1.19246 at 2015.01.05 12:00 is not reached from the least timeframe, high price 1.19238 mismatches)
2015.01.08 23:01:33.410 TestGenerator: current spread 18 used
2015.01.08 22:59:47.526 Expert Moving Average EURUSD,M30: removed