Questions des débutants MQL5 MT5 MetaTrader 5 - page 544

 
Vitalii Ananev:
Vous devez régler le niveau vous-même dans les paramètres de l'indicateur manuellement. Par défaut, il n'y a pas de niveau 50. Je l'ai montré sur la photo ci-dessus.

Je l'ai fait, mais cela ne se reflète pas. J'ai encore dû mal comprendre.

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:

Le RSI est un oscillateur, il ne montre pas de tendance.

Ajouter un autre indicateur de tendance, par exemple le MA

Je comprends ce que vous dites, mais je m'embrouille sans le muwing.

L'essentiel pour moi est d'avoir un algorithme logiquement et techniquement correct.

Je vais juste ouvrir : en dessous de 30 - Vendre, au-dessus de 70 - Acheter.

 
edutak:

Je comprends ce que vous dites, mais je suis toujours sans mutisme - je suis confus.

L'essentiel pour moi est de créer un algorithme logiquement et techniquement correct.

Je vais juste ouvrir : en dessous de 30 - Vendre, au-dessus de 70 - Acheter.

Ensuite, faites-le mieux si le rsi traverse 50 de bas en haut - Achetez, de haut en bas - Vendez.

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

Je l'ai fait. N'est-ce pas ?

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:

Ensuite, faites-le mieux si le rsi croise 50 de bas en haut acheter, de haut en bas vendre.

Non, j'ai une idée différente.
 
edutak:

Je l'ai fait. N'est-ce pas ?

Aucune erreur logique.

...

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

Cette entrée serait alors superflue.

 
Vitalii Ananev:

Aucune erreur logique.

...

Cette entrée serait alors redondante.

Merci, je vais le refaire et passer à autre chose.
 
edutak:
Merci, je vais le refaire et passer à autre chose.
Vous êtes les bienvenus. Bonne chance avec ça.
 
Attends, comment tu le prends dans les paramètres externes alors ?
 
edutak:
Attends, alors comment tu le mets dans les paramètres externes ?

Que mettre dans les paramètres externes ?

Si vous faites référence aux paramètres permettant d'optimiser et de modifier les niveaux par l'utilisateur, vous les avez déjà mis en place.

extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
Raison: