Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
sPPZ_levels_v1
//-----------------------------------------------------------------------------------------------------
//sPPZ_levels_v1.mq4
//Ñêðèïò ðàñ÷åòà óðîâíåé PPZ ïî ôðàêòàëàì
//Àâòîð èäåè ðàñ÷åòà óðîâíåé: Dserg (http://www.mql4.com/ru/users/Dserg)
//-----------------------------------------------------------------------------------------------------
/*
Èäåÿ Dserg-à ïðàêòè÷åñêè ïîëíîñòüþ ñîõðàíåíà, îäíàêî àëãîðèòì íàïèñàí ñ íóëÿ, è ïîçâîëÿåò ìãíîâåííî ñòðîèòü ëþáîå êîëè÷åñòâî óðîâíåé íà ëþáîì ÷èñëå ôðàêòàëîâ.
Ñêðèïò çàïóñêàåòñÿ íà ãðàôèêå îäèí ðàç äëÿ ïîëó÷åíèÿ çàäàííîãî êîëè÷åñòâà PPZ óðîâíåé äëÿ òàéìôðåéìîâ D1, W1, MN1. Åñòü âîçìîæíîñòü ïîñòðîåíèÿ óðîâíåé òàêæå è äëÿ ïåðèîäîâ H1, H4.
 îïèñàíèè óðîâíåé óêàçûâàåòñÿ òàéìôðåéì, íà êîòîðîì îíè áûëè ñîçäàíû (ýòî îòðàæàåò âàæíîñòü óðîâíÿ), à òàêæå çíà÷åíèå êðèòåðèÿ îòáîðà - äèñïåðñèÿ (äëÿ îöåíêè êà÷åñòâà óðîâíÿ). ×åì ìåíüøå äèñïåðñèÿ óðîâíÿ, òåì êà÷åñòâåíåå îí.
Êðîìå òîãî, óêàçûâàåòñÿ íà ñêîëüêèõ ôðàêòàëàõ áûë ïîñòðîåí óðîâåíü, äëÿ âîçìîæíîñòè ñðàâíåíèÿ ðàçëè÷íûõ âàðèàíòîâ ïîñòðîåíèÿ.
Ïðè ïåðåêëþ÷åíèè íà ñòàðøèé ïåðèîä, óðîâíè ñ áîëåå ìåëêèõ ïåðèîäîâ ñêðûâàþòñÿ, ÷òîáû íå ìåøàëè âîñïðèÿòèþ.
Ïàðàìåòðû çàïóñêà ñêðèïòà:
num_levels - êîëè÷åñòâî óðîâíåé äëÿ îäíîãî òàéìôðåéìà; óâåëè÷åíèå ïàðàìåòðà äàåò âîçìîæíîñòü íàéòè äîïîëíèòåëüíûå óðîâíè, îäíàêî êà÷åñòâî êàæäîãî ïîñëåäóþùåãî áóäåò õóæå; ïàðàìåòð ñëåäóåò óâåëè÷èâàòü, êîãäà öåíà äâèæåòñÿ â "ïóñòîòó", äëÿ òîãî, ÷òîáû õîòÿ áû ïðèìåðíî îïðåäåëèòü öåëè
common_fractals - îáùåå êîëè÷åñòâî ðàññìàòðèâàåìûõ ôðàêòàëîâ; óâåëè÷åíèå ïàðàìåòðà äàåò ïîëó÷åíèå óðîâíåé ñ ìåíüøåé äèñïåðñèåé, ò.å. áîëåå êà÷åñòâåííûõ; ïðè ýòîì ìîãóò ïðîïàñòü "ñòàðûå" óðîâíè, ÷òîáû íàéòè è èõ ñëåäóåò óâåëè÷èòü num_levels
num_fractals - êîëè÷åñòâî ôðàêòàëîâ äëÿ ïîñòðîåíèÿ îäíîãî óðîâíÿ; òåîðåòè÷åñêè, ÷åì áîëüøå ôðàêòàëîâ ó÷àâñòâóåò â ïîñòðîåíèè óðîâíÿ, òåì êà÷åñòâåííåå óðîâåíü, îäíàêî äèñïåðñèÿ ïðè ýòîì ÷àñòî ñíèæàåòñÿ
fr_space - ìèíèìàëüíîå ðàññòîÿíèå ìåæäó ôðàêòàëàìè, èñïîëüçóåìûìè äëÿ ïîñòðîåíèÿ óðîâíÿ, â áàðàõ
start_bar - èíäåêñ áàðà, ñ êîòîðîãî íà÷èíàòü ïîäñ÷åò
start_period - ïåðèîä, ñ êîòîðîãî íàäî íà÷èíàòü èñêàòü óðîâíè: 0(÷àñû), 1(4 ÷àñà), 2(äíè, ïî-óìîë÷àíèþ), 3(íåäåëüêè), 4(ìåñÿöû)
DeleteAll - óñòàíîâèòå â true, åñëè âàì íå íðàâèòñÿ ðàáîòà ñêðèïòà è âû õîòèòå óäàëèòü âñå ýòî áåçîáðàçèå
 êîììåíòàðèé âûâîäÿòñÿ çíà÷åíèÿ âñåõ íàéäåííûõ óðîâíåé, ÷òîáû óáðàòü åãî, ïðîñòî ïåðåêëþ÷èòå òàéìôðåéì. Åñëè âû óâèäèòå â ðåçóëüòàòàõ ñëîâî "empty", çíà÷èò äëÿ ïîñòðîåíèÿ óðîâíÿ íå õâàòèëî ôðàêòàëîâ, óâåëè÷üòå ïàðàìåòð common_fractals.
Ïîìíèòå, ðàçóìíûå ïàðàìåòðû äàþò ðàçóìíûå ðåçóëüòàòû. ß, íàïðèìåð, íå îñîáî äîâåðÿþ óðîâíÿì ñ äèñïåðñèåé âûøå 0,00010000. Õîòÿ ó öåíû ñâîè ïðàâèëà.
*/
//-----------------------------------------------------------------------------------------------------
#property copyright "midorum, 2012"
#property link "midorum@gmail.com"
#property show_inputs
#define @initial_disp 999999999
//êîëè÷åñòâî óðîâíåé - óâåëè÷åíèå ïàðàìåòðà äàåò âîçìîæíîñòü íàéòè äîïîëíèòåëüíûå óðîâíè, îäíàêî êà÷åñòâî êàæäîãî ïîñëåäóþùåãî áóäåò õóæå
//ïàðàìåòð ñëåäóåò óâåëè÷èâàòü, êîãäà öåíà äâèæåòñÿ â "ïóñòîòó", äëÿ òîãî, ÷òîáû õîòÿ áû ïðèìåðíî îïðåäåëèòü öåëè
//óâåëè÷åíèå ýòîãî ïàðàìåòðà íå âëèÿåò íà îïðåäåëåíèå "ñòàðûõ" óðîâíåé (óðîâíåé, îïðåäåëÿåìûõ ïðè ñòàðîì çíà÷åíèè ïàðàìåòðà)
extern string a0="Êîëè÷åñòâî ðàññ÷èòûâàåìûõ óðîâíåé";
extern int num_levels=10;
//êà÷åñòâî óðîâíåé - óâåëè÷åíèå ïàðàìåòðà äàåò ïîëó÷åíèå óðîâíåé ñ ìåíüøåé äèñïåðñèåé, ò.å. áîëåå êà÷åñòâåííûõ
//óâåëè÷åíèå ýòîãî ïàðàìåòðà ìîæåò ïîâëèÿòü íà îïðåäåëåíèå "ñòàðûõ" óðîâíåé, ââèäó íàõîæäåíèÿ äðóãèõ, áîëåå êà÷åñòâåííûõ óðîâíåé
//äëÿ òîãî, ÷òîáû íàéòè è "ñòàðûå" óðîâíè, íåîáõîäèìî óâåëè÷èòü êîëè÷åñòâî ðàññ÷èòûâàåìûõ óðîâíåé
extern string a1="Êîëè÷åñòâî ôðàêòàëîâ äëÿ ðàññìîòðåíèÿ";
extern int common_fractals=100;
//âëèÿíèå íà êà÷åñòâî óðîâíåé íå îïðåäåëåíî
//òåîðåòè÷åñêè, ÷åì áîëüøå ôðàêòàëîâ ó÷àâñòâóåò â ïîñòðîåíèè óðîâíÿ, òåì êà÷åñòâåííåå óðîâåíü, îäíàêî äèñïåðñèÿ ïðè ýòîì ÷àñòî ñíèæàåòñÿ
//èçìåíåíèå ýòîãî ïàðàìåòðà âëèÿåò íà îðåäåëåíèå "ñòàðûõ" óðîâíåé, ò.å. óðîâíè ðèñóþòñÿ â íîâûõ ìåñòàõ
extern string a2="Êîëè÷åñòâî ôðàêòàëîâ äëÿ ïîñòðîåíèÿ óðîâíÿ";
extern int num_fractals=4;
//èçìåíåíèå ýòîãî ïàðàìåòðà âëèÿåò íà îðåäåëåíèå "ñòàðûõ" óðîâíåé, ò.å. óðîâíè ðèñóþòñÿ â íîâûõ ìåñòàõ
extern string a3="Ìèíèìàëüíîå ðàññòîÿíèå ìåæäó ôðàêòàëàìè â áàðàõ";
extern int fr_space=5;
//
extern string a4="Ñìåùåíèå ïðàâîãî (íà÷àëüíîãî) áàðà";
extern int start_bar=0;
//
extern string a5="Íà÷àëüíûé ïåðèîä: 0(÷àñû)-4(ìåñÿöû)";
extern int start_period=2;
//
extern string a6="Óäàëèòü âñå ëèíèè ñêðèïòà ñ ãðàôèêà";
extern bool DeleteAll=false;
double fr[];
int fr_bar[];
double level[];
double disp[];
int sel_bar[];
int sel_fr[];
int cur_fr[];
double average,cur_disp;
int found,leftside;
bool exit=false;
int period[5]={PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
string str_period[5]={"hour","4hour","day","week","month"};
int visibility[5]={0x001f,0x003f,0x007f,0x00ff,0x01ff};
color period_color[5]={PaleGreen,PaleGreen,Coral,CornflowerBlue,DarkSlateBlue};
int period_width[5]={1,1,1,2,3};
int period_style[5]={1,1,0,0,0};
//-----------------------------------------------------------------------------------------------------
int start()
{
int p;
int l;
int i,j,k;
string _name,_report;
if(DeleteAll)
{
ClearChart();
Comment("");
return(0);
}
i=MessageBox("Delete old ppz-levels?\nÓäàëèòü ñòàðûå ppz-óðîâíè?",NULL,0x00000024);
if(i==6) ClearChart();
if(ArrayResize(fr,common_fractals)==-1) exit=true;
if(ArrayResize(fr_bar,common_fractals)==-1) exit=true;
if(ArrayResize(level,num_levels)==-1) exit=true;
if(ArrayResize(disp,num_levels)==-1) exit=true;
if(ArrayResize(sel_bar,num_fractals)==-1) exit=true;
if(ArrayResize(sel_fr,num_fractals)==-1) exit=true;
if(ArrayResize(cur_fr,num_fractals)==-1) exit=true;
if(exit)
{
MessageBox("Memory allocation error\nÎøèáêà ïðè âûäåëåíèè ïàìÿòè",NULL,0x00000030);
return(-1);
}
for(p=start_period; p<5; p++)
{
_report=StringConcatenate(_report,str_period[p]," -");
ArrayInitialize(disp,@initial_disp);
j=iBars(NULL,period[p])-1;
for(i=start_bar,found=0; i<j && found<common_fractals; i++)
{
fr[found]=iFractals(NULL,period[p],MODE_UPPER,i);
if (fr[found]!=0)
{
fr_bar[found]=i;
found++;
}
fr[found]=iFractals(NULL,period[p],MODE_LOWER,i);
if (fr[found]!=0)
{
fr_bar[found]=i;
found++;
}
}
leftside=fr_bar[found-1];
CombValue(fr,fr_bar,found);
for(l=0; l<num_levels; l++)
{
if(l>0) CompressValue(fr,fr_bar,found);
for(i=0; i<=found-num_fractals; i++)
{
average=0; cur_disp=0; ArrayInitialize(sel_bar,0);
for(j=i,k=0; j<found && k<num_fractals; j++)
{
if(CheckIndex(fr_bar[j]))
{
cur_fr[k]=j;
k++;
}
}
if(j==found) break;
for(j=0;j<num_fractals;j++) average+=fr[cur_fr[j]];
average/=num_fractals;
for(j=0;j<num_fractals;j++) cur_disp+=MathPow(fr[cur_fr[j]]-average,2);
if(cur_disp<disp[l])
{
disp[l]=cur_disp;
level[l]=average;
for(j=0;j<num_fractals;j++) sel_fr[j]=cur_fr[j];
}
}
for(i=0;i<num_fractals;i++) fr[sel_fr[i]]=0;
if(disp[l]!=@initial_disp)
{
_name=StringConcatenate(str_period[p],"_ppz_",l,"_(",num_fractals,"fr)");
ObjectCreate(_name,OBJ_HLINE,0,0,NormalizeDouble(level[l],Digits));
ObjectSet(_name,OBJPROP_COLOR,period_color[p]);
ObjectSet(_name,OBJPROP_WIDTH,period_width[p]);
ObjectSet(_name,OBJPROP_STYLE,period_style[p]);
ObjectSet(_name,OBJPROP_TIMEFRAMES,visibility[p]);
ObjectSetText(_name,"disp:"+DoubleToStr(disp[l],8));
_report=StringConcatenate(_report," ppz",l,"-",DoubleToStr(level[l],5));
}
else _report=StringConcatenate(_report," ppz",l,"-empty");
}
_report=StringConcatenate(_report,"\n");
_name=str_period[p]+"_END";
ObjectCreate(_name,OBJ_VLINE,0,iTime(NULL,period[p],leftside),0);
ObjectSet(_name,OBJPROP_COLOR,DarkKhaki);
ObjectSet(_name,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(_name,OBJPROP_TIMEFRAMES,visibility[p]);
}
Comment(_report);
return(0);
}
//-----------------------------------------------------------------------------------------------------
void ClearChart()
{
int i;
string _name;
for(i=ObjectsTotal()-1;i>=0;i--)
{
_name="_ppz_";
if(StringFind(ObjectName(i),_name)!=-1) ObjectDelete(ObjectName(i));
_name="_END";
if(StringFind(ObjectName(i),_name)!=-1) ObjectDelete(ObjectName(i));
}
return;
}
//-----------------------------------------------------------------------------------------------------
void CombValue(double& _paramount[], int& _secondary[], int _size)
{
int _jump=_size, i;
bool _swapped=true;
double _double;
while (_jump>1 || _swapped)
{
if (_jump>1) _jump=_jump/1.25;
_swapped=false;
for(i=0; (i+_jump)<_size; i++)
if(_paramount[i]>_paramount[i+_jump])
{
_double=_paramount[i]; _paramount[i]=_paramount[i+_jump]; _paramount[i+_jump]=_double;
_double=_secondary[i]; _secondary[i]=_secondary[i+_jump]; _secondary[i+_jump]=_double;
_swapped = true;
}
}
return;
}
//-----------------------------------------------------------------------------------------------------
void CompressValue(double& _paramount[], int& _secondary[], int& _size)
{
int i,j;
double _double;
for(i=_size-1; i>=0; i--)
{
if(_paramount[i]==0)
{
_size--;
for(j=i; j<_size; j++)
{
_paramount[j]=_paramount[j+1];
_secondary[j]=_secondary[j+1];
}
}
}
return;
}
//-----------------------------------------------------------------------------------------------------
bool CheckIndex(int _index)
{
int i;
for(i=0; i<num_fractals; i++)
{
if(sel_bar[i]!=0)
{
if(MathAbs(sel_bar[i]-_index)<fr_space) return(false);
}
else
{
sel_bar[i]=_index;
return(true);
}
}
}
//-----------------------------------------------------------------------------------------------------
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
---