Author: Trofimov Pavel
0 Views
0 Downloads
0 Favorites
KeyFinder
//+------------------------------------------------------------------+
//|                                                    KeyFinder.mq5 |
//|                                                   Trofimov Pavel |
//|                                               trofimovpp@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Trofimov Pavel"
#property link      "trofimovpp@mail.ru"
#property version   "1.00"
#property description "Âíèìàíèå! Äàííûé àëãîðèòì èñïîëüçóåò â ðàñ÷åòàõ öèêëû!"
#property description "Íàñòîÿòåëüíî ðåêîìåíäóåòñÿ çàäàâàòü äëÿ îáðàáîòêè íå áîëåå 1000 áàðîâ!"
#property script_show_inputs
//--- input parameters
input int      MinDimesion=5;//Ìèíèìàëüíàÿ ðàçìåðíîñòü òî÷åê
input int      MaxBars=300;//Êîëè÷åñòâî îáðàáàòûâàåìûõ áàðîâ
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
//ïðîâåðêà äîñòóïíîñòè èñòîðèè äëÿ óñòàíîâëåííîãî êîëè÷åñòâà áàðîâ
   int SMaxBars=Bars(Symbol(),0),iMaxBars=MaxBars;
   if(SMaxBars<MaxBars) 
     {
      iMaxBars=SMaxBars;
      Comment("Ïàðàìåòð MaxBars çàäàí ñëèøêîì áîëüøèì."+"\n"+"Äëÿ ðàñ÷åòîâ áóäåò èñïîëüçîâàíî "+IntegerToString(SMaxBars)+" áàðîâ.");
     };
   int clean=CleanChart();//÷èñòèì ãðàôèê ïðè ïîâòîðíîì ïðèìåíåíèè
   MqlRates  rates_array[];
   string Com="";
   int iCod=CopyRates(Symbol(),Period(),0,iMaxBars,rates_array);//êîëè÷åñòâî ýëåìåíòîâ ìàññèâà
   iCod=iCod-1;//Èíäåêñ ìàêñèìàëüíîãî ýëåìåíòà â ìàññèâå
   Com="Ðàáîòàþ...Æäèòå!";
   Comment(Com);
   if(iCod>0)
     {
      FindUpKeyPoints(iCod,rates_array);//Ïîèñê âåðõíèõ êëþ÷åâûõ òî÷åê
      Com=Com+"\n"+"Îáðàáîòàíû âåðõíèå òî÷êè."+"\n";
      Comment(Com);
      FindLowKeyPoints(iCod,rates_array);//Ïîèñê íèæíèõ êëþ÷åâûõ òî÷åê
      Comment("Îáðàáîòêà çàâåðøåíà");
     }
   else Comment("Îòñóòñòâóþò áàðû äëÿ îáðàáîòêè!!!");
  }
//+------------------------------------------------------------------+
//|                  Ïîèñê âåðõíèõ êëþ÷åâûõ òî÷åê                    |
//+------------------------------------------------------------------+
void FindUpKeyPoints(int temp_iCod,MqlRates &temp_rates[])
  {
   int HD=1;
   for(int i=temp_iCod-MinDimesion; i>(MinDimesion-1); i--)//öèêë ïî áàðàì îò êîíå÷íîãî - MinDimension äî íóëåâîãî + MinDimension
     {
      HD=getHighDimension(temp_rates,i,temp_iCod);//ïîëó÷àåì ðàçìåðíîñòü òî÷åê
      if((HD>=MinDimesion) || (HD==-1))
        {//ñîçäàåì ìàðêó åñëè ïîïàäàåò ïîä óñëîâèÿ MinDimension
         string Ob_Name="KF_Label"+IntegerToString(i);
         if(HD!=-1)
           {
            ObjectCreate(0,Ob_Name,OBJ_TEXT,0,temp_rates[i].time,temp_rates[i].high);
            ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_LOWER);
            ObjectSetString(0,Ob_Name,OBJPROP_TEXT,0,IntegerToString(HD));
            ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrRed);
           }
         else 
           { //Åñëè íå ìîæåì îïðåäåëèòü ðàçìåðíîñòü ìàðêèðóåì øàðèêîì
            ObjectCreate(0,Ob_Name,OBJ_ARROW,0,temp_rates[i].time,temp_rates[i].high);
            ObjectSetInteger(0,Ob_Name,OBJPROP_ARROWCODE,0,159);
            ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_BOTTOM);
            ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrRed);
           };
        };
     };
  }
