RVITrend_x10Full

Author: 2015, Nikolay Kositsin
Price Data Components
Indicators Used
Relative Vigor index
0 Views
0 Downloads
0 Favorites
RVITrend_x10Full

//+------------------------------------------------------------------+
//|                                             RVITrend_x10Full.mq5 |
//|                               Copyright © 2015, Nikolay Kositsin |
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
#property copyright "2015, Nikolay Kositsin"
#property link      "farria@mail.redcom.ru"
#property description "Èíäèêàòîð îòîáðàæàåò ïîëîæåíèå îñöèëëÿòîðà RVI ñ ðàçíûõ òàéìôðåéìîâ"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 0
#property indicator_buffers 0 
//---- íå èñïîëüçîâàíî íè îäíîãî ãðàôè÷åñêîãî ïîñòðîåíèÿ
#property indicator_plots   0
//+-----------------------------------+
//|  îáúÿâëåíèå êîíñòàíò              |
//+-----------------------------------+
#define RESET 0          // Êîíñòàíòà äëÿ âîçâðàòà òåðìèíàëó êîìàíäû íà ïåðåñ÷¸ò èíäèêàòîðà
#define INDTOTAL 10      // Êîíñòàíòà äëÿ êîëè÷åñòâà îòîáðàæàåìûõ èíäèêàòîðîâ
//+----------------------------------------------+
// Îïèñàíèå ïåðå÷èñëåíèÿ type_font               |
// Îïèñàíèå êëàññà CFontName                     | 
//+----------------------------------------------+ 
#include <GetFontName.mqh>
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà                 |
//+----------------------------------------------+
input ENUM_TIMEFRAMES      TimeFrame1=PERIOD_H1;       //ïåðèîä ãðàôèêà 1
input uint                 RVIPeriod1=7;               //ïåðèîä RVI 1
input double               UpLevel1=+0.2;              //óðîâåíü ïåðåçàêóïà 1
input double               DnLevel1=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 1

input ENUM_TIMEFRAMES      TimeFrame2=PERIOD_H1;       //ïåðèîä ãðàôèêà 2
input uint                 RVIPeriod2=11;              //ïåðèîä RVI 2
input double               UpLevel2=+0.2;              //óðîâåíü ïåðåçàêóïà 2
input double               DnLevel2=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 2

input ENUM_TIMEFRAMES      TimeFrame3=PERIOD_H1;       //ïåðèîä ãðàôèêà 3
input uint                 RVIPeriod3=15;              //ïåðèîä RVI 3
input double               UpLevel3=+0.2;              //óðîâåíü ïåðåçàêóïà 3
input double               DnLevel3=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 3

input ENUM_TIMEFRAMES      TimeFrame4=PERIOD_H1;       //ïåðèîä ãðàôèêà 4
input uint                 RVIPeriod4=19;              //ïåðèîä RVI 4
input double               UpLevel4=+0.2;              //óðîâåíü ïåðåçàêóïà 4
input double               DnLevel4=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 4

input ENUM_TIMEFRAMES      TimeFrame5=PERIOD_H1;       //ïåðèîä ãðàôèêà 5
input uint                 RVIPeriod5=23;              //ïåðèîä RVI 5
input double               UpLevel5=+0.2;              //óðîâåíü ïåðåçàêóïà 5
input double               DnLevel5=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 5

input ENUM_TIMEFRAMES      TimeFrame6=PERIOD_H1;       //ïåðèîä ãðàôèêà 6
input uint                 RVIPeriod6=27;              //ïåðèîä RVI 6
input double               UpLevel6=+0.2;              //óðîâåíü ïåðåçàêóïà 6
input double               DnLevel6=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 6

input ENUM_TIMEFRAMES      TimeFrame7=PERIOD_H1;       //ïåðèîä ãðàôèêà 7
input uint                 RVIPeriod7=31;              //ïåðèîä RVI 7
input double               UpLevel7=+0.2;              //óðîâåíü ïåðåçàêóïà 7
input double               DnLevel7=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 7

