//+------------------------------------------------------------------+ //| Diver.mq4 | //| Mishell | //| Ôóíêöèè îïðåäåëÿþùèå íàëè÷èå äèâåðãååíöèè è åå âèä | //+------------------------------------------------------------------+ #property copyright "Mishell" #property link "" #property library int sAddpips; int bAddpips; int BearsPeriod=13; int BullsPeriod=13; // ----- Êîíñòàíòû-ñèãíàëû ------ int Div; // Ñ÷åò÷èê äèâåðãåíöèé int Div1Bar; int Div2Bar; int Div3Bar; int Div1Wave; // íîìåð ïèêà èíäèêàòîðà ñèëû áûêîâ äëÿ äèâåðãåíöèè 1 int Div2Wave; int Div3Wave; int Div1Main=0; int Conv; //Ñ÷åò÷èê êîíâåðãåíöèé int Conv1Bar; int Conv2Bar; int Conv3Bar; int Conv1Wave; // íîìåð ïèêà èíäèêàòîðà ñèëû ìåäâåäåé äëÿ êîíâåðãåíöèè 1 int Conv2Wave; int Conv3Wave; int BeginBar; // áàð îò êîòîðîãî èùåòñÿ äèâåðãåíöèÿ int BeginBarDown;// áàð îò êîòîðîãî èùåòñÿ êîíâåðãåíöèÿ int ContinueBar;// òåêóùèé áàð ïîèñêà äèâåðãåíöèè int ContinueBarDown; //òåêóùèé áàð ïîèñêà êîíâåðãåíöèè int UpWaveNum=0 ; // ñ÷åò÷èê âåðøèí BullsPower int DownWaveNum=0 ; // ñ÷åò÷èê ÿì BearsPower //+--------------------------------------------------------------------------+ //| Îïðåäåëåíèå íàëè÷èÿ ñèãíàëà î ñìåíå âîñõîäÿùåãî òðåíäà èëè íà÷àëå îòêàòà //+--------------------------------------------------------------------------+ int BreackUpTrendCondition (int TimeFrame, int MaxWaveNum) { int TopBar;// òåêóùèé ïðîâåðÿåìûé áàð // Print("Begin div while"); TopBar=ContinueBar; // //Ïðîâåëÿåì íàëè÷èå äèâåðãåíöèè while (! ( ((iHigh(NULL,TimeFrame,BeginBar)+sAddpips*Point)>=iHigh(NULL,TimeFrame,TopBar) && iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, BeginBar)< iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar)) || (UpWaveNum==MaxWaveNum || iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar)<0) ) ) { //while //Äèâåðãåíöè íåò. Òîãäà, // Åñëè ìû íàøëè ïèê èíäèêàòîðà, òî óâåëè÷èâàåì ñ÷åò÷èê ïèêîâ íà 1 if ( (iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar)> iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar-1) && iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar)> iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar+1)) ) {//1 UpWaveNum++ ; }//1 // Åñëè æå ïèêà íåò, // ïðè óñëîâèè, ÷òî ñ÷åò÷èê "áû÷üèõ" ïèêîâ = 0 è äâèæåíèå îò ñîñåäíåãî áàðà - íèñõîäÿùåå // óñòàíàâëèâàåì ýòîò ñîñåäíèé áàð êàê íà÷àëüíûé else if ( (UpWaveNum==0 && Div==0) && (iBullsPower(NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, BeginBar)< iBullsPower(NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, BeginBar+1) ) ) { BeginBar++; } TopBar++; //ïåðåõîäèì íà ñëåäóþùèé áàð }//while if (UpWaveNum< MaxWaveNum ) {//Åñëè äèâåðãåíöèÿ íàéäåíà óâåëè÷èâàåì ñ÷åò÷èê äèâåðãåíöèè Div++; // Ïðîâåðÿåì íå ïèê ëè ýòî èíäèêàòîðà if ( (iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar)> iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar-1) && iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar)> iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE, TopBar+1)) ) UpWaveNum++ ; switch(Div) {//sw case 1 : Div1Bar=TopBar; Div1Wave=UpWaveNum; break; case 2 : Div2Bar=TopBar; Div2Wave=UpWaveNum; break; case 3 : Div3Bar=TopBar; Div3Wave=UpWaveNum; break; }//switch }//div //--------------------- return(TopBar); //--------------------- } //+--------------------------------------------------------------------------+ //| Îïðåäåëåíèå íàëè÷èÿ ñèãíàëà î ñìåíå íèñõîäÿùåãî òðåíäà èëè íà÷àëå îòêàòà //+--------------------------------------------------------------------------+ int BreackDownTrendCondition (int TimeFrame, int WaveNum) { int TopBar; // Print("Begin conv while"); TopBar=ContinueBarDown; // while (!( (iLow(NULL,TimeFrame,BeginBarDown)-bAddpips*Point<=iLow(NULL, TimeFrame,TopBar) && iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, BeginBarDown)> iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar)) || ( DownWaveNum==WaveNum //cWaveTopNum || iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar)>0) )) { if ( (iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar)< iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar-1) && iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar)< iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar+1)) ) { DownWaveNum++ ; } else if (DownWaveNum==0 && Conv==0 && (iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, BeginBarDown)> iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, BeginBarDown+1) )) {BeginBarDown++;} TopBar++; } if (DownWaveNum<WaveNum ) {Conv++; if ( (iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar)< iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar-1) && iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar)< iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE, TopBar+1)) ) DownWaveNum++ ; switch(Conv) { case 1 : Conv1Bar=TopBar; Conv1Wave=DownWaveNum; break; case 2 : Conv2Bar=TopBar; Conv2Wave=DownWaveNum; break; case 3 : Conv3Bar=TopBar; Conv3Wave=DownWaveNum; break; }//switch }//if //--------------------- return(TopBar); //--------------------- } //+------------------------------------------------------------------+ // Èùåì äèâåðãåíöèþ //+------------------------------------------------------------------+ bool SeachDiv(int TimeFrame, int MaxWaveNum, int StartBar=0) {int BullDivBar=0; // Áàð äèâåðãåíöèè áûêîâ dinstall(StartBar); while (!( UpWaveNum==MaxWaveNum || Div>2 || iBullsPower( NULL, TimeFrame, BullsPeriod, PRICE_CLOSE,BullDivBar)<0 ) ) { BullDivBar=BreackUpTrendCondition (TimeFrame, MaxWaveNum);//íàõîäèì áàð äèâåðãåíöèè //óñòàíàâëèâàåì ñîïóòñòâóþùèå ñèãíàëüíûå ïåðåìåííûå ContinueBar=BullDivBar+1;//óñòàíàâëèâàåì áàð äëÿ ñëåäóþùåãî ïîèñêà äèâåðãåíöèè }//end while // Èòîãîâûå ñîîáùåíèÿ if (UpWaveNum < MaxWaveNum && Div>0) { // Alert(Symbol(),"Äèâåã1:Áàð ¹ ",Div1Bar," âîëíà ",Div1Wave,";Äèâåã2:Áàð ¹ ",Div2Bar," âîëíà ",Div2Wave, // ";Äèâåã3:Áàð ¹ ",Div3Bar," âîëíà ",Div3Wave," Íà÷àëüíûé áàð=",BeginBar); return(true); } else return(false); } //+------------------------------------------------------------------+ // Èùåì êîíâåðãåíöèþ //+------------------------------------------------------------------+ bool SeachConv(int TimeFrame, int cMaxWaveNum, int StartBar=0) { int BearConvBar=0; //Áàð êîíâåðãåíöèè ìåäâåäåé //Print("Íà÷àëî áîëüøîãî öèêëà ïîèñêà êîâåðãåíöèè"); cinstall(StartBar); while (!( DownWaveNum==cMaxWaveNum || Conv>2 || iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE,BearConvBar)>0 ) //iBearsPower( NULL, TimeFrame, BearsPeriod, PRICE_CLOSE,ContinueBarDown)>0 )//ïðîïóñêàåò "óòîïëåííûõ" ìåäâåäåé ) { BearConvBar=BreackDownTrendCondition(TimeFrame, cMaxWaveNum ); ContinueBarDown=BearConvBar+1; }//end while // Èòîãîâûå ñîîáùåíèÿ if (DownWaveNum<cMaxWaveNum && Conv>0) { // Alert(Symbol()," ",TimeFrame," ",buyADX," ",WaitUp ," Êîíâåã1:Áàð ¹ ",Conv1Bar," âîëíà ",Conv1Wave,";Êîíâåã2:Áàð ¹ ",Conv2Bar, // " âîëíà ",Conv2Wave,";Êîíâåã3:Áàð ¹ ",Conv3Bar," âîëíà ",Conv3Wave," Íà÷àëüíûé áàð=",BeginBarDown); return(true); } else return(false); } bool DiverKind(int SeekBar, int TimeFrame) {double MetaClose; if (SeekBar==0) MetaClose=Close[0]+sAddpips*Point; else MetaClose = iHigh(NULL,TimeFrame,SeekBar)+sAddpips*Point; if( BeginBar<SeekBar+1 && (//1&& (Div==1 && MetaClose>iHigh(NULL,TimeFrame,Highest(NULL,TimeFrame,MODE_HIGH,Div1Bar,1)) && Div1Bar==Highest(NULL,TimeFrame,MODE_HIGH,3,Div1Bar-1) ) || (Div==2 && MetaClose>iHigh(NULL,TimeFrame,Highest(NULL,TimeFrame,MODE_HIGH,Div2Bar,1)) && (Div2Bar==Highest(NULL,TimeFrame,MODE_HIGH,3,Div2Bar-1) || Div1Bar==Highest(NULL,TimeFrame,MODE_HIGH,3,Div1Bar-1) ) ) || (Div>=3 && MetaClose>iHigh(NULL,TimeFrame,Highest(NULL,TimeFrame,MODE_HIGH,Div3Bar,1) ) && (Div2Bar==Highest(NULL,TimeFrame,MODE_HIGH,3,Div2Bar-1) //&& || Div3Bar==Highest(NULL,TimeFrame,MODE_HIGH,3,Div3Bar-1) ) ) )//1&& ) return(true); else return(false); } //+------------------------------------------------------------------+ // Òðåáîâàíèÿ ê êîíâåðãåíöèè //+------------------------------------------------------------------+ bool ConvKind(int SeekBar, int TimeFrame) { double lowLevel; if (SeekBar==0) lowLevel=Close[0]-bAddpips*Point; else lowLevel=iLow(NULL,TimeFrame,SeekBar)-bAddpips*Point; if ( BeginBarDown<SeekBar+1 && (//1 (Conv==1 && lowLevel< iLow(NULL,TimeFrame,Lowest(NULL,TimeFrame,MODE_LOW,Conv1Bar,SeekBar+1)) && Conv1Bar==Lowest(NULL,TimeFrame,MODE_LOW,3,Conv1Bar-1)) || (Conv==2 && lowLevel< iLow(NULL,TimeFrame,Lowest(NULL,TimeFrame,MODE_LOW,Conv2Bar,SeekBar+1)) && (Conv1Bar==Lowest(NULL,TimeFrame,MODE_LOW,3,Conv1Bar-1) || Conv2Bar==Lowest(NULL,TimeFrame,MODE_LOW,3,Conv2Bar-1) ) ) || (Conv>2 //2 && lowLevel< iLow(NULL,TimeFrame,Lowest(NULL,TimeFrame,MODE_LOW,Conv3Bar,SeekBar+1)) && (//3 Conv1Bar==Lowest(NULL,TimeFrame,MODE_LOW,3,Conv1Bar-1) || Conv2Bar==Lowest(NULL,TimeFrame,MODE_LOW,3,Conv2Bar-1) || Conv3Bar==Lowest(NULL,TimeFrame,MODE_LOW,3,Conv3Bar-1) )//3 )//2 )//1 ) return(true); else return(false); } //+------------------------------------------------------------------+ //| expert initialization variables | //+------------------------------------------------------------------+ void dinstall(int StrBar) { Div=0; // Èçíà÷àëüíî ñ÷èòàåì, ÷òî äèâèðãåíöèè íåò Div1Bar=0; Div2Bar=0; Div3Bar=0; Div1Wave=0; // íîìåð âîëíû äèâåðãåíöèè 1 Div2Wave=0; // íîìåð âîëíû äèâåðãåíöèè 2 Div3Wave=0; // íîìåð âîëíû äèâåðãåíöèè 3 UpWaveNum=0 ; //=== áàðû ñ êîòîðûìè îïðåäåëÿþòñÿ äèâåðãåíöèÿ è êîíâåðãåíöèÿ === BeginBar=StrBar; ContinueBar=BeginBar+1; return; } void cinstall(int StrBar) { Conv =0 ; Conv1Bar=0; Conv2Bar=0; Conv3Bar=0; Conv1Wave=0 ; // íîìåð âîëíû êîíâåðãåíöèè 1 Conv2Wave=0; // íîìåð âîëíû êîíâåðãåíöèè 2 Conv3Wave=0; // íîìåð âîëíû êîíâåðãåíöèè 3 DownWaveNum=0 ; BeginBarDown=StrBar; ContinueBarDown=StrBar+1; return; } void AddpipsInit(int spips,int bpips) { sAddpips=spips; bAddpips=bpips; return; } void PeriodInit(int P1,int P2) { BearsPeriod=P1; BullsPeriod=P2; return; } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Bulls Power indicator
Bears Power indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: