Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 544

 
Vitalii Ananev:
Tienes que fijar el nivel tú mismo en los ajustes del indicador manualmente. Por defecto no hay nivel 50. que mostré en la imagen de arriba.

Lo hice, pero no se refleja. Debo haber entendido mal otra vez(

extern double RSI          = 10;
extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
extern double Lots         = 0.01;
extern int    Slip         = 30;
extern int    Magic        = 125;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int kolpos=0;
   double rsi=0,uroven70=70,uroven30=30,uroven50=50;
   rsi=iRSI(Symbol(),0,10,PRICE_CLOSE,1);
   for(int pos=0; pos<OrdersTotal(); pos++) 
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;
     }
   if(kolpos==0)
     {
      if (rsi>uroven70) 
         OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,"",Magic,0,clrGreen);
      if (rsi<uroven30) 
         OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,"",Magic,0,clrRed);
     }
 }
 
Vitalii Ananev:

El RSI es un oscilador, no muestra una tendencia.

Añadir otro indicador de tendencia, por ejemplo, MA

Entiendo lo que dices, pero me estoy confundiendo sin un muwing.

Lo principal para mí es tener un algoritmo lógica y técnicamente correcto.

Sólo abriré: por debajo de 30 - Vender, por encima de 70 - Comprar.

 
edutak:

Entiendo lo que dices, pero sigo sin muving - me confundo.

Lo principal para mí es hacer un algoritmo lógica y técnicamente correcto

Sólo abriré: por debajo de 30 - Vender, por encima de 70 - Comprar.

Entonces hazlo mejor si el rsi cruza 50 de abajo hacia arriba - Compra, de arriba hacia abajo - Venta.

void OnTick()
  {
   int kolpos=0;
   double rsi=0,uroven70=70,uroven30=30,uroven50=50;
   rsi=iRSI(Symbol(),0,10,PRICE_CLOSE,1);
   rsi2=iRSI(Symbol(),0,10,PRICE_CLOSE,2);
   for(int pos=0; pos<OrdersTotal(); pos++) 
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;
     }
   if(kolpos==0)
     {
      if (rsi>=uroven50 && rsi2<uroven50) 
         OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,"",Magic,0,clrGreen);
      if (rsi<=uroven50 && rsi2>uroven50) 
         OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,"",Magic,0,clrRed);
     }
 }
 

Yo lo hice. ¿Verdad?

extern double RSI          = 10;
extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
extern double Lots         = 0.01;
extern int    Slip         = 30;
extern int    Magic        = 125;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int kolpos=0;
   double rsi=0,uroven70=RSI_uroven_1,uroven30=RSI_uroven_2,uroven50=RSI_uroven_3;
   rsi=iRSI(Symbol(),0,10,PRICE_CLOSE,1);
   for(int pos=0; pos<OrdersTotal(); pos++) 
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;
     }
   if(kolpos==0)
     {
      if (rsi>RSI_uroven_1) 
         OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,"",Magic,0,clrGreen);
      if (rsi<RSI_uroven_2) 
         OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,"",Magic,0,clrRed);
     }
 }
 
Vitalii Ananev:

Entonces hazlo mejor si el rsi cruza 50 de abajo hacia arriba compra, de arriba hacia abajo vende.

No, tengo una idea diferente.
 
edutak:

Yo lo hice. ¿Verdad?

No hay errores lógicos.

...

uroven70=RSI_uroven_1,uroven30=RSI_uroven_2,uroven50=RSI_uroven_3;

Esta entrada sería entonces superflua.

 
Vitalii Ananev:

No hay errores lógicos.

...

Esta entrada sería entonces redundante.

Gracias, lo reharé entonces y seguiré adelante.
 
edutak:
Gracias, lo reharé entonces y seguiré adelante.
De nada. Buena suerte con eso.
 
Espera, ¿cómo lo llevas a la configuración externa entonces?
 
edutak:
Espera, ¿entonces cómo lo pones en la configuración externa?

¿Qué poner en los ajustes externos?

Si te refieres a los ajustes para que los niveles sean optimizados y modificados por el usuario, ya los tienes en marcha.

extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
Razón de la queja: