Author: Copyright � 2010, MetaQuotes Software Corp.
Indicators Used
Fractals
0 Views
0 Downloads
0 Favorites
GigaChu
//+------------------------------------------------------------------+
//|                                                      GigaChu.mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window

extern int    NumPlug      = 0; // Íîìåð èñêîìîé âèëêè
extern int    LifeTime     = 0; // Âðåìÿ æèçíè âèëêè, â ÷àñàõ
extern color  UpColor      = Lime;
extern color  DnColor      = Red;
extern int    UpWidth      = 2;
extern int    DnWidth      = 2;

double fr_up[3];
int    br_up[3];
double fr_dn[3];
int    br_dn[3];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//----

if(NumPlug<2) NumPlug=1;

DeleteUpLines();
DeleteDnLines();

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

DeleteUpLines();
DeleteDnLines();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
static int prewbar;
  
  if(prewbar==iTime(Symbol(),0,0)) return;
  prewbar= iTime(Symbol(),0,0);
//----

int j=0;
int k=1;
ArrayInitialize(fr_up, 0);
ArrayInitialize(br_up, 0);
for(int i=3; i<=Bars-1; i++)
  { fr_up[j]=iFractals(Symbol(), 0, MODE_UPPER, i);
    if(fr_up[j]>0) 
      { br_up[j]=i;
        j++;
       }
    if(j>2) 
      { if(CheckUpLines()<0)
          { j=0; i=br_up[1]-1;
            ArrayInitialize(fr_up, 0);
            ArrayInitialize(br_up, 0);
           }
        else
           if(k==NumPlug)
             { CreateUpLines();
               break;
              }
           else
             { j=0; i=br_up[1]-1;
               ArrayInitialize(fr_up, 0);
               ArrayInitialize(br_up, 0); 
               k++; }
       }
   }

j=0;
k=1;
ArrayInitialize(fr_dn, 0);
for(i=3; i<=Bars-1; i++)
  { fr_dn[j]=iFractals(Symbol(), 0, MODE_LOWER, i);
    if(fr_dn[j]>0) 
      { br_dn[j]=i;
        j++;
       }
    if(j>2) 
      { if(CheckDnLines()<0)
          { j=0; i=br_dn[1]-1;
            ArrayInitialize(fr_dn, 0);
            ArrayInitialize(br_dn, 0);
           }
        else
          if(k==NumPlug)
            { CreateDnLines();
              break;
             }
          else
            { j=0; i=br_dn[1]-1;
              ArrayInitialize(fr_dn, 0); 
              ArrayInitialize(br_dn, 0);
              k++; }
       }
   }
      
//----
return(0);
}
//+------------------------------------------------------------------+
int CheckUpLines()
{

double tan1=MathTan((fr_up[0]-fr_up[1])/(br_up[0]-br_up[1]));
double tan2=MathTan((fr_up[1]-fr_up[2])/(br_up[1]-br_up[2]));

if(tan1>0 && tan2>0 && tan1<tan2) return(1);

return(-1);
}
//+------------------------------------------------------------------+
int CheckDnLines()
{

double tan1=MathTan((fr_dn[0]-fr_dn[1])/(br_dn[0]-br_dn[1]));
double tan2=MathTan((fr_dn[1]-fr_dn[2])/(br_dn[1]-br_dn[2]));

if(tan1<0 && tan2<0 && tan1>tan2) return(1);

return(-1);
}
//--------------------------------------------------------------------------------
void CreateUpLines()
{

  if(ObjectFind("UPCHUV2")>=0)
    if(ObjectGet("UPCHUV2", OBJPROP_PRICE1)!=fr_up[2] || ObjectGet("UPCHUV2", OBJPROP_PRICE2)!=fr_up[1])
      DeleteUpLines();
    else
      return;
  if(ObjectFind("UPCHUV1")>=0)
    if(ObjectGet("UPCHUV1", OBJPROP_PRICE1)!=fr_up[1] || ObjectGet("UPCHUV1", OBJPROP_PRICE2)!=fr_up[0])
      DeleteUpLines();
    else
      return;
      
   ObjectCreate("UPCHUV2", OBJ_TREND, 0, iTime(Symbol(), 0, br_up[2]), fr_up[2], iTime(Symbol(), 0, br_up[1]), fr_up[1]);
   ObjectSet("UPCHUV2", OBJPROP_COLOR, UpColor); 
   ObjectSet("UPCHUV2", OBJPROP_WIDTH, UpWidth);
   ObjectSet("UPCHUV2", OBJPROP_RAY, false);
   ObjectCreate("UPCHUV1", OBJ_TREND, 0, iTime(Symbol(), 0, br_up[1]), fr_up[1], iTime(Symbol(), 0, br_up[0]), fr_up[0]);
   ObjectSet("UPCHUV1", OBJPROP_COLOR, UpColor); 
   ObjectSet("UPCHUV1", OBJPROP_WIDTH, UpWidth);
   ObjectSet("UPCHUV1", OBJPROP_RAY, false);
   ObjectCreate("UPCHUV3", OBJ_TREND, 0, iTime(Symbol(), 0, br_up[0]), fr_up[0], iTime(Symbol(), 0, br_up[0])+LifeTime*3600, fr_up[0]);
   ObjectSet("UPCHUV3", OBJPROP_COLOR, UpColor); 
   ObjectSet("UPCHUV3", OBJPROP_WIDTH, UpWidth);
   ObjectSet("UPCHUV3", OBJPROP_RAY, false);
   
return;
}

//-------------------------------------------------------------------
void CreateDnLines()
{

  if(ObjectFind("DNCHUV2")>=0)
    if(ObjectGet("DNCHUV2", OBJPROP_PRICE1)!=fr_dn[2] || ObjectGet("DNCHUV2", OBJPROP_PRICE2)!=fr_dn[1])
      DeleteDnLines();
    else
      return;
  if(ObjectFind("DNCHUV1")>=0)
    if(ObjectGet("DNCHUV1", OBJPROP_PRICE1)!=fr_dn[1] || ObjectGet("DNCHUV1", OBJPROP_PRICE2)!=fr_dn[0])
      DeleteDnLines();
    else
      return;
  ObjectCreate("DNCHUV2", OBJ_TREND, 0, iTime(Symbol(), 0, br_dn[2]), fr_dn[2], iTime(Symbol(), 0, br_dn[1]), fr_dn[1]);
  ObjectSet("DNCHUV2", OBJPROP_COLOR, DnColor); 
  ObjectSet("DNCHUV2", OBJPROP_WIDTH, DnWidth);
  ObjectSet("DNCHUV2", OBJPROP_RAY, false);
  ObjectCreate("DNCHUV1", OBJ_TREND, 0, iTime(Symbol(), 0, br_dn[1]), fr_dn[1], iTime(Symbol(), 0, br_dn[0]), fr_dn[0]);
  ObjectSet("DNCHUV1", OBJPROP_COLOR, DnColor); 
  ObjectSet("DNCHUV1", OBJPROP_WIDTH, DnWidth);
  ObjectSet("DNCHUV1", OBJPROP_RAY, false);
  ObjectCreate("DNCHUV3", OBJ_TREND, 0, iTime(Symbol(), 0, br_dn[0]), fr_dn[0], iTime(Symbol(), 0, br_dn[0])+LifeTime*3600, fr_dn[0]);
  ObjectSet("DNCHUV3", OBJPROP_COLOR, DnColor); 
  ObjectSet("DNCHUV3", OBJPROP_WIDTH, DnWidth);
  ObjectSet("DNCHUV3", OBJPROP_RAY, false);

return;
}

//---------------------------------------------------------------------------------

void DeleteUpLines()
{

if(ObjectFind("UPCHUV1")>=0) ObjectDelete("UPCHUV1");
if(ObjectFind("UPCHUV2")>=0) ObjectDelete("UPCHUV2");
if(ObjectFind("UPCHUV3")>=0) ObjectDelete("UPCHUV3");

}
//---------------------------------------------------------------------------------

void DeleteDnLines()
{

if(ObjectFind("DNCHUV1")>=0) ObjectDelete("DNCHUV1");
if(ObjectFind("DNCHUV2")>=0) ObjectDelete("DNCHUV2");
if(ObjectFind("DNCHUV3")>=0) ObjectDelete("DNCHUV3");

}

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