//+------------------------------------------------------------------+
//|                    Ïîèñê íèæíèõ êëþ÷åâûõ òî÷åê                   |
//+------------------------------------------------------------------+   
void FindLowKeyPoints(int temp_iCod,MqlRates &temp_rates[])
  {
   int LD=1;//èíèöèàëèçèðóåì ðàçìåðíîñòè òî÷åê
   bool iCreate;
   for(int i=temp_iCod-MinDimesion; i>(MinDimesion-1); i--)
     {
      LD=getLowDimension(temp_rates,i,temp_iCod);
      if((LD>=MinDimesion) || (LD==-1))
        {
         string Ob_Name="KF_Label"+IntegerToString(i)+"_1";//Ñòðàõóåìñÿ îò áàðîâ ãäå ëîé è õàé ìîãóò áûòü êëþ÷åâûìè òî÷êàìè
         if(LD!=-1) 
           {
            iCreate=ObjectCreate(0,Ob_Name,OBJ_TEXT,0,temp_rates[i].time,temp_rates[i].low);
            if(iCreate) 
              {
               ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_UPPER);
               ObjectSetString(0,Ob_Name,OBJPROP_TEXT,0,IntegerToString(LD));
               ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrGreen);
              }
            else Comment("Íå ìîãó ñîçäàòü îáúåêò");
           }
         else 
           {
            iCreate=ObjectCreate(0,Ob_Name,OBJ_ARROW,0,temp_rates[i].time,temp_rates[i].low);
            if(iCreate) 
              {
               ObjectSetInteger(0,Ob_Name,OBJPROP_ARROWCODE,0,159);
               ObjectSetInteger(0,Ob_Name,OBJPROP_ANCHOR,0,ANCHOR_TOP);
               ObjectSetInteger(0,Ob_Name,OBJPROP_COLOR,clrGreen);
              }
            else Comment("Íå ìîãó ñîçäàòü îáúåêò");
           };
        };
     };
  }
//+------------------------------------------------------------------+
//|                Îïðåäåëåíèå ðàçìåðíîñòè âåðõíåé òî÷êè             |
//+------------------------------------------------------------------+
int getHighDimension(MqlRates &tmpRates[],int tmp_i,int tmp_iCod)
  {
   int k=1;
   while((tmpRates[tmp_i].high>tmpRates[tmp_i+k].high) && (tmpRates[tmp_i].high>tmpRates[tmp_i-k].high) && ((tmp_i+k)<(tmp_iCod)) && ((tmp_i-k)>0)) k++;
   if(((tmp_i+k)==tmp_iCod) || ((tmp_i-k)==0)) k=-1;
   return(k);
  }
//+------------------------------------------------------------------+
//|                Îïðåäåëåíèå ðàçìåðíîñòè íèæíåé òî÷êè              |
//+------------------------------------------------------------------+
int getLowDimension(MqlRates &tmpRates[],int tmp_i,int tmp_iCod)
  {
   int k=1;
   while((tmpRates[tmp_i].low<tmpRates[tmp_i+k].low) && (tmpRates[tmp_i].low<tmpRates[tmp_i-k].low) && ((tmp_i+k)<(tmp_iCod)) && ((tmp_i-k)>0)) k++;
   if(((tmp_i+k)==tmp_iCod) || ((tmp_i-k)==0)) k=-1;
   return(k);
  }
//+-------------------------------------------------------------------------------+
//| Î÷èñòêà ãðàôèêà îò ñîçäàííûõ ñêðèïòîì îáúåêòîâ â ñëó÷àå ïîâòîðíîãî ïðèìåíåíèÿ |
//+-------------------------------------------------------------------------------+
int CleanChart()
  {
   string Label="KF_Label";
   int obj_total=ObjectsTotal(0,0,-1),n=0;
   for(int obj=obj_total-1; obj>=0; obj--)
     {
      string objname=ObjectName(0,obj,0,-1);
      if(StringFind(objname,Label)>=0) ObjectDelete(0,objname);
      n++;
     }
   return(n);
  }
//+------------------------------------------------------------------+

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