input ENUM_TIMEFRAMES      TimeFrame8=PERIOD_H1;       //ïåðèîä ãðàôèêà 8
input uint                 RVIPeriod8=35;              //ïåðèîä RVI 8
input double               UpLevel8=+0.2;              //óðîâåíü ïåðåçàêóïà 8
input double               DnLevel8=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 8

input ENUM_TIMEFRAMES      TimeFrame9=PERIOD_H1;       //ïåðèîä ãðàôèêà 9
input uint                 RVIPeriod9=39;              //ïåðèîä RVI 9
input double               UpLevel9=+0.2;              //óðîâåíü ïåðåçàêóïà 9
input double               DnLevel9=-0.2;              //óðîâåíü ïåðåïðîäàííîñòè 9

input ENUM_TIMEFRAMES      TimeFrame10=PERIOD_H1;      //ïåðèîä ãðàôèêà 10
input uint                 RVIPeriod10=43;             //ïåðèîä RVI 10
input double               UpLevel10=70;               //óðîâåíü ïåðåçàêóïà 10
input double               DnLevel10=30;               //óðîâåíü ïåðåïðîäàííîñòè 10
//----
input color  CpColor=clrDarkOrchid;                   //öâåò íàçâàíèÿ èíäèêàòîðà
input color  UpColor=clrDodgerBlue;                   //öâåò ïåðåêóïëåííîñòè èíäèêàòîðà
input color  DnColor=clrRed;                          //öâåò ïåðåïðîäàííîñòè èíäèêàòîðà
input color  ZrColor=clrGray;                         //öâåò áåç èçìåíåíèÿ
input int    FontSize=11;                             //ðàçìåð øðèôòà
input type_font FontType=Font14;                      //òèï øðèôòà
input ENUM_BASE_CORNER  WhatCorner=CORNER_LEFT_LOWER; //óãîë ðàñïîëîæåíèÿ
input uint Y_=20;                                     //ðàñïîëîæåíèå ïî âåðòèêàëè
input uint X_=5;                                      //ðàñïîëîæåíèå ïî ãîðèçîíòàëè
//+----------------------------------------------+
string sFontType;
int min_rates_total;
uint xshift,shift[11];
string sPer[10],sPerA[10],sPerB[10],Cap;
ENUM_TIMEFRAMES ePer[10];
//+------------------------------------------------------------------+
//| Ïîëó÷åíèå òàéìôðåéìà â âèäå ñòðîêè                               |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
  {return(StringSubstr(EnumToString(timeframe),7,-1));}
//+------------------------------------------------------------------+
//|  Êëàññ ìàññèâîâ                                                  |
//+------------------------------------------------------------------+  
class CIndArrow
  {
   //----
public:
   double               m_Ind[1];
   int                  m_Handle;
   ENUM_TIMEFRAMES      m_TimeFrame;
   uint                 m_Period;
   double               m_UpLevel;
   double               m_DnLevel;
   //---- 
  };
//---- îáúÿâëåíèå ìàññèâîâ, êîòîðûå áóäóò â 
// äàëüíåéøåì èñïîëüçîâàíû äëÿ ïîëó÷åíèÿ èíäèêàòîðíûõ çíà÷åíèé
CIndArrow Ind[INDTOTAL];
//+------------------------------------------------------------------+   
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit()
  {
//----  
   ePer[0]=TimeFrame1;
   ePer[1]=TimeFrame2;
   ePer[2]=TimeFrame3;
   ePer[3]=TimeFrame4;
   ePer[4]=TimeFrame5;
   ePer[5]=TimeFrame6;
   ePer[6]=TimeFrame7;
   ePer[7]=TimeFrame8;
   ePer[8]=TimeFrame9;
   ePer[9]=TimeFrame10;
   for(int poz=0; poz<INDTOTAL; poz++) Ind[poz].m_TimeFrame=ePer[poz];
   //----  
   Ind[0].m_Period=RVIPeriod1;
   Ind[1].m_Period=RVIPeriod2;
   Ind[2].m_Period=RVIPeriod3;
   Ind[3].m_Period=RVIPeriod4;
   Ind[4].m_Period=RVIPeriod5;
   Ind[5].m_Period=RVIPeriod6;
   Ind[6].m_Period=RVIPeriod7;
   Ind[7].m_Period=RVIPeriod8;
   Ind[8].m_Period=RVIPeriod9;
   Ind[9].m_Period=RVIPeriod10;
   //----  
   Ind[0].m_UpLevel=UpLevel1;
   Ind[1].m_UpLevel=UpLevel2;
   Ind[2].m_UpLevel=UpLevel3;
   Ind[3].m_UpLevel=UpLevel4;
   Ind[4].m_UpLevel=UpLevel5;
   Ind[5].m_UpLevel=UpLevel6;
   Ind[6].m_UpLevel=UpLevel7;
   Ind[7].m_UpLevel=UpLevel8;
   Ind[8].m_UpLevel=UpLevel9;
   Ind[9].m_UpLevel=UpLevel10;
   //----  
   Ind[0].m_DnLevel=DnLevel1;
   Ind[1].m_DnLevel=DnLevel2;
   Ind[2].m_DnLevel=DnLevel3;
   Ind[3].m_DnLevel=DnLevel4;
   Ind[4].m_DnLevel=DnLevel5;
   Ind[5].m_DnLevel=DnLevel6;
   Ind[6].m_DnLevel=DnLevel7;
   Ind[7].m_DnLevel=DnLevel8;
   Ind[8].m_DnLevel=DnLevel9;
   Ind[9].m_DnLevel=DnLevel10;
//---- Ïîëó÷åíèå õåíäëîâ èíäèêàòîðîâ
   for(int poz=0; poz<INDTOTAL; poz++)
     {
      Ind[poz].m_Handle=iRVI(Symbol(),Ind[poz].m_TimeFrame,Ind[poz].m_Period);

      if(Ind[poz].m_Handle==INVALID_HANDLE)
        {
         Print("OnInit()(",poz,"): Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà RVI",poz);
         return(false);
        }
     }
//----   
   CFontName FONT;
   sFontType=FONT.GetFontName(FontType);
   Deinit();
   uint max=0;
   for(int poz=0; poz<INDTOTAL; poz++) if(Ind[poz].m_Period>max) max=Ind[poz].m_Period;
   min_rates_total=int(max+1);
//----  
   xshift=int(X_+8.3*FontSize);
   Cap="RVITrend_x10Full";
//----
   switch(WhatCorner)
     {
      case CORNER_RIGHT_LOWER:
        {
         for(int poz=0; poz<=INDTOTAL; poz++) shift[10-poz]=Y_+22*poz;
         break;
        }

      case CORNER_LEFT_LOWER:
        {
         for(int poz=0; poz<=INDTOTAL; poz++) shift[10-poz]=Y_+22*poz;
         break;
        }
      default:
        {
         for(int poz=0; poz<=INDTOTAL; poz++) shift[poz]=Y_+22*poz;
        }
     }

   for(int poz=0; poz<INDTOTAL; poz++)
     {
      sPer[poz]=string(poz+1)+" "+GetStringTimeframe(ePer[poz]);
      sPerA[poz]=sPer[poz]+"Stat+";
      sPerB[poz]=sPer[poz]+"Stat_";
     }
//--- çàâåðøåíèå èíèöèàëèçàöèè
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//----
   Deinit();
//----
   ChartRedraw(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+    
void Deinit()
  {
//----
   for(int poz=0; poz<INDTOTAL; poz++)
     {
      ObjectDelete(0,sPerA[poz]);
      ObjectDelete(0,sPerB[poz]);
     }
   ObjectDelete(0,Cap);
//----
  }
//+------------------------------------------------------------------+
//|  Ñîçäàíèå òåêñòîâîé ëåéáû                                        |
//+------------------------------------------------------------------+
void CreateTLabel
(
long   chart_id,         // èäåíòèôèêàòîð ãðàôèêà
string name,             // èìÿ îáúåêòà
int    nwin,             // èíäåêñ îêíà
ENUM_BASE_CORNER corner, // ïîëîæåíèå óãëà ïðèâÿçêè
ENUM_ANCHOR_POINT point, // ïîëîæåíèå òî÷êè ïðèâÿçêè
int    X,                // äèñòàíöèÿ â ïèêñåëÿõ ïî îñè X îò óãëà ïðèâÿçêè
int    Y,                // äèñòàíöèÿ â ïèêñåëÿõ ïî îñè Y îò óãëà ïðèâÿçêè
string text,             // òåêñò
color  Color,            // öâåò òåêñòà
string Font,             // øðèôò òåêñòà
int    Size              // ðàçìåð øðèôòà
)
//---- 
  {
//----
   ObjectCreate(chart_id,name,OBJ_LABEL,0,0,0);
   ObjectSetInteger(chart_id,name,OBJPROP_CORNER,corner);
   ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,point);
   ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,X);
   ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,Y);
   ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
   ObjectSetString(chart_id,name,OBJPROP_FONT,Font);
   ObjectSetInteger(chart_id,name,OBJPROP_FONTSIZE,Size);
   ObjectSetInteger(chart_id,name,OBJPROP_BACK,false);
