GANN_rvm_v4

Author: Copyright � 2005, MetaQuotes Software Corp.
GANN_rvm_v4
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
GANN_rvm_v4
//+------------------------------------------------------------------+
//|                                                  GANN_rvm_v4.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Black
#property indicator_color3 DeepSkyBlue
#property indicator_color4 Black
#property indicator_color5 Yellow
#property indicator_color6 Green
#property indicator_color7 Red
#property indicator_color8 Red
//---- input parameters
extern int       NextTF=15;
extern int       BL_Range=5;
extern int       HLN_Range=3;
extern bool      HLN_UseFullTF=false;
//---- buffers
double HLNUp_sl[];
double HLNDn_sl[];
double HLNUp[];
double HLNDn[];
double BLLev[];
double BLStep[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
//---- 
int NextTFs;
int initfl;
int Displacement;
int dig;
int ArrSize;
int ArrIdx;
int lb;
double MyArr[][10];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexStyle(6,DRAW_LINE);
   SetIndexStyle(7,DRAW_LINE);
   SetIndexBuffer(0,HLNUp_sl);
   SetIndexBuffer(1,HLNDn_sl);
   SetIndexBuffer(2,HLNUp);
   SetIndexBuffer(3,HLNDn);
   SetIndexBuffer(4,BLLev);
   SetIndexBuffer(5,BLStep);
   SetIndexBuffer(6,ExtMapBuffer7);
   SetIndexBuffer(7,ExtMapBuffer8);
   SetIndexLabel(0,"HLNextUp_sec (M"+NextTF+","+BL_Range+","+HLN_Range+","+HLN_UseFullTF+")");
   SetIndexLabel(1,"HLNextDn_sec (M"+NextTF+","+BL_Range+","+HLN_Range+","+HLN_UseFullTF+")");
   SetIndexLabel(2,"HLNextUp (M"+NextTF+","+BL_Range+","+HLN_Range+","+HLN_UseFullTF+")");
   SetIndexLabel(3,"HLNextDn (M"+NextTF+","+BL_Range+","+HLN_Range+","+HLN_UseFullTF+")");
   SetIndexLabel(4,"BalansLevel (M"+NextTF+","+BL_Range+","+HLN_Range+","+HLN_UseFullTF+")");
   SetIndexLabel(5,"BalansStep (M"+NextTF+","+BL_Range+","+HLN_Range+","+HLN_UseFullTF+")");
   SetIndexLabel(6,"1");
   SetIndexLabel(7,"2");
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexEmptyValue(2,0.0);
   SetIndexEmptyValue(3,0.0);
   SetIndexEmptyValue(4,0.0);
   SetIndexEmptyValue(5,0.0);
   SetIndexEmptyValue(6,0.0);
   SetIndexEmptyValue(7,0.0);
//----
   NextTFs=NextTF*60;
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int cb,i,limit,index,ai;
//---- 
   if( initfl!=1 )
   {
      myInit();
      if( initfl!=1 )
      {
         Alert("Èíäèêàòîð íå èíèöèàëèçèðîâàí!");
         return(-1);
      }
   }
   index=Bars-1;
   if( counted_bars>=0 )
   {
      if( index-counted_bars<=0 )
      {
         limit=0;
      }
      else
      {
         limit=index-counted_bars;
      }
   }
   else
   {
      Alert("Ñáîé! /n counted_bars < 0");
      return(-1);
   }
   //öèêë ïî áàðàì
   for( cb=limit;cb>=0;cb-- )
   {
      ai=index-cb;
      //åñëè ýòî ïåðâûé áàð
      if( cb==Bars-1 )
      {
         if( FBar(cb)<0 )
         {
            return(-1);
         }
         continue;
      }
      else
      {
         //åñëè ýòî íîâûé áàð
         if( lb!=ai )
         {
            lb=ai;
            //åñëè îí íå ÿâëÿåòñÿ íà÷àëîì íîâîãî áàðà íà ñòàðøåì ò-ô
            if( BBarBegin(cb,NextTF)!=1 )
            {
               if( NewBar(cb)<0 )
               {
                  return(-1);
               }
            }
            else
            {
               if( NBBar(cb)<0 )
               {
                  return(-1);
               }
            }
            //îòðèñîâêà õàé ëîó àêòèâàòîð
            if( HLN_UseFullTF!=1 )
            {
               if( Close[cb]>MyArr[ArrIdx-1][8] )
               {
                  HLNUp[cb]=0;
                  HLNDn[cb]=MyArr[ArrIdx-1][9];
                  
               }
               else
               {
                  if( Close[cb]<MyArr[ArrIdx-1][9] )
                  {
                     HLNUp[cb]=MyArr[ArrIdx-1][8];
                     HLNDn[cb]=0;
                  }
                  else
                  {
                     if( HLNUp[cb+1]>0 )
                     {
                        HLNUp[cb]=MyArr[ArrIdx-1][8];
                        HLNDn[cb]=0;
                     }
                     else
                     {
                        HLNUp[cb]=0;
                        HLNDn[cb]=MyArr[ArrIdx-1][9];
                     }
                  }
               }
            }
            else
            {
               if( MyArr[ArrIdx-1][5]>MyArr[ArrIdx-2][8] )
               {
                  HLNUp[cb]=0;
                  HLNDn[cb]=MyArr[ArrIdx-1][9];
               }
               else
               {
                  if( MyArr[ArrIdx-1][5]<MyArr[ArrIdx-2][9] )
                  {
                     HLNUp[cb]=MyArr[ArrIdx-1][8];
                     HLNDn[cb]=0;
                  }
                  else
                  {
                     if( HLNUp[cb+1]>0 )
                     {
                        HLNUp[cb]=MyArr[ArrIdx-1][8];
                        HLNDn[cb]=0;
                     }
                     else
                     {
                        HLNUp[cb]=0;
                        HLNDn[cb]=MyArr[ArrIdx-1][9];
                     }
                  }
               }
            }
         }
         else
         {
            if( NewTic(cb)<0 )
            {
               return(-1);
            }
         }
      }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+--------------------------------------------------------------------+
//| Ôóíêöèÿ âîçâðàùàåò èñòèíó, åñëè áàð ÿâëÿåòñÿ íà÷àëîì áàðà ñòàðøåãî |
//| ò-ô                                                                |
//+--------------------------------------------------------------------+
bool BBarBegin(int bar, int TF)
  {
//---- 
   bool bbegin=0;
   if(TF!=10080)
   {
      if( MathFloor(Time[bar]/NextTFs)*NextTFs>Time[bar+1] )
      {
         bbegin=1;
      }
   }
   else
   {
      if( (MathFloor((Time[bar]+259200)/NextTFs)*NextTFs-259200)>Time[bar+1] )
      {
         bbegin=1;
      }
   }
//----
   return(bbegin);
  }
//+--------------------------------------------------------------------+

//+------------------------------------------------------------------+
// Ôóíêöèÿ íà÷àëüíîé èíèöèàëèçàöèè èíäèêàòîðà                        |
//+------------------------------------------------------------------+
void myInit()
  {
  int ArrSize,Displacement,arcount,i,BR;
//---- 
   //îïðåäåëÿåì êîëè÷åñòâî áàðîâ ìëàäøåãî ò-ô ñîäåðæàùèõñÿ â áàðå ñòàðøåãî ò-ô
   if( NextTF<10080)
   {
      Displacement=NextTF/Period();
   }
   else
   {
      if( NextTF==10080 )
      {
         Displacement=7200/Period();
      }
      else
      {
         if( NextTF==43200 )
         {
            Displacement=31680/Period();
         }
      }
   }
//---------
   SetIndexShift(0,Displacement);
   SetIndexShift(1,Displacement);
   SetIndexShift(4,Displacement);
   SetIndexShift(5,Displacement);
   SetIndexDrawBegin(0,Displacement*HLN_Range);
   SetIndexDrawBegin(1,Displacement*HLN_Range);
   SetIndexDrawBegin(2,Displacement*HLN_Range);
   SetIndexDrawBegin(3,Displacement*HLN_Range);
   SetIndexDrawBegin(4,0);
   SetIndexDrawBegin(5,Displacement*BL_Range);
//---------
   //åñëè íåâåðíî óêàçàíû ïàðàìåòðû BL_Range,HLN_Range
   if( BL_Range<1 || HLN_Range<1 )
   {
      Alert("Íåâåðíî óêàçàíû ïàðàìåòðû èíèêàòîðà!");
      return(-1);
   }
   BR=MathMax(BL_Range,HLN_Range);
   //åñëè íà ãðàôèêå íåäîñòàòî÷íî äàííûõ
   if( Bars<BR*Displacement )
   {
      Alert("Íà ãðàôèêå íåäîñòàòî÷íî äàííûõ");
      return(-1);
   }
   //åñëè íåâåðíî óêàçàí ïàðàìåòð NextTF
   if( NextTF<=Period() )
   {
      Alert("Íåâåðíî óêàçàí ïàðàìåòð NextTF !/n Çíà÷åíèå äîëæíî áûòü áîëüøå /n òåêóùåãî ò-ô â ìèíóòàõ");
      return(-1);
   }
   //êîëè÷åñòâî çíàêîâ äî êîòîðûõ áóäóò îêðóãëÿòüñÿ ðàñ÷åòû
   dig=Digits;
   //îïðåäåëÿåì íåîáõîäèìûé ðàçìåð ìàññèâà è åãî ïîñëåäíèé èíäåêñ
   ArrSize=BR;
   ArrIdx=BR-1;
   //100 ïîïûòîê íà èçìåíåíèå ðàçìåðà ìàññèâà
   for( i=0;i<100;i++)
   {
      arcount=ArrayResize(MyArr,ArrSize);
      if( arcount>0 )
      {
         break;
      }
   }
   //100 ïîïûòîê íà èíèöèàëèçàöèþ ìàññèâà
   for( i=0;i<100;i++)
   {
      arcount=0;
      arcount=ArrayInitialize(MyArr,0.0);
      if( arcount>0 )
      {
         break;
      }
   }
   initfl=1;
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Ôóíêöèÿ îòðàáàòûâàþùàÿ íà êàæäûé òèê åñëè ýòî íå íîâûé áàð       |
//+------------------------------------------------------------------+
int NewTic( int Bar )
  {
//---- 
   int i;
   double sH,sL,sBL;
   if( High[Bar]>MyArr[ArrIdx][3] ) MyArr[ArrIdx][3]=High[Bar];
   if( Low[Bar] <MyArr[ArrIdx][4] ) MyArr[ArrIdx][4]=Low[Bar];
   MyArr[ArrIdx][5]=Close[Bar];
   MyArr[ArrIdx][6]=NormalizeDouble((MyArr[ArrIdx][3]+MyArr[ArrIdx][4]+MyArr[ArrIdx][5])/3,dig);
   //öèêë ïî ìàññèâó
   for( i=ArrIdx;i>=ArrIdx+1-BL_Range;i-- )
   {
      sBL+=MyArr[i][6];
   }
   MyArr[ArrIdx][7]=NormalizeDouble(sBL/BL_Range,dig);
   for( i=ArrIdx;i>=ArrIdx+1-HLN_Range;i-- )
   {
      sH+=MyArr[i][3];
      sL+=MyArr[i][4];
   }
   MyArr[ArrIdx][8]=NormalizeDouble(sH/HLN_Range,dig);
   MyArr[ArrIdx][9]=NormalizeDouble(sL/HLN_Range,dig);
   //îòðèñîâûâàåì íà ãðàôèêå
   for( i=Bars-1-MyArr[ArrIdx][0];i>=Bars-1-MyArr[ArrIdx][1];i-- )
   {
      BLLev[i]=MyArr[ArrIdx][6];
      BLStep[i]=MyArr[ArrIdx][7];
      HLNUp_sl[i]=MyArr[ArrIdx][8];
      HLNDn_sl[i]=MyArr[ArrIdx][9];
   }
   if( MyArr[ArrIdx][2]<=0 || MyArr[ArrIdx][3]<=0 || MyArr[ArrIdx][4]<=0 || MyArr[ArrIdx][5]<=0 || MyArr[ArrIdx][6]<=0 || BLLev[Bar]<=0 )
   {
      Alert("Ñáîé ðàñ÷åòà èíäèêàòîðà íà íîâîì òèêå!");
      return(-1);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Ôóíêöèÿ îòðàáàòûâàþùàÿ íà ïåðâûé áàð íà ãðàôèêå                  |
//+------------------------------------------------------------------+
int FBar( int Bar )
  {
//---- 
   //íà÷èíàåì çàïèñûâàòü â ìàññèâ
   MyArr[ArrIdx][0]=Bars-1-Bar;
   MyArr[ArrIdx][1]=Bars-1-Bar;
   MyArr[ArrIdx][2]=Open[Bar];
   MyArr[ArrIdx][3]=High[Bar];
   MyArr[ArrIdx][4]=Low[Bar];
   MyArr[ArrIdx][5]=Close[Bar];
   MyArr[ArrIdx][6]=NormalizeDouble((MyArr[ArrIdx][3]+MyArr[ArrIdx][4]+MyArr[ArrIdx][5])/3,dig);
   BLLev[Bar]=MyArr[ArrIdx][6];
   if( MyArr[ArrIdx][2]<=0 || MyArr[ArrIdx][3]<=0 || MyArr[ArrIdx][4]<=0 || MyArr[ArrIdx][5]<=0 || MyArr[ArrIdx][6]<=0 || BLLev[Bar]<=0 )
   {
      Alert("Îøèáêà ïðîñ÷åòà 1 áàðà!");
      return(-1);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Ôóíêöèÿ îòðàáàòûâàþùàÿ ïðè ïîÿâëåíèè íîâîãî áàðà 1 ðàç           |
//+------------------------------------------------------------------+
int NewBar( int Bar )
  {
//---- 
   int i;
   double sH,sL,sBL;
   MyArr[ArrIdx][1]=Bars-1-Bar;
   if( High[Bar]>MyArr[ArrIdx][3] ) MyArr[ArrIdx][3]=High[Bar];
   if( Low[Bar] <MyArr[ArrIdx][4] ) MyArr[ArrIdx][4]=Low[Bar];
   MyArr[ArrIdx][5]=Close[Bar];
   MyArr[ArrIdx][6]=NormalizeDouble((MyArr[ArrIdx][3]+MyArr[ArrIdx][4]+MyArr[ArrIdx][5])/3,dig);
   //öèêë ïî ìàññèâó
   for( i=ArrIdx;i>=ArrIdx+1-BL_Range;i-- )
   {
      sBL+=MyArr[i][6];
   }
   MyArr[ArrIdx][7]=NormalizeDouble(sBL/BL_Range,dig);
   for( i=ArrIdx;i>=ArrIdx+1-HLN_Range;i-- )
   {
      sH+=MyArr[i][3];
      sL+=MyArr[i][4];
   }
   MyArr[ArrIdx][8]=NormalizeDouble(sH/HLN_Range,dig);
   MyArr[ArrIdx][9]=NormalizeDouble(sL/HLN_Range,dig);
   //îòðèñîâûâàåì íà ãðàôèêå
   for( i=Bars-1-MyArr[ArrIdx][0];i>=Bars-1-MyArr[ArrIdx][1];i-- )
   {
      BLLev[i]=MyArr[ArrIdx][6];
      BLStep[i]=MyArr[ArrIdx][7];
      HLNUp_sl[i]=MyArr[ArrIdx][8];
      HLNDn_sl[i]=MyArr[ArrIdx][9];
   }
   if( MyArr[ArrIdx][2]<=0 || MyArr[ArrIdx][3]<=0 || MyArr[ArrIdx][4]<=0 || MyArr[ArrIdx][5]<=0 || MyArr[ArrIdx][6]<=0 || BLLev[Bar]<=0 )
   {
      Alert("Îøèáêà ïðîñ÷åòà íîâîãî áàðà!");
      return(-1);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Ôóíêöèÿ îòðàáàòûâàþùàÿ ïðè ïîÿâëåíèè íîâîãî áàðà ñòàðøåãî ò-ô    |
//+------------------------------------------------------------------+
int NBBar( int Bar )
  {
//---- 
   int i;
   double sH,sL,sBL;
   //ñäèã ïî ñòåêó â ìàññèâå
   for( i=0;i<ArrIdx;i++)
   {
      MyArr[i][0]=MyArr[i+1][0];
      MyArr[i][1]=MyArr[i+1][1];
      MyArr[i][2]=MyArr[i+1][2];
      MyArr[i][3]=MyArr[i+1][3];
      MyArr[i][4]=MyArr[i+1][4];
      MyArr[i][5]=MyArr[i+1][5];
      MyArr[i][6]=MyArr[i+1][6];
      MyArr[i][7]=MyArr[i+1][7];
      MyArr[i][8]=MyArr[i+1][8];
      MyArr[i][9]=MyArr[i+1][9];
   }
   MyArr[ArrIdx][0]=Bars-1-Bar;
   MyArr[ArrIdx][1]=Bars-1-Bar;
   MyArr[ArrIdx][2]=Open[Bar];
   MyArr[ArrIdx][3]=High[Bar];
   MyArr[ArrIdx][4]=Low[Bar];
   MyArr[ArrIdx][5]=Close[Bar];
   MyArr[ArrIdx][6]=NormalizeDouble((MyArr[ArrIdx][3]+MyArr[ArrIdx][4]+MyArr[ArrIdx][5])/3,dig);
   //öèêë ïî ìàññèâó
   for( i=ArrIdx;i>=ArrIdx+1-BL_Range;i-- )
   {
      sBL+=MyArr[i][6];
   }
   MyArr[ArrIdx][7]=NormalizeDouble(sBL/BL_Range,dig);
   for( i=ArrIdx;i>=ArrIdx+1-HLN_Range;i-- )
   {
      sH+=MyArr[i][3];
      sL+=MyArr[i][4];
   }
   MyArr[ArrIdx][8]=NormalizeDouble(sH/HLN_Range,dig);
   MyArr[ArrIdx][9]=NormalizeDouble(sL/HLN_Range,dig);
   //îòðèñîâûâàåì íà ãðàôèêå
   BLLev[Bar]=MyArr[ArrIdx][6];
   BLStep[Bar]=MyArr[ArrIdx][7];
   HLNUp_sl[Bar]=MyArr[ArrIdx][8];
   HLNDn_sl[Bar]=MyArr[ArrIdx][9];
   if( MyArr[ArrIdx][2]<=0 || MyArr[ArrIdx][3]<=0 || MyArr[ArrIdx][4]<=0 || MyArr[ArrIdx][5]<=0 || MyArr[ArrIdx][6]<=0 || BLLev[Bar]<=0 )
   {
      Alert("Îøèáêà ïðîñ÷åòà íîâîãî áàðà ñòàðøåãî ò-ô!");
      return(-1);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

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 ---