Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 544

 
Vitalii Ananev:
Tem de ser o próprio utilizador a definir manualmente o nível nas definições do indicador. Por defeito, não há nível 50. Eu mostrei na fotografia acima.

Fi-lo, mas não está reflectido. Devo ter entendido mal outra 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:

O RSI é um oscilador, não mostra uma tendência.

Adicionar outro indicador de tendência, por exemplo, MA

Compreendo o que está a dizer, mas estou a ficar confuso sem um abafamento.

O principal para mim é ter um algoritmo lógica e tecnicamente correcto.

Vou abrir: abaixo de 30 - Vender, acima de 70 - Comprar.

 
edutak:

Compreendo o que está a dizer, mas continuo sem um muving - fico confuso.

O principal para mim é fazer um algoritmo lógica e tecnicamente correcto

Vou abrir: abaixo de 30 - Vender, acima de 70 - Comprar.

Então faça-o melhor se o rsi cruzar 50 de baixo para cima - Comprar, de cima para baixo - Vender.

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

Eu fiz isso. Certo?

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:

Então faça-o melhor se o rsi cruzar 50 de baixo para cima comprar, de cima para baixo vender.

Não, eu tenho uma ideia diferente.
 
edutak:

Eu fiz isso. Certo?

Sem erros lógicos.

...

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

Esta entrada seria então supérflua.

 
Vitalii Ananev:

Sem erros lógicos.

...

Esta entrada seria então redundante.

Obrigado, vou então refazê-lo e seguir em frente.
 
edutak:
Obrigado, vou então refazê-lo e seguir em frente.
De nada. Boa sorte com isso.
 
Espere, como é que o leva então para configurações externas?
 
edutak:
Espere, então como é que o coloca nas configurações externas?

O que colocar nas configurações externas?

Se se refere às definições para os níveis a serem optimizados e alterados pelo utilizador, já as tem em vigor.

extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
Razão: