DeMarkerTrend_x10

Author: 2015, Nikolay Kositsin
Price Data Components
Indicators Used
DeMarker indicator
0 Views
0 Downloads
0 Favorites
DeMarkerTrend_x10
//+------------------------------------------------------------------+
//|                                            DeMarkerTrend_x10.mq5 |
//|                               Copyright © 2015, Nikolay Kositsin |
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
#property copyright "2015, Nikolay Kositsin"
#property link      "farria@mail.redcom.ru"
#property description "Èíäèêàòîð îòîáðàæàåò ïîëîæåíèå îñöèëëÿòîðà DeMarker ñ ðàçíûõ òàéìôðåéìîâ"
//---- íîìåð âåðñèè èíäèêàòîðà
#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 TimeFrame0=PERIOD_H1;           //ïåðèîä ãðàôèêà 1
input ENUM_TIMEFRAMES TimeFrame1=PERIOD_H2;           //ïåðèîä ãðàôèêà 2
input ENUM_TIMEFRAMES TimeFrame2=PERIOD_H3;           //ïåðèîä ãðàôèêà 3
input ENUM_TIMEFRAMES TimeFrame3=PERIOD_H4;           //ïåðèîä ãðàôèêà 4
input ENUM_TIMEFRAMES TimeFrame4=PERIOD_H6;           //ïåðèîä ãðàôèêà 5
input ENUM_TIMEFRAMES TimeFrame5=PERIOD_H8;           //ïåðèîä ãðàôèêà 6
input ENUM_TIMEFRAMES TimeFrame6=PERIOD_H12;          //ïåðèîä ãðàôèêà 7
input ENUM_TIMEFRAMES TimeFrame7=PERIOD_D1;           //ïåðèîä ãðàôèêà 8
input ENUM_TIMEFRAMES TimeFrame8=PERIOD_W1;           //ïåðèîä ãðàôèêà 9
input ENUM_TIMEFRAMES TimeFrame9=PERIOD_MN1;          //ïåðèîä ãðàôèêà 10 
//---- Ïàðàìåòðû DeMarker
input int   DeMarkerPeriod=14;
input double UpLevel=0.7;                             //óðîâåíü ïåðåçàêóïà
input double DnLevel=0.3;                             //óðîâåíü ïåðåïðîäàííîñòè
//----
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;
   //---- 
  };
//---- îáúÿâëåíèå ìàññèâîâ, êîòîðûå áóäóò â 
// äàëüíåéøåì èñïîëüçîâàíû äëÿ ïîëó÷åíèÿ èíäèêàòîðíûõ çíà÷åíèé
CIndArrow Ind[INDTOTAL];
//+------------------------------------------------------------------+   
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit()
  {
//----  
   ePer[0]=TimeFrame0;
   ePer[1]=TimeFrame1;
   ePer[2]=TimeFrame2;
   ePer[3]=TimeFrame3;
   ePer[4]=TimeFrame4;
   ePer[5]=TimeFrame5;
   ePer[6]=TimeFrame6;
   ePer[7]=TimeFrame7;
   ePer[8]=TimeFrame8;
   ePer[9]=TimeFrame9;
   for(int poz=0; poz<INDTOTAL; poz++) Ind[poz].m_TimeFrame=ePer[poz];
//---- Ïîëó÷åíèå õåíäëîâ èíäèêàòîðîâ
   for(int poz=0; poz<INDTOTAL; poz++)
     {
      Ind[poz].m_Handle=iDeMarker(Symbol(),Ind[poz].m_TimeFrame,DeMarkerPeriod);

      if(Ind[poz].m_Handle==INVALID_HANDLE)
        {
         Print("OnInit()(",poz,"): Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà DeMarker");
         return(false);
        }
     }
//----   
   CFontName FONT;
   sFontType=FONT.GetFontName(FontType);
   Deinit();
   min_rates_total=int(DeMarkerPeriod)+1;
//----  
   xshift=int(X_+8.3*FontSize);
   Cap="DeMarkerTrend_x10";
//----
   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]=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]>UpLevel) ColorGain[poz]=UpColor;
      if(Ind[poz].m_Ind[0]<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 ---