Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 544

 
Vitalii Ananev:
Уровень надо самому задать в настройках индикатора в ручную. По умолчанию уровня 50 нет. Я показывал на картинке выше.

Так сделал, но не отражается. Наверно снова не понял(

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:

RSI это осциллятор он не показывает тренд.

Добавьте еще  какой нибудь трендовый индикатор например МА

Понимаю о чем вы говорите, но я пока без мувинга - запутаюсь. 

Для меня главное, логически и технически правильно составить алгоритм 

Буду просто открывать: ниже 30 - Селл, выше 70 - Бай. 

 
edutak:

Понимаю о чем вы говорите, но я пока без мувинга - запутаюсь. 

Для меня главное, логически и технически правильно составить алгоритм 

Буду просто открывать: ниже 30 - Селл, выше 70 - Бай. 

Тогда уж сделайте лучше если рси пересекает 50 снизу вверх бай, сверху вниз селл.

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

Так сделал. Правильно?

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:

Тогда уж сделайте лучше если рси пересекает 50 снизу вверх бай, сверху вниз селл.

Нет, у меня другая идея.
 
edutak:

Так сделал. Правильно?

Логических ошибок нет. 

...

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

 Эта запись тогда лишняя будет.

 
Vitalii Ananev:

Логических ошибок нет. 

...

 Эта запись тогда лишняя будет.

Спасибо, тогда переделаю и буду дальше делать.
 
edutak:
Спасибо, тогда переделаю и буду дальше делать.
Не за что. Удачи.
 
Подождите, а как тогда во внешние настройки вынести?
 
edutak:
Подождите, а как тогда во внешние настройки вынести?

Что вынести во внешние настройки?

Если вы имеете в виду настройки уровней для возможности оптимизации и изменении их пользователем, то они уже у вас вынесены. 

extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
Причина обращения: