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

 
edutak:

Lo siento, no lo entiendo. El precio de cierre de la vela debe ser mayor que el nivel 70 del indicador.

Y el nivel 70=70. ¿A qué debería equivaler?

Close[1] se refiere al precio del instrumento. En este caso, es el precio de cierre de la primera barra. Pero no al indicador. El indicador es un derivado del precio.

En su caso, el RSI va de 0 a 100, mientras que el precio es de 1,43406. Que está muy por debajo de 70.

El nivel de 70 es el valor del indicador. Y Close[1] es el precio de cierre de la primera barra. Son cosas completamente diferentes y no se pueden comparar. Como los kilogramos con los metros.

 
Vitalii Ananev:

Close[1] se refiere al precio del instrumento. En este caso, el precio de cierre de la primera barra. Pero no al indicador. El indicador es un derivado del precio.

En su caso, el RSI va de 0 a 100, pero el precio es como en la imagen 1,43406. Que está muy por debajo de 70.

Ya veo, gracias, así que rehecho, parece que se ha abierto correctamente, pero ¿por qué no se refleja el indicador de nivel 50?

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) &&   (Open[1]<uroven70) && Volume[0]<3)
         OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,"",Magic,0,clrGreen);
      if((rsi<uroven30) &&   (Open[1]>uroven30) && Volume[0]<3)
         OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,"",Magic,0,clrRed);
     }
 }
 

¿Es esto correcto? ¿Funcionará correctamente el asesor?

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)// && Volume[0]<3)
         OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,"",Magic,0,clrGreen);
      if (rsi<uroven30)// &&   (Open[1]>uroven30) && Volume[0]<3)
         OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,"",Magic,0,clrRed);
     }
 }
 
edutak:

Ya veo, gracias, así que rehecho, parece que se ha abierto correctamente, pero ¿por qué no se refleja el indicador de nivel 50?

No veo lo que has conseguido, sólo he cambiado > por <. Lo que has rehecho, un completo disparate. Ni se te ocurra ponerlo en el real.

El nivel de 50 se fija en el propio indicador. El Asesor Experto sabe dónde está este nivel en el indicador.

 
edutak:

¿Es esto correcto? ¿Funcionará correctamente el asesor?

Así está mejor. También deberías crear un filtro. Abriría una orden de compra sólo si hay una tendencia alcista y vendería sólo si hay una tendencia bajista.
 
Vitalii Ananev:

No veo lo que has conseguido, sólo he cambiado > por <. Lo que has cambiado es una completa tontería. Ni se te ocurra ponerlo en real.

El nivel 50 se establece en el propio indicador. El Asesor Experto sabe dónde está este nivel en el indicador.

Aquí, creo que lo he abierto correctamente, pero no veo el nivel 50, mientras que el 30 y el 70 están ahí.
Archivos adjuntos:
 
Vitalii Ananev:
Así está mejor. Haz otro filtro. Abriría operaciones de compra sólo si hay una tendencia alcista y operaciones de venta sólo si hay una tendencia bajista.

Esta es la tendencia. ¿Verdad?

if (rsi>uroven70)

if (rsi<uroven30)
 
edutak:
Aquí, creo que lo he abierto correctamente, pero no veo el nivel 50. El 30 y el 70 están ahí.
El nivel tiene que ajustarse manualmente en la configuración del indicador. Por defecto no hay nivel 50. que mostré en la imagen de arriba.
 
edutak:

Esta es la tendencia. ¿Verdad?

El RSI es un oscilador, no muestra una tendencia.

Añade otro indicador de tendencia como la MA.

double MA = iMA(......)

if (rsi>uroven70 && Close[1]<MA)
{
 ///SELLL
 
}

if (rsi<uroven30 && Close[1]>MA)
{
///BUY

}
 
Por favor, aconséjeme qué hacer si las operaciones no se copian automáticamente con el tamaño de lote que el operador ha posicionado, sino con volúmenes mayores.