Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 544

 
Vitalii Ananev:
Devi impostare il livello tu stesso nelle impostazioni dell'indicatore manualmente. Di default non c'è il livello 50. L'ho mostrato nella foto qui sopra.

L'ho fatto, ma non si riflette. Devo aver di nuovo frainteso (e non ho capito niente).

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:

L'RSI è un oscillatore, non mostra una tendenza.

Aggiungere un altro indicatore di tendenza, ad esempio MA

Capisco quello che dici, ma mi confondo senza un muwing.

La cosa principale per me è avere un algoritmo logicamente e tecnicamente corretto.

Mi limiterò ad aprire: sotto 30 - Vendi, sopra 70 - Compra.

 
edutak:

Capisco quello che dici, ma sono ancora senza muving - mi confondo.

La cosa principale per me è fare un algoritmo logicamente e tecnicamente corretto

Mi limiterò ad aprire: sotto 30 - Vendi, sopra 70 - Compra.

Allora fallo meglio se l'rsi incrocia 50 dal basso verso l'alto - Compra, dall'alto verso il basso - Vendi.

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

L'ho fatto. Giusto?

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:

Allora fallo meglio se l'rsi attraversa 50 dal basso verso l'alto compra, dall'alto verso il basso vendi.

No, ho un'idea diversa.
 
edutak:

L'ho fatto. Giusto?

Nessun errore logico.

...

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

Questa voce sarebbe allora superflua.

 
Vitalii Ananev:

Nessun errore logico.

...

Questa voce sarebbe quindi ridondante.

Grazie, lo rifarò allora e andrò avanti.
 
edutak:
Grazie, lo rifarò allora e andrò avanti.
Non c'è di che. Buona fortuna.
 
Aspetta, come si fa a portarlo su impostazioni esterne allora?
 
edutak:
Aspetta, allora come si fa a metterlo nelle impostazioni esterne?

Cosa mettere nelle impostazioni esterne?

Se ti riferisci alle impostazioni per i livelli che possono essere ottimizzati e modificati dall'utente, le hai già.

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