//+----------------------------------------------------------------------+ //|ZigZag ñ ÷èëàìè Ïåñàâåíòî | //|----------------------------------------------------------------------+ | //|ExtHidden - 0 - âñå ëèíèè ñêðûòû. Îáû÷íûé ZigZag. | //| 1 - ïîêàçûâàåò âñå ëèíèè ìåæäó ôðàêòàëàìè, ó êîòîðûõ | //| ïðîöåíò âîññòàíîâëåíèÿ >0.21 è <5. | //| 2 - ïîêàçûâàåò òîëüêî òå ëèíèè, ãäå ïðîöåíò âîññòàíî- | //| âëåíèÿ ðàâåí ÷èñëàì Ïåñàâåíòî (è 0.866 äëÿ ïîñòðî- | //| åíèÿ ïàòòåðíîâ Gartley) | //| 3 - ïîêàçûâàåò ÷èñëà, ïåðå÷èñëåííûå â ïóíêòå 2 | //| è ñîîòâåòñòâóþùèå ëèíèè | //| 4 - ïîêàçûâàåò ÷èñëà íå Ïåñàâåíòî è ñîîòâåòñòâóþùèå ëèíèè | //| | //| | //|ExtFractal - êîëè÷åñòâî ôðàêòàëîâ (ìàêñèìóìîâ, ìèíèìóìîâ), | //| îò êîòîðûõ èäóò ëèíèè ê äðóãèì ôðàêòàëàì | //| | //|ExtFractalEnd - êîëè÷åñòâî ôðàêòàëîâ, ê êîòîðûì èäóò ëèíèè | //| äàëüøå ýòîãî ôðàêòàëà ñîåäèíÿþùèõ ëèíèé íå áóäåò | //| Åñëè ExtFractalEnd=0 òî ïîñëåäíèé ôðàêòàë ðàâåí | //| ìàêñèìàëüíîìó ÷èñëó ôðàêòàëîâ. | //| Ìèíèìàëüíîå çíà÷åíèå ExtFractalEnd=5 | //| | //|ExtDeltaType - 0 - âûâîäÿòñÿ ïðîöåíòû âîññòàíîâëåíèÿ "êàê åñòü" | //| 1 - ðàñ÷åò äîïóñêà (%-÷èñëî Ïåñàâåíòî)<ExtDelta | //| 2 - ((%-÷èñëî Ïåñàâåíòî)/÷èñëî Ïåñàâåíòî)<ExtDelta | //| | //| | //|ExtDelta - (äîïóñê) îòêëîíåíèå â ðàñ÷åòå. Çàäàåò âåëè÷èíó | //| ïîòåíöèàëüíîé ðàçâîðîòíîé çîíû. | //| äîëæíî áûòü 0<ExtDelta<1 | //| | //|ExtFibo - true - âûâîäÿòñÿ óðîâíè Ôèáîíà÷÷è | //| false - íå âûâîäÿòñÿ óðîâíè Ôèáîíà÷÷è (îòíîñèòåëüíî | //| ïðåäïîñëåäíåãî êîëåíà ZigZag-a) | //| | //+----------------------------------------------------------------------+ #property copyright "nen@.....ru" #property link "http://onix-trade.net/forum/index.php?act=post&do=reply_post&f=9&t=118" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red //---- indicator parameters extern int ExtDepth=12; extern int ExtHidden=1; extern int ExtFractal=10; extern int ExtFractalEnd=10; extern double ExtDelta=0.04; extern int ExtDeltaType=1; extern bool ExtFibo=false; extern color ExtLine=DarkBlue; extern color ExtPesavento=Yellow; extern color ExtGartley866=GreenYellow; extern color ExtNotFibo=SlateGray; extern int ExtDeviation=5; extern int ExtBackstep=3; //---- indicator buffers // Ìàññèâ äëÿ îòðèñîâêè ZigZag double zz[]; // Ìàññèâ ìèíèìóìîâ ÷åðíîâîé double ExtMapBuffer[]; // Ìàññèâ ìàêñèìóìîâ ÷åðíîâîé double ExtMapBuffer2[]; // Ìàññèâ ÷èñåë Ïåñàâåíòî (Ôèáû è ìîäèôèöèðîâàííûå Ôèáû) double fi[]={0.382, 0.5, 0.618, 0.707, 0.786, 0.841, 0.886, 1.0, 1.128, 1.272, 1.414, 1.5, 1.618, 2.0, 2.414, 2.618, 4.0}; string fitxt[]={ ".382", "0.5", ".618", ".707", ".786", ".841", ".886", "1.0", "1.128", "1.272", "1.414", "1.5", "1.618", "2.0", "2.414", "2.618", "4.0" }; // Ìàòðèöà äëÿ ïîèñêà èñ÷åçíóâøèõ áàðîâ afr - ìàññèâ çíà÷åíèé âðåìåíè ïÿòè ïîñëåäíèõ ôðàêòàëîâ + îäíà ÿ÷åéêà - ïðèçíàê èíèöèàëèçàöèè // afrl - ìèíèìóìû, afrh - ìàêñèìóìû int afr[]={0.0,0.0,0.0,0.0,0.0,0.0}; double afrl[]={0.0,0.0,0.0,0.0,0.0}, afrh[]={0.0,0.0,0.0,0.0,0.0}; double HL,HLp,kk,kj,Angle; // LowPrim,HighPrim,LowLast,HighLast - çíà÷åíèÿ ìèíèìóìîâ è ìàêñèìóìîâ áàðîâ double LowPrim,HighPrim,LowLast,HighLast; // numLowPrim,numHighPrim,numLowLast,numHighLast -íîìåðà áàðîâ int numLowPrim,numHighPrim,numLowLast,numHighLast,k,k1,k2,ki,countLow1,countHigh1,shift,shift1; // Âðåìÿ ñâå÷è ñ ïåðâûì îò íóëåâîãî áàðà ôðàêòàëîì int timeFr1,timeFr1new,timeFr2Low,timeFr2High; // Êîëè÷åñòâî ëèíèé, èäóùèõ îò ïåðâîãî îò íóëåâîãî áàðà ôðàêòàëà ê ñîñåäíèì ôðàêòàëàì int countLineFr1; // Ñ÷åò÷èê ôðàêòàëîâ int countFr; // Áàð, äî êîòîðîãî íàäî ðèñîâàòü ñîåäèíèòåëüíûå ëèíèè îò íóëåâîãî áàðà int countBarEnd=0; // Áàð, äî êîòîðîãî íàäî ïåðåñ÷èòûâàòü îò íóëåâîãî áàðà int numBar=0; // Íîìåð îáúåêòà int numOb; //Màêñèìóì èëè ìèíèìóì áàðà ïåðâîãî ôðàêòàëà (è ïðåäûäóùåãî ôðàêòàëà) double hFr1, lFr1, hFr2, lFr2; // Ôëàãè // flagFrNew=true - îáðàçîâàëñÿ íîâûé ôðàêòàë èëè ïåðâûé ôðàêòàë ñìåñòèëñÿ íà äðóãîé áàð. =false - ïî óìîë÷àíèþ. // flagFr=true - ïîñëåäíèé ôðàêòàë ìàêñèìóì. false - ïîñëåäíèé ôðàêòàë ìèíèìóì. bool flagLow,flagHigh,flagFr,flagFrNew=false; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(5); //---- drawing settings SetIndexStyle(0,DRAW_SECTION); //---- indicator buffers mapping SetIndexBuffer(0,zz); SetIndexBuffer(1,ExtMapBuffer); SetIndexBuffer(2,ExtMapBuffer2); SetIndexEmptyValue(0,0.0); ArraySetAsSeries(zz,true); ArraySetAsSeries(ExtMapBuffer,true); ArraySetAsSeries(ExtMapBuffer2,true); //---- indicator short name IndicatorShortName("ZZ("+ExtDepth+")"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Äåèíèöèàëèçàöèÿ. Óäàëåíèå âñåõ òðåíäîâûõ ëèíèé è òåêñòîâûõ îáúåêòîâ //+------------------------------------------------------------------+ int deinit(){ ObjectsDeleteAll(0,2); ObjectsDeleteAll(0,21); ObjectDelete("Fibo"); return(0);} //******************************************************** int start() { int counted_bars=IndicatorCounted(); if( counted_bars<0 ) { Alert("Ñáîé ðàñ÷åòà èíäèêàòîðà"); return(-1); } // ZigZag èç ÌÒ. Íà÷àëî. int shift, back,lasthighpos,lastlowpos; double val,res; double curlow,curhigh,lasthigh,lastlow; for(shift=Bars-ExtDepth; shift>=0; shift--) { val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)]; if(val==lastlow) val=0.0; else { lastlow=val; if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0; else { for(back=1; back<=ExtBackstep; back++) { res=ExtMapBuffer[shift+back]; if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0; } } } ExtMapBuffer[shift]=val; //--- high val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)]; if(val==lasthigh) val=0.0; else { lasthigh=val; if((val-High[shift])>(ExtDeviation*Point)) val=0.0; else { for(back=1; back<=ExtBackstep; back++) { res=ExtMapBuffer2[shift+back]; if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0; } } } ExtMapBuffer2[shift]=val; } // final cutting lasthigh=-1; lasthighpos=-1; lastlow=-1; lastlowpos=-1; for(shift=Bars-ExtDepth; shift>=0; shift--) { curlow=ExtMapBuffer[shift]; curhigh=ExtMapBuffer2[shift]; if((curlow==0)&&(curhigh==0)) continue; //--- if(curhigh!=0) { if(lasthigh>0) { if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0; else ExtMapBuffer2[shift]=0; } //--- if(lasthigh<curhigh || lasthigh<0) { lasthigh=curhigh; lasthighpos=shift; } lastlow=-1; } //---- if(curlow!=0) { if(lastlow>0) { if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0; else ExtMapBuffer[shift]=0; } //--- if((curlow<lastlow)||(lastlow<0)) { lastlow=curlow; lastlowpos=shift; } lasthigh=-1; } } countLow1=0; countHigh1=0; for(shift=Bars-1; shift>=0; shift--) { zz[shift]=ExtMapBuffer[shift]; if(shift>=Bars-ExtDepth) {ExtMapBuffer2[shift]=0.0;ExtMapBuffer[shift]=0.0; zz[shift]=0.0;} else { res=ExtMapBuffer2[shift]; if(res!=0.0) zz[shift]=res; } if (ExtMapBuffer[shift]>0.0) {countLow1++;} if (ExtMapBuffer2[shift]>0.0) {countHigh1++;} } // ZigZag èç ÌÒ. Êîíåö. Äîáàâëåí â ZigZag ïîäñ÷åò êîëè÷åñòâà ôðàêòàëàâ countLow1 è countHigh1. // Äàëåå èäåò "äîîñíàñòêà" ZigZag-à. // Ïðîâåðêà ïðàâèëüíîñòè ââåäåííûõ âíåøíèõ ïåðåìåííûõ if (countBarEnd==0) { if (ExtDelta<=0) ExtDelta=0.001; if (ExtDelta>1) ExtDelta=0.999; if (ExtHidden<0) ExtHidden=0; if (ExtHidden>4) ExtHidden=4; if (ExtDeltaType<0) ExtDeltaType=0; if (ExtDeltaType>3) ExtDeltaType=3; if (ExtFractalEnd>0) { if (ExtFractalEnd<5) ExtFractalEnd=5; if (countLow1>ExtFractalEnd) countLow1=ExtFractalEnd; if (countHigh1>ExtFractalEnd) countHigh1=ExtFractalEnd; } } if (flagFrNew) { countLow1=0; countHigh1=0; for(shift=0; shift<=numBar; shift++) { if (ExtMapBuffer[shift]>0.0) {countLow1++;} if (ExtMapBuffer2[shift]>0.0) {countHigh1++;} } counted_bars=3; } if (Bars - counted_bars>2 && ExtHidden>0) { // Èíèöèàëèçàöèÿ ìàòðèöû if (afr[5]<1) { k=0; for (shift=0; shift<Bars && k<5; shift++) { if (zz[shift]>0) { afr[k]=Time[shift]; if (zz[shift]==ExtMapBuffer[shift]) {afrl[k]=Low[shift]; afrh[k]=0.0;} if (zz[shift]==ExtMapBuffer2[shift]) {afrh[k]=High[shift]; afrl[k]=0.0;} k++; } } afr[k]=1; if (ExtFibo) { if (afrl[1]>0) ObjectCreate("fibo",OBJ_FIBO,0,afr[2],afrh[2],afr[1],afrl[1]); else ObjectCreate("fibo",OBJ_FIBO,0,afr[2],afrl[2],afr[1],afrh[1]); } } for (shift=0; shift<Bars; shift++) // Ïîèñê âðåìåíè áàðà ïåðâîãî ôðàêòàëà, ñ÷èòàÿ îò íóëåâîãî áàðà { if (zz[shift]>0.0) { timeFr1=Time[shift]; if (ExtMapBuffer[shift]==zz[shift]) {lFr1=Low[shift]; hFr1=0.0;} if (ExtMapBuffer2[shift]==zz[shift]) {hFr1=High[shift]; lFr1=0.0;} break; } } // Ïîèñê íîìåðà áàðà, äî êîòîðîãî áóäóò ðèñîâàòüñÿ ñîåäèíèòåëüíûå ëèíèè if (countBarEnd==0) { if (ExtFractalEnd>0) { k=ExtFractalEnd; for (shift=0; shift<Bars && k>0; shift++) if (zz[shift]>0 && ExtMapBuffer2[shift]>0) {countBarEnd=shift; k--;} } else countBarEnd=Bars-3; } //-----------1 Îòðèñîâêà ìàêñèìóìîâ. Íà÷àëî. //+--------------------------------------------------------------------------+ //| Âûâîä ñîåäèíÿþùèõ ëèíèé è ÷èñåë Ïåñàâåíòî è 0.866 äëÿ ìàêñèìóìîâ ZigZag-a //| Îòðèñîâêà èäåò îò íóëåâîãî áàðà //+--------------------------------------------------------------------------+ numLowPrim=0; numLowLast=0; numHighPrim=0; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=0.0; HighLast=0.0; flagHigh=false; Angle=-100; if (flagFrNew) countFr=1; else countFr=ExtFractal; for (k=0; (k<Bars-1 && countHigh1>0 && countFr>0); k++) { if (ExtMapBuffer[k]>0.0 && LowPrim==0.0 && HighPrim>0 && ExtMapBuffer[k]==zz[k]) {LowPrim=ExtMapBuffer[k]; numLowPrim=k;} if (ExtMapBuffer[k]>0.0 && ExtMapBuffer[k]<LowPrim && HighPrim>0 && ExtMapBuffer[k]==zz[k]) {LowPrim=ExtMapBuffer[k]; numLowPrim=k;} if (ExtMapBuffer2[k]>0.0 && ExtMapBuffer2[k]==zz[k]) { if (HighPrim>0) { if (HighLast>0) { if (flagHigh) { if (ExtMapBuffer2[k]>HighLast) {HighLast=High[k]; numHighLast=k;} } else { if (ExtMapBuffer2[k]>HighPrim) flagHigh=true; HighLast=High[k]; numHighLast=k; } } else {numHighLast=k; HighLast=High[k];} HL=High[numHighLast]-Low[numLowPrim]; kj=(HighPrim-HighLast)*10000/(numHighLast-numHighPrim); if (HL>0 && (Angle>kj || Angle==-100)) // Ïðîâåðêà óãëà íàêëîíà ëèíèè { Angle=kj; // Ñîçäàíèå ëèíèè è òåêñòîâîãî îáúåêòà HLp=High[numHighPrim]-Low[numLowPrim]; k1=MathCeil((numHighPrim+numHighLast)/2); kj=HLp/HL; if (kj>0.21 && kj<=5) { // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìàêñèìóìàìè kk=kj; k2=1; if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (k2<0) // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866 { if (ExtHidden!=4 && ExtHidden>0) { ObjectCreate("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TEXT,0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2)); if (kk==0.886) // Gartley ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial", ExtGartley866); else ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial",ExtPesavento); } } else // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866) { if (ExtHidden==1 || ExtHidden==4) { ObjectCreate("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TEXT,0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2)); ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo); } } if ((ExtHidden==2 && k2<0) || (ExtHidden!=0 && ExtHidden!=2)) { ObjectCreate("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TREND,0,Time[numHighPrim],High[numHighPrim],Time[numHighLast],High[numHighLast]); ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_RAY,false); ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_STYLE,STYLE_DOT); ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_COLOR,ExtLine); } } } } else {numHighPrim=k; HighPrim=High[k];} } // Ïåðåõîä íà ñëåäóþùèé ôðàêòàë if (k>countBarEnd) // if (k>Bars-3) { k=numHighPrim+1; countHigh1--; countFr--; numLowPrim=0; numLowLast=0; numHighPrim=0; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=0.0; HighLast=0.0; flagHigh=false; Angle=-100; } } //-----------1 Îòðèñîâêà ìàêñèìóìîâ. Êîíåö. //-----------2 Îòðèñîâêà ìèíèìóìîâ. Íà÷àëî. //+-------------------------------------------------------------------------+ //| Âûâîä ñîåäèíÿþùèõ ëèíèé è ÷èñåë Ïåñàâåíòî è 0.866 äëÿ ìèíèìóìîâ ZigZag-a //| Îòðèñîâêà èäåò îò íóëåâîãî áàðà //+-------------------------------------------------------------------------+ numLowPrim=0; numLowLast=0; numHighPrim=0; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=0.0; HighLast=0.0; flagLow=false; Angle=-100; if (flagFrNew) countFr=1; else countFr=ExtFractal; for (k=0; (k<Bars && countLow1>0 && countFr>0); k++) { if (ExtMapBuffer2[k]>HighPrim && LowPrim>0) {HighPrim=High[k]; numHighPrim=k;} if (ExtMapBuffer[k]>0.0 && ExtMapBuffer[k]==zz[k]) { if (LowPrim>0) { if (LowLast>0) { if (flagLow) { if (ExtMapBuffer[k]<LowLast) {LowLast=Low[k]; numLowLast=k;} } else { if (ExtMapBuffer[k]<LowPrim) flagLow=true; LowLast=Low[k]; numLowLast=k; } } else {numLowLast=k; LowLast=Low[k];} // âûâîä ñîåäèíÿþùèõ ëèíèé è ïðîöåíòîâ âîññòàíîâëåíèÿ(÷èñåë Ïåñàâåíòî) HL=High[numHighPrim]-Low[numLowLast]; kj=(LowPrim-LowLast)*1000/(numLowLast-numLowPrim); if (HL>0 && (Angle<kj || Angle==-100)) // Ïðîâåðêà óãëà íàêëîíà ëèíèè { Angle=kj; HLp=High[numHighPrim]-Low[numLowPrim]; k1=MathCeil((numLowPrim+numLowLast)/2); kj=HLp/HL; if (kj>0.21 && kj<=5) { // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìèíèìóìàìè kk=kj; k2=1; if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (k2<0) // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866 { if (ExtHidden!=4 && ExtHidden>0) { ObjectCreate("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TEXT,0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2)); if (kk==0.886) // Gartley ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial", ExtGartley866); else ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial",ExtPesavento); } } else // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866) { if (ExtHidden==1 || ExtHidden==4) ObjectCreate("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TEXT,0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2)); ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo); } if ((ExtHidden==2 && k2<0) || (ExtHidden!=0 && ExtHidden!=2)) { ObjectCreate("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TREND,0,Time[numLowPrim],Low[numLowPrim],Time[numLowLast],Low[numLowLast]); ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_RAY,false); ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_STYLE,STYLE_DOT); ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_COLOR,ExtLine); } } } } else {numLowPrim=k; LowPrim=Low[k];} } // Ïåðåõîä íà ñëåäóþùèé ôðàêòàë if (k>countBarEnd) // if (k>Bars-3) { k=numLowPrim+1; countLow1--; countFr--; numLowPrim=0; numLowLast=0; numHighPrim=0; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=0.0; HighLast=0.0; flagLow=false; Angle=-100; } } flagFrNew=false; numBar=0; //-----------2 Îòðèñîâêà ìèíèìóìîâ. Êîíåö. } else // counted_bars<=2 Ïðîâåðêà ñìåùåíèé ôðàêòàëîâ. // Ïðîâåðêà íà ðàçðåøåíèå âûâîäà îñíàñòêè. Íà÷àëî. if (ExtHidden>0) // { // // Êîððåêöèÿ ñîåäèíÿþùèõ ëèíèé è ÷èñåë. Íà÷àëî. { // Ïîèñê âðåìåíè áàðà ïåðâîãî ôðàêòàëà, ñ÷èòàÿ îò íóëåâîãî áàðà for (shift1=0; shift1<Bars; shift1++) { if (zz[shift1]>0.0) { timeFr1new=Time[shift1]; break; } } // Ïîèñê áàðà, íà êîòîðîì áûë ïîñëåäíèé ôðàêòàë shift=iBarShift(Symbol(),Period(),timeFr1); // Ñðàâíåíèå òåêóùåãî çíà÷åíèÿ ôðàêòàëà ñ òåì, êîòîðûé áûë ðàíåå // Îáðàçîâàëñÿ íîâûé ôðàêòàë if (timeFr1new!=timeFr1) { flagFrNew=true; if (shift>numBar) numBar=shift; afr[5]=0; } // Ôðàêòàë íà ìàêñèìóìå ñäâèíóëñÿ íà äðóãîé áàð if (hFr1>0 && zz[shift]==0.0) { flagFrNew=true; if (shift>numBar) numBar=shift; afr[5]=0; } // Ôðàêòàë íà ìèíèìóìå ñäâèíóëñÿ íà äðóãîé áàð if (lFr1>0 && zz[shift]==0.0) { flagFrNew=true; if (shift>numBar) numBar=shift; afr[5]=0; } //-----------3 Ñìåñòèëñÿ ìèíèìóì èëè ìàêñèìóì, íî îñòàëñÿ íà òîì æå áàðå. Íà÷àëî. //============= 1 ñìåñòèëñÿ ìàêñèìóì. Íà÷àëî. if (hFr1-High[shift]!=0 && hFr1>0) { numLowPrim=0; numLowLast=0; numHighPrim=shift; numHighLast=0; LowPrim=0.0; LowLast=0.0; HighPrim=High[shift]; HighLast=0.0; flagHigh=false; Angle=-100; for (k=shift+1; k<Bars; k++) { if (ExtMapBuffer[k]>0.0 && LowPrim==0.0 && ExtMapBuffer[k]==zz[k]) {LowPrim=ExtMapBuffer[k]; numLowPrim=k;} if (ExtMapBuffer[k]>0.0 && ExtMapBuffer[k]<LowPrim && ExtMapBuffer[k]==zz[k]) {LowPrim=ExtMapBuffer[k]; numLowPrim=k;} if (ExtMapBuffer2[k]>0.0 && ExtMapBuffer2[k]==zz[k]) { if (HighLast>0) { if (flagHigh) { if (ExtMapBuffer2[k]>HighLast) {HighLast=High[k]; numHighLast=k;} } else { if (ExtMapBuffer2[k]>HighPrim) flagHigh=true; HighLast=High[k]; numHighLast=k; } } else {numHighLast=k; HighLast=High[k];} HL=High[numHighLast]-Low[numLowPrim]; kj=(HighPrim-HighLast)*10000/(numHighLast-numHighPrim); if (HL>0 && (Angle>kj || Angle==-100)) // Ïðîâåðêà óãëà íàêëîíà ëèíèè { Angle=kj; // Ñîçäàíèå ëèíèè HLp=High[numHighPrim]-Low[numLowPrim]; k1=MathCeil((shift+numHighLast)/2); kj=HLp/HL; // Ïîèñê ñòàðîé ñîåäèíèòåëüíîé ëèíèè numOb=ObjectFind("ph" + Time[numHighPrim] + "_" + Time[numHighLast]); if (numOb>-1) { if (kj>0.21 && kj<=5) { // Ïåðåìåùåíèå îáúåêòîâ ObjectMove("ph" + Time[numHighPrim] + "_" + Time[numHighLast],0,Time[numHighPrim],High[numHighPrim]); ObjectMove("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2)); // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìàêñèìóìàìè kk=kj; k2=1; if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (k2<0) // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëî Ïåñàâåíòî if (ExtHidden!=4 && ExtHidden>0) { if (kk==0.886) ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial", ExtGartley866); else ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial",ExtPesavento); } else // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî) if (ExtHidden==1 || ExtHidden==4) ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo); } else { ObjectDelete("ph" + Time[numHighPrim] + "_" + Time[numHighLast]); ObjectDelete("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast]); } } else { //******* Ïðîðèñîâêà íîâîé ëèíèè, åñëè îíà ïîÿâèëàñü. if (kj>0.21 && kj<=5) { // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìàêñèìóìàìè kk=kj; k2=1; if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (k2<0) // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866 { if (ExtHidden!=4 && ExtHidden>0) { ObjectCreate("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TEXT,0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2)); if (kk==0.886) // Gartley ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial", ExtGartley866); else ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],fitxt[ki],7,"Arial",ExtPesavento); } } else // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866) { if (ExtHidden==1 || ExtHidden==4) { ObjectCreate("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TEXT,0,Time[k1],MathAbs((High[numHighPrim]+High[numHighLast])/2)); ObjectSetText("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo); } } if ((ExtHidden==2 && k2<0) || (ExtHidden!=0 && ExtHidden!=2)) { ObjectCreate("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJ_TREND,0,Time[numHighPrim],High[numHighPrim],Time[numHighLast],High[numHighLast]); ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_RAY,false); ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_STYLE,STYLE_DOT); ObjectSet("ph" + Time[numHighPrim] + "_" + Time[numHighLast],OBJPROP_COLOR,ExtLine); } } //******* } } } } hFr1=High[shift]; timeFr1=Time[shift]; } //============= 1 ñìåñòèëñÿ ìàêñèìóì. Êîíåö. // //============= 1 ñìåñòèëñÿ ìèíèìóì. Íà÷àëî. if (lFr1-Low[shift]!=0 && lFr1>0) { numLowPrim=0; numLowLast=0; numHighPrim=shift; numHighLast=0; LowPrim=Low[shift]; LowLast=0.0; HighPrim=0.0; HighLast=0.0; flagLow=false; Angle=-100; for (k=shift+1; k<Bars; k++) { if (ExtMapBuffer2[k]>HighPrim) {HighPrim=High[k]; numHighPrim=k;} if (ExtMapBuffer[k]>0.0 && ExtMapBuffer[k]==zz[k]) { if (LowLast>0) { if (flagLow) { if (ExtMapBuffer[k]<LowLast) {LowLast=Low[k]; numLowLast=k;} } else { if (ExtMapBuffer[k]<LowPrim) flagLow=true; LowLast=Low[k]; numLowLast=k; } } else {numLowLast=k; LowLast=Low[k];} HL=High[numHighPrim]-Low[numLowLast]; kj=(LowPrim-LowLast)*1000/(numLowLast-numLowPrim); if (HL>0 && (Angle<kj || Angle==-100)) // Ïðîâåðêà óãëà íàêëîíà ëèíèè { Angle=kj; HLp=High[numHighPrim]-Low[numLowPrim]; k1=MathCeil((numLowPrim+numLowLast)/2); kj=HLp/HL; // Ïîèñê ñòàðîé ñîåäèíèòåëüíîé ëèíèè numOb=ObjectFind("pl" + Time[numLowPrim] + "_" + Time[numLowLast]); if (numOb>-1) { if (kj>0.21 && kj<=5) { // Ïåðåìåùåíèå îáúåêòîâ ObjectMove("pl" + Time[numLowPrim] + "_" + Time[numLowLast],0,Time[numLowPrim],Low[numLowPrim]); ObjectMove("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2)); // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìèíèìóìàìè kk=kj; k2=1; if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (k2<0) // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866 { if (ExtHidden!=4 && ExtHidden>0) { if (kk==0.886) // Gartley ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial", ExtGartley866); else ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial",ExtPesavento); } } else // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866) if (ExtHidden==1 || ExtHidden==4) ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo); } else { ObjectDelete("pl" + Time[numLowPrim] + "_" + Time[numLowLast]); ObjectDelete("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast]); } } else { //******* Ïðîðèñîâêà íîâîé ëèíèè, åñëè îíà ïîÿâèëàñü. if (kj>0.21 && kj<=5) { // Ñîçäàíèå òåêñòîâîãî îáúåêòà (÷èñëà Ïåñàâåíòî). % âîññòàíîâëåíèÿ ìåæäó ìèíèìóìàìè kk=kj; k2=1; if (ExtDeltaType==2) for (ki=16;ki>=0;ki--) {if (MathAbs((fi[ki]-kj)/fi[ki])<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (ExtDeltaType==1) for (ki=16;ki>=0;ki--) {if (MathAbs(fi[ki]-kj)<=ExtDelta) {kk=fi[ki]; k2=-1; break;}} if (k2<0) // ïðîöåíò âîññòàíîâëåíèÿ ÷èñëà Ïåñàâåíòî è 0.866 { if (ExtHidden!=4 && ExtHidden>0) { ObjectCreate("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TEXT,0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2)); if (kk==0.886) // Gartley ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial", ExtGartley866); else ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],fitxt[ki],7,"Arial",ExtPesavento); } } else // ïðîöåíò âîññòàíîâëåíèÿ (íå Ïåñàâåíòî è 0.866) { if (ExtHidden==1 || ExtHidden==4) ObjectCreate("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TEXT,0,Time[k1],MathAbs((Low[numLowPrim]+Low[numLowLast])/2)); ObjectSetText("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast],""+DoubleToStr(kk,2),7,"Arial",ExtNotFibo); } if ((ExtHidden==2 && k2<0) || (ExtHidden!=0 && ExtHidden!=2)) { ObjectCreate("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJ_TREND,0,Time[numLowPrim],Low[numLowPrim],Time[numLowLast],Low[numLowLast]); ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_RAY,false); ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_STYLE,STYLE_DOT); ObjectSet("pl" + Time[numLowPrim] + "_" + Time[numLowLast],OBJPROP_COLOR,ExtLine); } } //******* } } } } lFr1=Low[shift]; timeFr1=Time[shift]; } //============= 1 ñìåñòèëñÿ ìèíèìóì. Êîíåö. //-----------3 Ñìåñòèëñÿ ìèíèìóì èëè ìàêñèìóì, íî îñòàëñÿ íà òîì æå áàðå. Êîíåö. // Ïîèñê èñ÷åçíóâøèõ ôðàêòàëîâ è óäàëåíèå ëèíèé, èñõîäÿùèõ îò ýòèõ ôðàêòàëîâ. Ïåðåçàïèñü ìàòðèöû. for (k=0; k<5; k++) { if (afrl[k]>0) { // Ïîèñê áàðà, íà êîòîðîì áûë ýòîò ôðàêòàë shift=iBarShift(Symbol(),Period(),afr[k]); if (zz[shift]==0) { if (shift>numBar) numBar=shift; afr[5]=0; numLowPrim=shift; numLowLast=0;LowLast=10000000; for (k1=shift+1; k1<Bars; k1++) { if (ExtMapBuffer[k1]<LowLast && ExtMapBuffer[k1]>0) { LowLast=Low[k1]; numLowLast=k1; numOb=ObjectFind("pl" + Time[numLowPrim] + "_" + Time[numLowLast]); if (numOb>-1) { ObjectDelete("pl" + Time[numLowPrim] + "_" + Time[numLowLast]); ObjectDelete("pltxt" + Time[numLowPrim] + "_" + Time[numLowLast]); } } } } } if (afrh[k]>0) { // Ïîèñê áàðà, íà êîòîðîì áûë ýòîò ôðàêòàë shift=iBarShift(Symbol(),Period(),afr[k]); if (zz[shift]==0) { if (shift>numBar) numBar=shift; afr[5]=0; numHighPrim=shift; numHighLast=0;HighLast=0.0; for (k1=shift+1; k1<Bars; k1++) { if (ExtMapBuffer2[k1]>HighLast) { HighLast=High[k1]; numHighLast=k1; numOb=ObjectFind("ph" + Time[numHighPrim] + "_" + Time[numHighLast]); if (numOb>-1) { ObjectDelete("ph" + Time[numHighPrim] + "_" + Time[numHighLast]); ObjectDelete("phtxt" + Time[numHighPrim] + "_" + Time[numHighLast]); } } } } } } // Ïåðåçàïèñü ìàòðèöû if (afr[5]<1) if (ExtFibo) ObjectDelete("Fibo"); { k=0; for (shift=0; shift<Bars && k<5; shift++) { if (zz[shift]>0) { afr[k]=Time[shift]; if (zz[shift]==ExtMapBuffer[shift]) {afrl[k]=Low[shift]; afrh[k]=0.0;} if (zz[shift]==ExtMapBuffer2[shift]) {afrh[k]=High[shift]; afrl[k]=0.0;} k++; } } afr[k]=1; if (ExtFibo) { if (afrl[1]>0) ObjectCreate("fibo",OBJ_FIBO,0,afr[2],afrh[2],afr[1],afrl[1]); else ObjectCreate("fibo",OBJ_FIBO,0,afr[2],afrl[2],afr[1],afrh[1]); } } // Ïðîâåðêà íà ðàçðåøåíèå âûâîäà îñíàñòêè. Êîíåö. // } // // Êîððåêöèÿ. Êîíåö. } // end }
Sample
Analysis
Market Information Used:
Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Series array that contains open time of each bar
Indicator Curves created:
Implements a curve of type DRAW_SECTION
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen