FractalsTrendLines

Author: Copyright 2014, Svds75
Price Data Components
Series array that contains open time of each bar
Indicators Used
Fractals
0 Views
0 Downloads
0 Favorites
FractalsTrendLines
//+------------------------------------------------------------------+
//|                                           FractalsTrendLines.mq5 |
//|                                           Copyright 2014, Svds75 |
//|                                             http://reksystem.ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Svds75"
#property link      "https://login.mql5.com/ru/users/svds75/"
#property version   "1.00"
#property description "Èíäèêàòîð ÷åðòèò áû÷üþ è ìåäâåæüþ ëèíèè òðåíäà, íà îñíîâàíèè èíä. iFractals. Îò áëèæàéøåãî ýêñòðåìóìà äî ïîñëåäíåãî íå ïðîáèòîãî ôðàêòàëà. Ïðè ïðîáèòèè äàííîãî ôðàêòàëà ëèíèÿ çàêðåïëÿåòñÿ äî ïîÿâëåíèÿ íîâîãî ýêñòðåìóìà.\n"
#property description "Òðàêòîâàòü ìîæíî ñëåäóþùèì îáðàçîì:"
#property description "1) Ïåðåñå÷åíèå ëèíèé \"Ïðîõîäíîé Êðåñò\""
#property description "2) Çàêðûòèå âûøå îáîèõ ëèíèé: \"Òðåíä áû÷èé\""
#property description "3) Çàêðûòèå íèæå îáîèõ ëèíèé: \"Òðåíä ìåäâåæèé\""
#property description "4) Çàêðûòèå ìåæäó ëèíèé, è \"Ï.Ê.\" ñëåâà: \"Ôëåò\""
#property description "5) Çàêðûòèå ìåæäó ëèíèé, è \"Ï.Ê.\" ñïðàâà: \"Òðåóãîëüíèê íåîïðåäåëåííîñòè\""
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
#define PROGRAM_NAME MQLInfoString(MQL_PROGRAM_NAME)
//+------------------------------------------------------------------+
sinput color inpClrBull=clrGreen;   // Öâåò áû÷üåé ëèíèè òðåíäà
sinput color inpClrBear=clrRed;     // Öâåò ìåäâåæüåé ëèíèè òðåíäà
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>
//+------------------------------------------------------------------+
int handle;                // Áóäåò õðàíèòü õýíäë èíäèêàòîðà iFractals
CChartObjectTrend upLine;  // Îáúåêò âåðõíåé ëèíèè òðåíäà (ìåäâåæåé)
CChartObjectTrend dnLine;  // Îáúåêò íèæíåé ëèíèè òðåíäà (áû÷åé)
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create handle indicator iFractals
   handle=iFractals(_Symbol,_Period);
   if(handle==INVALID_HANDLE) handle=IndicatorCreate(_Symbol,_Period,IND_FRACTALS);
   if(handle==INVALID_HANDLE)
     {
      PrintFormat("Error create Fractals indicator handle %s/%s, code %d",_Symbol,EnumToString(_Period),GetLastError());
      return(INIT_FAILED);
     }
//--- create indicator shortname
   IndicatorSetString(INDICATOR_SHORTNAME,StringFormat(PROGRAM_NAME+"(%s/%s)",_Symbol,EnumToString(_Period)));
//--- init ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // ðàçìåð âõîäíûõ òàéìñåðèé
                 const int prev_calculated,  // îáðàáîòàíî áàðîâ íà ïðåäûäóùåì âûçîâå
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
                 )
  {
//---
   ArraySetAsSeries(time,true);
   if(!createTrendLine(0,time)) return(0);
   if(!createTrendLine(1,time)) return(0);
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- delete handle indicator iFractals
   IndicatorRelease(handle);
//---
  }
//+------------------------------------------------------------------+
//| Custom indicator create TrendLine function                       |
//+------------------------------------------------------------------+
int createTrendLine(const int t,const datetime &TM[])
  {
//---
   int count=500;
//---
   if(t==0)
     {
      double a[];
      ArraySetAsSeries(a,true);
      if(CopyBuffer(handle,0,0,count,a)<0)
        {
         PrintFormat("Íå óäàëîñü ñêîïèðîâàòü äàííûå èç èíäèêàòîðà iFractals, êîä îøèáêè %d",GetLastError());
         return(false);
        }
      int b1=0,b2=0;
      double p1=0,p2=0;
      datetime t1=0,t2=0;
      //---
      for(int b=3;b<count;b++) if(a[b]!=EMPTY_VALUE)
        {
         if(p2==0)
           {
            p2=a[b];
            t2=TM[b];
            b2=b;
           }
         else if(p1==0)
           {
            p1=a[b];
            t1=TM[b];
            b1=b;
           }
         else if(a[b]<p1 && p1>p2) break;
         else
           {
            p2=p1;
            t2=t1;
            b2=b1;
            p1=a[b];
            t1=TM[b];
            b1=b;
           }
        }
      //---
      for(int b=b2-1;b>2;b--) if(a[b]!=EMPTY_VALUE) if(p2>a[b])
        {
         p2=a[b];
         t2=TM[b];
         b2=b;
        }
      else break;
      //---
      if(upLine.Name()!=PROGRAM_NAME+"_Bear_Trend")
        {
         upLine.Create(0,PROGRAM_NAME+"_Bear_Trend",0,t1,p1,t2,p2);
         upLine.RayRight(true);
         upLine.Style(STYLE_DOT);
         upLine.Color(inpClrBear);
        }
      else
        {
         upLine.Time(0,t1);
         upLine.Price(0,p1);
         upLine.Time(1,t2);
         upLine.Price(1,p2);
        }
      //---
      return(true);
     }
//---
   if(t==1)
     {
      double a[];
      ArraySetAsSeries(a,true);
      if(CopyBuffer(handle,1,0,count,a)<0)
        {
         PrintFormat("Íå óäàëîñü ñêîïèðîâàòü äàííûå èç èíäèêàòîðà iFractals, êîä îøèáêè %d",GetLastError());
         return(false);
        }
      int b1=0,b2=0;
      double p1=0,p2=0;
      datetime t1=0,t2=0;
      //---
      for(int b=3;b<count;b++) if(a[b]!=EMPTY_VALUE)
        {
         if(p2==0)
           {
            p2=a[b];
            t2=TM[b];
            b2=b;
           }
         else if(p1==0)
           {
            p1=a[b];
            t1=TM[b];
            b1=b;
           }
         else if(a[b]>p1 && p1<p2) break;
         else
           {
            p2=p1;
            t2=t1;
            b2=b1;
            p1=a[b];
            t1=TM[b];
            b1=b;
           }
        }
      //---
      for(int b=b2-1;b>2;b--) if(a[b]!=EMPTY_VALUE) if(p2<a[b])
        {
         p2=a[b];
         t2=TM[b];
         b2=b;
        }
      else break;
      //---
      if(dnLine.Name()!=PROGRAM_NAME+"_Bull_Trend")
        {
         dnLine.Create(0,PROGRAM_NAME+"_Bull_Trend",0,t1,p1,t2,p2);
         dnLine.RayRight(true);
         dnLine.Style(STYLE_DOT);
         dnLine.Color(inpClrBull);
        }
      else
        {
         dnLine.Time(0,t1);
         dnLine.Price(0,p1);
         dnLine.Time(1,t2);
         dnLine.Price(1,p2);
        }
      //---
      return(true);
     }
//---
   return(false);
  }
//+------------------------------------------------------------------+

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