Связать несвязуемое, RSI+MA

 
Добрый день! Появилась странная задача, может кто Ее решал. Нужно связать 2 индикатора ктр.будут расположенны в подвале "внизу графика", и при пересечении одного из другим (MA - RSI) создадут событие. Вроде все просто, но MA выдаёт цену, а RSI нет, как их сравнить? Есть идеи?
 
Eugeny Kotovschikov:
Добрый день! Появилась странная задача, может кто Ее решал. Нужно связать 2 индикатора ктр.будут расположенны в подвале "внизу графика", и при пересечении одного из другим (MA - RSI) создадут событие. Вроде все просто, но MA выдаёт цену, а RSI нет, как их сравнить? Есть идеи?

  1. Прикрепить к графику RSI.
  2. Добавить на него же МА. В параметре "Применить к" указать First indicator's data.
  3. Профит!


 
Ihor Herasko:

  1. Прикрепить к графику RSI.
  2. Добавить на него же МА. В параметре "Применить к" указать First indicator's data.
  3. Профит!



Спас, тоже разобрался))

 

Программно всё очень просто: нужно при создании индикатора MA указать в ENUM_APPLIED_PRICE хендл индикатора RSI:

//+------------------------------------------------------------------+
//|                                First indicator's data RSI MA.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input int      Input1=1;
//---
int    handle_iMA;                           // variable for storing the handle of the iMA indicator 
int    handle_iRSI;                          // variable for storing the handle of the iRSI indicator
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create handle of the indicator iRSI
   handle_iRSI=iRSI(Symbol(),Period(),14,PRICE_CLOSE);
//--- if the handle is not created 
   if(handle_iRSI==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iRSI indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//--- create handle of the indicator iMA
   handle_iMA=iMA(Symbol(),Period(),15,0,MODE_EMA,handle_iRSI);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   string text="";
   text="RSI(#0): "+DoubleToString(iRSIGet(0),2)+"\n";
   text+="MA from RSI(#0): "+DoubleToString(iMAGet(0),2)+"\n";
   Comment(text);
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iMA                                 |
//+------------------------------------------------------------------+
double iMAGet(const int index)
  {
   double MA[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iMA,0,index,1,MA)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(MA[0]);
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iRSI                                |
//+------------------------------------------------------------------+
double iRSIGet(const int index)
  {
   double RSI[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iRSI array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iRSI,0,index,1,RSI)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iRSI indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(RSI[0]);
  }
//+------------------------------------------------------------------+

df

First indicator's data RSI MA

j

 

Все, все, дошло)))) спасибо всем, вопрос снят! я просто не знал про First indicator's data

 
Eugeny Kotovschikov:
Добрый день! Появилась странная задача, может кто Ее решал. Нужно связать 2 индикатора ктр.будут расположенны в подвале "внизу графика", и при пересечении одного из другим (MA - RSI) создадут событие. Вроде все просто, но MA выдаёт цену, а RSI нет, как их сравнить? Есть идеи?

Все, что вам посоветовали выше, скорее всего это не то, о чем вы спрашивали. Когда два индикатора находятся в одном подокне, это не значит, что они рассчитывается один от другого. Чаще всего они работают независимо, но только вписываются в подокно по вертикали. Программно получить тот же эффект можно рассчитав от каждого индикатора WPR с периодом 200-300 баров.

Используя First indicator's data вы получаете банальную сигнальную линию как у стохастика.

 
Dmitry Fedoseev:

Все, что вам посоветовали выше, скорее всего это не то, о чем вы спрашивали. Когда два индикатора находятся в одном подокне, это не значит, что они рассчитывается один от другого. Чаще всего они работают независимо, но только вписываются в подокно по вертикали. Программно получить тот же эффект можно рассчитав от каждого индикатора WPR с периодом 200-300 баров.

Используя First indicator's data вы получаете банальную сигнальную линию как у стохастика.


Я понял Вас, сначала как раз думал рассчитывать значения 2х индикаторов относительно вертикали. А что такое WPR?

 
Eugeny Kotovschikov:

Я понял Вас, сначала как раз думал рассчитывать значения 2х индикаторов относительно вертикали. А что такое WPR?


WPR - Процентный Диапазон Вильямса. Вот пример его расчета, только от цены, а надо тоже самое, но от одного индикатора и от другого, и период побольше.

 

Вам надо перевести процент уровня RSI в цену и таким образом сравнивать показания. Сейчас же Вы усреднили значение RSI, что не совсем верно.

Какие значимые уровни по RSI и параметры RSI и MA у Вас - сброшу скрин, как это выглядеть будет на чарте - может оно Вам и не надо...

 

Ищите индикатор "RSI on Chart" и индикатор "MA в подвале". Делаете по аналогии.