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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---