52 lines
		
	
	
	
		
			905 B
		
	
	
	
		
			MQL5
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
	
		
			905 B
		
	
	
	
		
			MQL5
		
	
	
	
	
	
| 
								 | 
							
								#include "Tick.mqh"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct ZIGZAG
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								  bool FlagUP;
							 | 
						||
| 
								 | 
							
								  int MinMax;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								  const int MinPips;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ZIGZAG ( const int iMinPips = 0 ) : FlagUP(true), MinMax(0), MinPips(iMinPips)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  bool Calc( const MqlTick &tick )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    bool Res = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const TICK Tick = tick;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (this.FlagUP)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      if (Tick.bid > this.MinMax)
							 | 
						||
| 
								 | 
							
								        this.MinMax = Tick.bid;
							 | 
						||
| 
								 | 
							
								      else if (Res = (this.MinMax - Tick.ask >= this.MinPips))
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        this.MinMax = Tick.ask;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        this.FlagUP = false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      if (Tick.ask < this.MinMax)
							 | 
						||
| 
								 | 
							
								        this.MinMax = Tick.ask;
							 | 
						||
| 
								 | 
							
								      else if (Res = (Tick.bid - this.MinMax >= this.MinPips))
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        this.MinMax = Tick.bid;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        this.FlagUP = true;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return(Res);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  double GetLastZZ( void ) const
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    return(this.MinMax * _Point);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 |