//----
  }
//+------------------------------------------------------------------+
//|  Ïåðåóñòàíîâêà òåêñòîâîé ëåéáû                                   |
//+------------------------------------------------------------------+
void SetTLabel
(
long   chart_id,         // èäåíòèôèêàòîð ãðàôèêà
string name,             // èìÿ îáúåêòà
int    nwin,             // èíäåêñ îêíà
ENUM_BASE_CORNER corner,// ïîëîæåíèå óãëà ïðèâÿçêè
ENUM_ANCHOR_POINT point, // ïîëîæåíèå òî÷êè ïðèâÿçêè
int    X,                // äèñòàíöèÿ â ïèêñåëÿõ ïî îñè X îò óãëà ïðèâÿçêè
int    Y,                // äèñòàíöèÿ â ïèêñåëÿõ ïî îñè Y îò óãëà ïðèâÿçêè
string text,             // òåêñò
color  Color,            // öâåò òåêñòà
string Font,             // øðèôò òåêñòà
int    Size              // ðàçìåð øðèôòà
)
//---- 
  {
//----
   if(ObjectFind(chart_id,name)==-1) CreateTLabel(chart_id,name,nwin,corner,point,X,Y,text,Color,Font,Size);
   else
     {
      ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,X);
      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
     }
//----
  }
//+------------------------------------------------------------------+ 
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+ 
int OnCalculate(
                const int rates_total,    // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
                const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]
                )
  {
//--- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
   for(int poz=0; poz<INDTOTAL; poz++) if(Bars(Symbol(),ePer[poz])<min_rates_total) return(RESET);

//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâû 
   for(int poz=0; poz<INDTOTAL; poz++) if(CopyBuffer(Ind[poz].m_Handle,MAIN_LINE,1,1,Ind[poz].m_Ind)<=0) return(RESET);
//----
   color ColorGain[INDTOTAL];
   ArrayInitialize(ColorGain,ZrColor);
//---- êîïèðóåì âíîâü ïîÿâèâøèåñÿ äàííûå â ìàññèâû 
   for(int poz=0; poz<INDTOTAL; poz++)
     {
      if(Ind[poz].m_Ind[0]>Ind[poz].m_UpLevel) ColorGain[poz]=UpColor;
      if(Ind[poz].m_Ind[0]<Ind[poz].m_DnLevel) ColorGain[poz]=DnColor;
     }
//----
   for(int poz=0; poz<INDTOTAL; poz++)
     {
      SetTLabel(0,sPerA[poz],0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_,shift[poz+1],sPer[poz]+": ",ColorGain[poz],sFontType,FontSize);
      SetTLabel(0,sPerB[poz],0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),xshift,shift[poz+1],"n",ColorGain[poz],"Wingdings",FontSize);
     }
   SetTLabel(0,Cap,0,WhatCorner,ENUM_ANCHOR_POINT(2*WhatCorner),X_,shift[0],Cap,CpColor,sFontType,FontSize);
//----
   ChartRedraw(0);
   return(rates_total);
  }
//+------------------------------------------------------------------+

   

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---