olyakish_fractals_03

Author: olyakish
olyakish_fractals_03
Price Data Components
Series array that contains open time of each bar
Indicators Used
Fractals
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
olyakish_fractals_03
//+------------------------------------------------------------------+
//|                                        olyakish_fractals_03.mq4  |
//|                                      Copyright © -2007, olyakish |
//|                                           plutonia-dmb#yandex.ru |
//| v02                                                              |
//| Äîáàâëåí ïðîöåíò äëÿ îòñåèâàíèÿ ôðàêòàëîâ                        |
//| v03                                                              |
//| Ðèñóåò ëèíèè                                                     |
//+------------------------------------------------------------------+
#property copyright "olyakish"
#property link ""
//----
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Green       // Çåëåíûé ôðàêòàë
#property indicator_color2 Red         // Ïðèñåäàþùèé
#property indicator_color3 SaddleBrown // Óâÿäàþùèé
#property indicator_color4 Blue        // Ôàëüøèâûé
//----
extern int			Pips		= 15;
extern int			ShiftBars	= 150;
extern string rem1 = "Ïðîöåíò äëÿ îòñåèâàíèÿ ïî îáúåìó";
extern int Percent = 110;
extern string rem2 = "Ðèñîâàòü ïðåäûäóùèå ëèíèè?";
extern bool UseOldLine = true;
double ExtLimeBuffer[];
double ExtRedBuffer[];
double ExtSaddleBrownBuffer[];
double ExtBlueBuffer[];
int i, j;
double a_Fractal[2]; // 0- ïîñëåäíèé 1-ïðåäûäóùèé
double a_MFI[2];     // 0- ïîñëåäíèé 1-ïðåäûäóùèé
double a_Volume[2];  // 0- ïîñëåäíèé 1-ïðåäûäóùèé
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {   
//----
   SetIndexBuffer(0, ExtLimeBuffer);
   SetIndexBuffer(1, ExtRedBuffer);
   SetIndexBuffer(2, ExtSaddleBrownBuffer);
   SetIndexBuffer(3, ExtBlueBuffer);
//----
   SetIndexStyle(0, DRAW_ARROW, 0, 2);
   SetIndexStyle(1, DRAW_ARROW, 0, 2);
   SetIndexStyle(2, DRAW_ARROW, 0, 2);
   SetIndexStyle(3, DRAW_ARROW, 0, 2);
   
   SetIndexArrow(0, 177);
   SetIndexArrow(1, 177);
   SetIndexArrow(2, 177);
   SetIndexArrow(3, 177);               
//----
   SetIndexLabel(0, "Çåëåíûé ôðàêòàë");
   SetIndexLabel(1, "Ïðèñåäàþùèé ôðàêòàë");
   SetIndexLabel(2, "Óâÿäàþùèé ôðàêòàë");
   SetIndexLabel(3, "Ôàëüøèâûé ôðàêòàë");  
//----
   ObjectCreate("Up", OBJ_TREND, 0, iTime(NULL,  0,  2), High[2], 
                iTime(NULL, 0, 1), High[1], 0, 0);
   ObjectSet("Up", OBJPROP_COLOR, Blue);
   ObjectSet("Up", OBJPROP_RAY, true);
   ObjectSet("Up", OBJPROP_BACK, 1);
   
   ObjectCreate("Down", OBJ_TREND, 0, iTime(NULL, 0, 2), Low[2], 
                iTime(NULL, 0, 1), Low[1], 0, 0);
   ObjectSet("Down", OBJPROP_COLOR, Tomato);
   ObjectSet("Down", OBJPROP_RAY, true);
   ObjectSet("Down", OBJPROP_BACK, 1);
   if(UseOldLine)
     {
       ObjectCreate("Up_Prev", OBJ_TREND, 0, iTime(NULL, 0, 2), 
                    High[2], iTime(NULL, 0, 1), High[1],0,0);
       ObjectSet("Up_Prev", OBJPROP_COLOR, Blue);
       ObjectSet("Up_Prev", OBJPROP_RAY, true);
       ObjectSet("Up_Prev", OBJPROP_STYLE, STYLE_DASH);
       ObjectSet("Up_Prev", OBJPROP_BACK, 1);
   
       ObjectCreate("Down_Prev", OBJ_TREND, 0, iTime(NULL, 0, 2), 
                    Low[2], iTime(NULL, 0, 1), Low[1], 0, 0);
       ObjectSet("Down_Prev", OBJPROP_COLOR, Tomato);
       ObjectSet("Down_Prev", OBJPROP_RAY, true);         
       ObjectSet("Down_Prev", OBJPROP_STYLE, STYLE_DASH);
       ObjectSet("Down_Prev", OBJPROP_BACK, 1);
    }
//----
   Comment("olyakish_fractals_03");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
int deinit()
  {
   ObjectDelete("Up");
   ObjectDelete("Down");
   if(UseOldLine)
     {
       ObjectDelete("Up_Prev");
       ObjectDelete("Down_Prev");
     }
//----
   Comment("");
//----
   return(0);
  }   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {  
   int n = 3;
   while(ExtLimeBuffer[n] != NULL || ExtRedBuffer[n] != NULL || 
         ExtSaddleBrownBuffer[n] != NULL || ExtBlueBuffer[n] != NULL)
     {
       if(n > ShiftBars) 
         {
           n = ShiftBars;
           break;
         }
       n++;
     }
   for(int i = n + 20; i >= 3; i--)
     {
       //-- âåðõíèå ôðàêòàëû
       ArrayInitialize(a_Fractal, 0);
       ArrayInitialize(a_MFI, 0);
       ArrayInitialize(a_Volume, 0);
       // íà i áàðå åñòü ôðàêòàë ââåðõ
       if(iFractals(NULL, 0, MODE_UPPER, i) != 0) 
         {               
           // öåíà íà ôðàêòàëå 
           a_Fractal[0] = iFractals(NULL, 0, MODE_UPPER, i);              
           // îáúåì
           a_Volume[0] = Volume[i] + Volume[i+1] + Volume[i+2] + 
                         Volume[i-1] + Volume[i-2];
           // MFI
           a_MFI[0] = (High[i] - Low[i] + High[i-1] - Low[i-1] + 
                      High[i-2] - Low[i-2] + High[i+1] - Low[i+1] + 
                      High[i+2] - Low[i+2]) / a_Volume[0];
           // ïîøëè èñêàòü ôðàêòàë íà âíèç ïî èñòîðèè
           j = i + 1;
           while(a_Fractal[1] == 0)
             {
               if(iFractals(NULL,0,MODE_UPPER,j)!=0) 
                   break;
               //-- Íàøëè ôðàêòàë  âíèç
               if(iFractals(NULL, 0, MODE_LOWER, j) != 0)
                 {
                   a_Fractal[1] = iFractals(NULL, 0, MODE_LOWER, j);
                   a_Volume[1] = Volume[j+2] + Volume[j+1] + 
                                 Volume[j] + Volume[j-1] + Volume[j-2];
                   a_MFI[1] = (High[j+1] - Low[j+1] + High[j+2] - 
                              Low[j+2] + High[j] - Low[j] + High[j-1] - 
                              Low[j-1] + High[j-2] - Low[j-2]) / a_Volume[1];                                             
                   // èìååì ïðèñåäàþùèé ôðàêòàë (MFI - îáúåì +)
                   if(a_Volume[0] > a_Volume[1]*Percent / 100 && 
                      a_MFI[0] < a_MFI[1])
                     {
                       ExtRedBuffer[i] = High[i]; // + Pips*Point;
                       break;
                     }
                   // èìååì çåëåíûé ôðàêòàë (MFI + îáúåì +)
                   if(a_Volume[0] > a_Volume[1]*Percent / 100 && 
                      a_MFI[0] > a_MFI[1])
                     {
                       ExtLimeBuffer[i] = High[i]; // + Pips*Point;
                       break;
                     } 
                   // èìååì ôàëüøèâûé ôðàêòàë (MFI + îáúåì -)
                   if(a_Volume[0]*Percent / 100 < a_Volume[1] && 
                      a_MFI[0] > a_MFI[1])
                     {
                       ExtBlueBuffer[i] = High[i]; // + Pips*Point;
                       break;
                     }
                   // èìååì óâÿäàþùèé ôðàêòàë (MFI - îáúåì -)
                   if(a_Volume[0]*Percent / 100 < a_Volume[1] && 
                      a_MFI[0] < a_MFI[1])
                     {
                       ExtSaddleBrownBuffer[i]=High[i]; // + Pips*Point;
                       break;
                     }
                 }                          
               j++;                                         
             }
         }
       //--- íèæíèå ôðàêòàëû
       ArrayInitialize(a_Fractal, 0);
       ArrayInitialize(a_MFI, 0);
       ArrayInitialize(a_Volume, 0);
       // íà i áàðå åñòü ôðàêòàë âíèç
       if(iFractals(NULL, 0, MODE_LOWER, i) != 0)
         {
           // öåíà íà ôðàêòàëå    
           a_Fractal[0] = iFractals(NULL, 0, MODE_LOWER, i);           
           // îáúåì
           a_Volume[0] = Volume[i] + Volume[i+1] + Volume[i+2] + 
                         Volume[i-1] + Volume[i-2];
           // MFI
           a_MFI[0] = (High[i] - Low[i] + High[i-1] - Low[i-1] + 
                       High[i-2] - Low[i-2] + High[i+1] - Low[i+1] + 
                       High[i+2] - Low[i+2]) / a_Volume[0];
           // ïîøëè èñêàòü ôðàêòàë íà ââåðõ ïî èñòîðèè
           j = i + 1;
           while(a_Fractal[1] == 0)
             {
               if(iFractals(NULL, 0, MODE_LOWER, j) != 0) 
                   break;
               //-- Íàøëè ôðàêòàë  ââåðõ
               if(iFractals(NULL, 0, MODE_UPPER, j) != 0)
                 {
                   a_Fractal[1] = iFractals(NULL, 0, MODE_UPPER, j);
                   a_Volume[1] = Volume[j+2] + Volume[j+1] + Volume[j] + 
                                 Volume[j-1] + Volume[j-2];
                   a_MFI[1] = (High[j+1] - Low[j+1] + High[j+2] - Low[j+2] + 
                              High[j]-Low[j] + High[j-1] - Low[j-1] + 
                              High[j-2] - Low[j-2]) / a_Volume[1];                                             
                   // èìååì ïðèñåäàþùèé ôðàêòàë (MFI - îáúåì +)
                   if(a_Volume[0] > a_Volume[1]*Percent / 100 && 
                      a_MFI[0] < a_MFI[1])
                     {
                       ExtRedBuffer[i] = Low[i]; // - Pips*Point;
                       break;
                     }
                   // èìååì çåëåíûé ôðàêòàë (MFI + îáúåì +)
                   if(a_Volume[0] > a_Volume[1]*Percent / 100 && 
                      a_MFI[0] > a_MFI[1])
                     {
                       ExtLimeBuffer[i] = Low[i]; // - Pips*Point;
                       break;
                     }
                   // èìååì ôàëüøèâûé ôðàêòàë (MFI + îáúåì -)
                   if(a_Volume[0]*Percent / 100 < a_Volume[1] && 
                      a_MFI[0] > a_MFI[1])
                     {
                       ExtBlueBuffer[i] = Low[i]; // - Pips*Point;
                       break;
                     }
                   // èìååì óâÿäàþùèé ôðàêòàë (MFI - îáúåì -)
                   if(a_Volume[0]*Percent / 100 < a_Volume[1] && 
                      a_MFI[0] < a_MFI[1])
                     {
                       ExtSaddleBrownBuffer[i] = Low[i]; // - Pips*Point;
                       break;
                     }  
                 }
               j++;                                         
             }
         }
     }
   
// îòðèñîâêà ëèíèé
   double _Price[3,2];
   int  _Time[3,2];
   ArrayInitialize(_Price, -1);
   ArrayInitialize(_Time, -1);
   int up = 0, down = 0;
   for(i = 3; i <= 300; i++)
     {
       //up
       if(ExtRedBuffer[i] != 2147483647 && 
          iFractals(NULL, 0, MODE_UPPER, i) != NULL && 
          up <= 2 && 
          iFractals(NULL, 0, MODE_UPPER, i) <= ExtRedBuffer[i])
         {
           _Price[up,0] = ExtRedBuffer[i];
           _Time[up,0] = iTime(NULL, 0, i);
           up++;
         }
       if(ExtRedBuffer[i] != 2147483647 && 
          iFractals(NULL, 0, MODE_LOWER, i) != 0 && 
          down <= 2 && 
          iFractals(NULL, 0, MODE_LOWER, i) >= ExtRedBuffer[i])
         {
           _Price[down,1] = ExtRedBuffer[i];
           _Time[down,1] = iTime(NULL, 0, i);
           down++;         
         } 
     }
   ObjectMove("Up", 1, _Time[0,0], _Price[0,0]);
   ObjectMove("Up", 0, _Time[1,0], _Price[1,0]);
//----    
   ObjectMove("Down", 1, _Time[0,1], _Price[0,1]);
   ObjectMove("Down", 0, _Time[1,1], _Price[1,1]);
   if(UseOldLine)
     {
       ObjectMove("Up_Prev", 1, _Time[1,0], _Price[1,0]);
       ObjectMove("Up_Prev", 0, _Time[2,0], _Price[2,0]);
       //----
       ObjectMove("Down_Prev", 1, _Time[1,1], _Price[1,1]);
       ObjectMove("Down_Prev", 0, _Time[2,1], _Price[2,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 ---