Elliott Wave indic_v1





/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                           Elliott Wave indic.mq4 |
//|                                  Copyright © 2006, GwadaTradeBoy |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, GwadaTradeBoy"
#property link      "http://www.metaquotes.net"

/*
An Impulse pattern moves in the direction of the underlying trend && is 
made up of five waves, or moves.
Each wave is labeled at its endpoint. 
The Elliott Wave Principle identifies an Impulse wave when:

   1. Wave 2 does not fall below the starting price of wave 1.
   2. Wave 3 is not the shortest wave by price movement when comparing 
   to wave 1 && wave 5.
   3. Wave 4 does not overlap the range of wave 1. 
/* Rappel des fmles de calcul 
Pivot point (Pivot) = (H + L + C) / 3
First resistance level (R1) = (2 * P) - L
First support level (S1) = (2 * P) - H
Second resistance level (R2) = P + (R1 - S1)
Second support level (S2) = P - (R1 - S1)
H, L, C are the previous High, Low && Close.
*/

#property indicator_chart_window
//---- Insertion
//---- 
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 Violet

//********** Variables pour l'indicateur **********//
//---- Section des #define
#define MaxBars 200
#define RetracementBars 100
#define EWPeriod 10
#define NoisePips 30
#define MinTakeProfit 50
#define SARstep 0.0015
#define SARmax 0.0100
#define MaxTrades 1
#define AntiStopLoss 0
#define Slippage 5
#define DelayedBidsTimeout 172800
#define BidStopPoints 60
#define BidLimitPoints 50
#define TrailingStep 10
#define IncrementLots 1
#define MinMoney 0
#define MiniForexMode 1
//---- Insertion
#define Title "EW"
#define UpperDistance 15
#define LowerDistance 5

//---- Section des variables numériques
//double counter = 0;
int    counter = 0;
double counter2 = 0;
double ComputedPricesCount = 0;
//---- Section Parametre EW
double EW1 = 0, EW2 = 0, EW3 = 0, EW4 = 0, EW5 = 0;
double LastEW1 = 0, LastEW2 = 0, LastEW3 = 0, LastEW4 = 0, LastEW5 = 0;
double EW0MARK = 0, EW1MARK = 0, EW2MARK = 0, EW3MARK = 0, EW4MARK = 0, EW5MARK = 0;
double EW1MARKTIME = 0, EW2MARKTIME = 0, EW3MARKTIME = 0, EW4MARKTIME = 0, EW5MARKTIME = 0;
double EW1MARKARROW = 0, EW2MARKARROW = 0, EW3MARKARROW = 0, EW4MARKARROW = 0, EW5MARKARROW = 0;
double EW1MARKBAR = 0, EW2MARKBAR = 0, EW3MARKBAR = 0, EW4MARKBAR = 0, EW5MARKBAR = 0;
double tempval = 0;
string tempval2 = "";
double EWOscillator = 0,EWLevel = 0,ShortPeriod = 0,LongPeriod = 0,LastEW = 0;
double SARAngle = 0;
double WaveAngle = 0;
double MaxPriceBar = 0, MinPriceBar = 0;
double BarsShift = 0;
double BarsCount = 0;
double prevbars = 0;
double CalcBarDiff = 0;
double ParabolicSAR = 0;
double MA = 0, MA2 = 0;
double ShortMA = 0, LongMA = 0;
double MACD = 0, ShortMACD = 0;
double MACDAngle = 0, ShortMACDAngle = 0;
//---- Pivot, Support, Résistance
double Pivot = 0,SupportLevel1 = 0,SupportLevel2 = 0,ResistanceLevel1 = 0,ResistanceLevel2 = 0;
double tmpPivot = 0,tmpSupportLevel1 = 0,tmpSupportLevel2 = 0,tmpResistanceLevel1 = 0,tmpResistanceLevel2 = 0;
double RSI = 0,CCI = 0,ShortRSI = 0,PriceLevel = 0,LastPriceLevel = 0,FiboLevel = 0;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];
//---- Calcul et dessin
int    shift, back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
int num=0;
int Elliot[6];
string ElliotWave="None";
double Winkel1, Winkel2;
bool found=false;

//---- Parametre des Ordres
double StartMoney = 0;
double EW3ORDERMARK = 0;
double EW5PRICE = 0;
double ORDERMARK = 0;
double ORDERANGLE = 0;
double ORDERSKIP = 0, ORDERPRICE = 0, ORDERCOUNT = 0;
double ENTRYPRICE = 0, LASTENTRYPRICE = 0;
double MinTakeProfitPtS = 0;
double MaxPrice = 0, MinPrice = 0;
double TrailingStopPoint = 0;
double Trace = 0;
double TradingPrice = 0;
double TotalLots = 0;
double TradesCount = 0;
double StartDeposit = 0;
double BuyStopLoss = 0, SellStopLoss = 0, BuyBidStopLoss = 0, SellBidStopLoss = 0,BuyLimitStopLoss = 0;
double SellLimitStopLoss = 0, TrailingStopLoss = 0;
double TakeProfit = 0;
double BidStopPts = 0;
double BidLimitPts = 0;
//double OrderType = 0;
double LastBidTime = 0;
double BadOrder = 0, CloseBadOrder = 0;
double LastBadTime = 0,OrderRecovery = 0,LastOp = 0,LastOldOp = 0,BuyOp = 0,SellOp = 0,EntryTrail = 0,StopLoss = 0,StopLossTrail = 0;
double Bears = 0,Bulls = 0,BearsAngle = 0,BullsAngle = 0;


//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur                        |
//+------------------------------------------------------------------+
int init()
   {
//---- 
      IndicatorBuffers(2);
//---- drawing settings
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0,217);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1,217);
      SetIndexStyle(3,DRAW_SECTION);
//---- indicator buffers mapping
      SetIndexBuffer(0,ExtMapBuffer);
      SetIndexEmptyValue(0,0.0);
      ArraySetAsSeries(ExtMapBuffer,true);
      SetIndexBuffer(1,ExtMapBuffer2); 
      SetIndexEmptyValue(1,0.0);
      ArraySetAsSeries(ExtMapBuffer2,true);
//---- indicators
      EW0MARK = 0;
      EW1MARK = 0;
      EW2MARK = 0;
      EW3MARK = 0;
      EW4MARK = 0;
      EW5MARK = 0;
      ORDERMARK = 0;
      prevbars = 0;
/*
      if BidStopPts < BidStopPoints  BidStopPts = BidStopPoints;
      if BidLimitPts < BidLimitPoints  BidLimitPts = BidLimitPoints;
      BidStopPts = BidStopPts * Point;
      BidLimitPts = BidLimitPts * Point;
      StartDeposit = MinMoney;
      if StartDeposit = 0  
         StartMoney=Balance;
      else 
         StartMoney = StartDeposit;*/
//      Print(AccountName,"(#",AccountNumber,") ",Symbol()," Elliot Wave Retracement analizer loaded.");
//---- indicator short name
      IndicatorShortName("Elliot Wave");
//----
      return(0);
   }
//+------------------------------------------------------------------+
//| Fonction de desinitialisation de l'indicateur                    |
//+------------------------------------------------------------------+
int deinit()
   {
//----
      
//----
      return(0);
   }
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur                             |
//+------------------------------------------------------------------+
int start()
   {
      int   counted_bars=IndicatorCounted();
      int   Peak[MaxBars],h,i,j;

//----
      if (Bars != prevbars) 
// Save extra CPU when making signals because we do not have new price in chart in test mode
         {

            Bears=iBearsPower(NULL,0,RetracementBars,MODE_HIGH,0);
            Bulls=iBullsPower(NULL,0,RetracementBars,MODE_LOW,0);
            RSI=iRSI(NULL,0,RetracementBars,PRICE_CLOSE,0); 
            CCI=iCCI(NULL,0,MaxBars,PRICE_CLOSE,0);
            ShortRSI=iRSI(NULL,0,RetracementBars/5,PRICE_CLOSE,0);
            ParabolicSAR=iSAR(NULL,0,SARstep,SARmax,0); 
            MA=iMA(NULL,0,MaxBars,0,MODE_EMA,PRICE_CLOSE,0);
            MA2=iMA(NULL,0,MaxBars,0,MODE_SMA,PRICE_CLOSE,0);
            ShortMA=iMA(NULL,0,RetracementBars,0,MODE_EMA,PRICE_CLOSE,0);  
            LongMA=iMA(NULL,0,MaxBars*2,0,MODE_LWMA,PRICE_CLOSE,0);
            MACD=iMACD(NULL,0,RetracementBars,MaxBars,RetracementBars,PRICE_CLOSE,MODE_EMA,0);
            ShortMACD=iMACD(NULL,0,RetracementBars/5,RetracementBars,RetracementBars/5,PRICE_CLOSE,MODE_EMA,0);

            MaxPriceBar = Highest (MODE_CLOSE,MaxBars+1, MaxBars*2);
            MinPriceBar = Lowest (MODE_CLOSE, MaxBars+1, MaxBars*2);

/*
            if (MaxPriceBar < MinPriceBar) 
            //&& EW0MARK = 0
// first Elliot Wave would be UP
               WaveAngle = 1; 

            if (MinPriceBar < MaxPriceBar)
            //&& EW0MARK = 0
// first Elliot Wave would be DOWN
               WaveAngle = 2; 
*/
            if (MaxPriceBar < MinPriceBar) 
            //&& EW0MARK = 0
// first Elliot Wave would be UP
               WaveAngle = 1; 
            else 
            //if (MinPriceBar < MaxPriceBar)
            //&& EW0MARK = 0
// first Elliot Wave would be DOWN
               WaveAngle = 2; 

            MaxPrice = iClose(NULL,0,MaxPriceBar);
            MinPrice = iClose(NULL,0,MinPriceBar);
            if (WaveAngle == 1)
               FiboLevel = (MaxPrice - MinPrice) / (iOpen(NULL,0,0) - MinPrice)  * 100;
            else 
               FiboLevel = (MaxPrice - MinPrice) / (MaxPrice - iOpen(NULL,0,0) ) * 100;
            //LastPriceLevel=0;
            if (Bars > prevbars)
               {
                  ORDERANGLE = 0; 
                  Pivot=0;
                  SupportLevel1=0;
                  SupportLevel2=0;
                  ResistanceLevel1=0;
                  ResistanceLevel2=0;
                  LastPriceLevel=PriceLevel;

                  for (counter=RetracementBars;counter >=0; counter--)
                     {
                        MaxPriceBar = Highest (MODE_CLOSE,MaxBars+1+counter, MaxBars);
                        MinPriceBar = Lowest (MODE_CLOSE, MaxBars+1+counter, MaxBars);
                        MaxPrice = iClose(NULL,0,MaxPriceBar);
                        MinPrice = iClose(NULL,0,MinPriceBar);

                        tmpPivot=(MaxPrice+MinPrice+iOpen(NULL,0,counter+MaxBars)) / 3;
                        tmpResistanceLevel1=(2 * tmpPivot) - MinPrice;
                        tmpSupportLevel1=(2 * tmpPivot) - MaxPrice;  
                        tmpResistanceLevel2=tmpPivot + (tmpResistanceLevel1 - tmpSupportLevel1);
                        tmpSupportLevel2=tmpPivot - (tmpResistanceLevel1 - tmpSupportLevel1);

                        Pivot=Pivot + tmpPivot;
                        ResistanceLevel1=ResistanceLevel1 + tmpResistanceLevel1;
                        SupportLevel1=SupportLevel1 + tmpSupportLevel1;
                        ResistanceLevel2=ResistanceLevel2 + tmpResistanceLevel2;
                        SupportLevel2=SupportLevel2 + tmpSupportLevel2;
                        if (counter < MaxBars)
                           {
                              Pivot=Pivot / 2;
                              ResistanceLevel1=ResistanceLevel1 / 2;
                              SupportLevel1=SupportLevel1 / 2;
                              ResistanceLevel2=ResistanceLevel2 / 2;
                              SupportLevel2=SupportLevel2 / 2;
                           }
                        return(0);

                        if (WaveAngle == 1)
                           PriceLevel = (iOpen(NULL,0,0) / Point - SupportLevel2 / Point) / (ResistanceLevel2 / Point - SupportLevel2 / Point) * 100;

                        if (WaveAngle == 2)
                           PriceLevel = -(ResistanceLevel2 / Point - iOpen(NULL,0,0) / Point) / (ResistanceLevel2 / Point - SupportLevel2 / Point) * 100 ;


                        if (PriceLevel >151 
                        || PriceLevel < -151)
                           {
                              ComputedPricesCount = NormalizeDouble(PriceLevel / 100,0);
                              if (ComputedPricesCount < 0)
                                 ComputedPricesCount = -ComputedPricesCount;
                                 ComputedPricesCount=(2 + ComputedPricesCount) * MaxBars;
                                 //Print(TimeToStr(iTime(NULL,0,shift]),": ",Symbol," Price Level is over limit:",PriceLevel," Increasing Prices Count to:",ComputedPricesCount);
                              if (Bars <= ComputedPricesCount + MaxBars + 1)
                                 break;//Avoid out of range computing
 
                              ORDERANGLE = 0; 
                              Pivot=0;
                              SupportLevel1=0;
                              SupportLevel2=0;
                              ResistanceLevel1=0;
                              ResistanceLevel2=0;

                              for (counter=RetracementBars;counter >=0; counter--) //jusqu'a 0
                                 {
                                    MaxPriceBar = Highest (MODE_CLOSE,ComputedPricesCount+1+counter, ComputedPricesCount);
                                    MinPriceBar = Lowest (MODE_CLOSE, ComputedPricesCount+1+counter, ComputedPricesCount);
                                    MaxPrice = iClose(NULL,0,MaxPriceBar);
                                    MinPrice = iClose(NULL,0,MinPriceBar);

                                    tmpPivot=(MaxPrice+MinPrice+iOpen(NULL,0,counter+ComputedPricesCount)) / 3;
                                    tmpResistanceLevel1=(2 * tmpPivot) - MinPrice;
                                    tmpSupportLevel1=(2 * tmpPivot) - MaxPrice;
                                    tmpResistanceLevel2=tmpPivot + (tmpResistanceLevel1 - tmpSupportLevel1);
                                    tmpSupportLevel2=tmpPivot - (tmpResistanceLevel1 - tmpSupportLevel1);

                                    Pivot=Pivot + tmpPivot;
                                    ResistanceLevel1=ResistanceLevel1 + tmpResistanceLevel1;
                                    SupportLevel1=SupportLevel1 + tmpSupportLevel1;
                                    ResistanceLevel2=ResistanceLevel2 + tmpResistanceLevel2;
                                    SupportLevel2=SupportLevel2 + tmpSupportLevel2;
                                    if (counter < MaxBars)
                                       {
                                          Pivot=Pivot / 2;
                                          ResistanceLevel1=ResistanceLevel1 / 2;
                                          SupportLevel1=SupportLevel1 / 2;
                                          ResistanceLevel2=ResistanceLevel2 / 2;
                                          SupportLevel2=SupportLevel2 / 2;
                                       }
                                    return(0);


                        if (WaveAngle == 1)
                           PriceLevel = (iOpen(NULL,0,0) / Point - SupportLevel2 / Point) / (ResistanceLevel2 / Point - SupportLevel2 / Point) * 100;

                        if (WaveAngle == 2)
                           PriceLevel = -(ResistanceLevel2 / Point - iOpen(NULL,0,0) / Point) / (ResistanceLevel2 / Point - SupportLevel2 / Point) * 100 ;
                     }

                  /*MoveObject("Pivot",OBJ_HLINE,Time,Pivot,iTime(NULL,0,MaxBars],Pivot,White,1,STYLE_SOLID);
                  MoveObject(" ResistanceLevel2",OBJ_HLINE,Time,ResistanceLevel2,iTime(NULL,0,MaxBars],ResistanceLevel2,Blue,1,STYLE_SOLID);
                  MoveObject(" SupportLevel2",OBJ_HLINE,Time,SupportLevel2,iTime(NULL,0,MaxBars],SupportLevel2,Blue,1,STYLE_SOLID);
                  MoveObject(" ResistanceLevel1",OBJ_HLINE,Time,ResistanceLevel1,iTime(NULL,0,MaxBars],ResistanceLevel1,Red,1,STYLE_SOLID);
                  MoveObject(" SupportLevel1",OBJ_HLINE,Time,SupportLevel1,iTime(NULL,0,MaxBars],SupportLevel1,Red,1,STYLE_SOLID); */
                  ObjectCreate("Pivot",OBJ_HLINE,Time,Pivot,iTime(NULL,0,MaxBars),Pivot,White,1,STYLE_SOLID);
                  ObjectCreate(" ResistanceLevel2",OBJ_HLINE,Time,ResistanceLevel2,iTime(NULL,0,MaxBars),ResistanceLevel2,Blue,1,STYLE_SOLID);
                  ObjectCreate(" SupportLevel2",OBJ_HLINE,Time,SupportLevel2,iTime(NULL,0,MaxBars),SupportLevel2,Blue,1,STYLE_SOLID);
                  ObjectCreate(" ResistanceLevel1",OBJ_HLINE,Time,ResistanceLevel1,iTime(NULL,0,MaxBars),ResistanceLevel1,Red,1,STYLE_SOLID);
                  ObjectCreate(" SupportLevel1",OBJ_HLINE,Time,SupportLevel1,iTime(NULL,0,MaxBars),SupportLevel1,Red,1,STYLE_SOLID);

                  if (MaxPriceBar < MinPriceBar)
                     //MoveObject("Fibo",OBJ_FIBO,Time,ResistanceLevel2,iTime(NULL,0,MaxBars),SupportLevel2,Green,1,STYLE_DOT);
                     ObjectCreate("Fibo",OBJ_FIBO,Time,ResistanceLevel2,iTime(NULL,0,MaxBars),SupportLevel2,Green,1,STYLE_DOT);
                  else
                     //MoveObject("Fibo",OBJ_FIBO,Time,SupportLevel2,iTime(NULL,0,MaxBars),ResistanceLevel2,Green,1,STYLE_DOT);
                     ObjectCreate("Fibo",OBJ_FIBO,Time,SupportLevel2,iTime(NULL,0,MaxBars),ResistanceLevel2,Green,1,STYLE_DOT);

               }
               
/*
            if (WaveAngle = 1 
            && PriceLevel > 0
            && PriceLevel < 50)
               WaveAngle = 2;

            if (WaveAngle = 2 
            && PriceLevel < 0
            && PriceLevel > -50)
               WaveAngle = 1;

*/
/*
            if (EW3MARK == 1)
               {
                  //Print("EW0MARK:",EW0MARK," EW1MARK:",EW1MARK," EW2MARK:",EW2MARK," EW3MARK:",EW3MARK," EW3MARKBAR=",EW3MARKBAR," EW4MARK:",EW4MARK," EW0:",EW5PRICE," EW1:",EW1," EW2:",EW2," EW3:",EW3);
                  //Print("EW1MARKBAR:",EW1MARKBAR," EW2MARKBAR:",EW2MARKBAR," EW3MARKBAR:",EW3MARKBAR," EW3MARKBAR=",EW3MARKBAR," EW4MARK:",EW4MARK," EW0:",EW5PRICE," EW1:",EW1," EW2:",EW2," EW3:",EW3);
                  Print(TimeToStr(time),  
                  ": EW0=",TimeToStr(EW5MARKTIME),
                  " ",EW5,
                  " EW1=",TimeToStr(EW1MARKTIME),
                  " ",EW1,
                  " EW2=",TimeToStr(EW2MARKTIME),
                  " ",EW2,
                  " EW3=",TimeToStr(EW3MARKTIME),
                  " ",EW3
                  );
               }
*/
// Reallign Elliot Wave marked bars
            if (EW0MARK > 0)
               EW5MARKBAR= 0;
            if (EW1MARK > 0)
               EW1MARKBAR = 0;
            if (EW2MARK > 0)
               EW2MARKBAR = 0;
            if (EW3MARK > 0)
               EW3MARKBAR = 0;
            if (EW4MARK > 0) 
               EW4MARKBAR = 0;
            if (EW5MARK > 0)
               EW5MARKBAR = 0;
            if (EW0MARK > 0 || EW5MARK > 0)
               for (counter = 0;counter >= Bars -1; counter ++)
                  {
                     if (EW5MARKBAR > 0)
                        break; // reallign finished
                     tempval = iTime(NULL,0,counter);
                     if (EW5MARK == 0 && tempval == EW5MARKTIME)
                        EW5MARKBAR = counter;
                     if (EW1MARK > 0 && tempval == EW1MARKTIME)
                        EW1MARKBAR = counter;
                     if (EW2MARK > 0 && tempval == EW2MARKTIME)
                        EW2MARKBAR = counter;
                     if (EW3MARK > 0 && tempval == EW3MARKTIME)
                        EW3MARKBAR = counter;
                     if (EW4MARK > 0 && tempval == EW4MARKTIME)
                        EW4MARKBAR = counter;
                     if (EW5MARK > 0 && tempval == EW5MARKTIME)
                        EW5MARKBAR = counter;
                  }
            CalcBarDiff=(iTime(NULL,0,0)-iTime(NULL,0,Bars-1))/60/Period() - Bars + 1;

            if (Bars < MaxBars+2
            || (EW1MARK == 1 && EW1MARKBAR == 0)
            || (EW2MARK == 1 && EW2MARKBAR == 0)
            || (EW3MARK == 1 && EW3MARKBAR == 0)
            || (EW4MARK == 1 && EW4MARKBAR == 0)
            || (EW0MARK == 1 && EW5MARKBAR == 0)
            || (EW5MARK == 1 && EW5MARKBAR == 0)
            || EW1MARKBAR > Bars - 1
            || EW2MARKBAR > Bars - 1
            || EW3MARKBAR > Bars - 1
            || EW4MARKBAR > Bars - 1
            || EW5MARKBAR > Bars - 1)
               {
                  if (Bars > MaxBars+2
                  && prevbars < Bars)
                     {
                        //prevbars=Bars;
/*
                        Print("Bars:",Bars," EW1MARKBAR:",EW1MARKBAR," EW2MARKBAR:",EW2MARKBAR," EW3MARKBAR:",EW3MARKBAR," EW3MARKBAR=",EW3MARKBAR," EW4MARKBAR:",EW4MARKBAR," EW5MARKBAR:",EW5MARKBAR);
                        Print(TimeToStr(time),  
                        ": EW0=",TimeToStr(EW5MARKTIME),
                        " ",EW5,
                        " EW1=",TimeToStr(EW1MARKTIME),
                        " ",EW1,
                        " EW2=",TimeToStr(EW2MARKTIME),
                        " ",EW2,
                        " EW3=",TimeToStr(EW3MARKTIME),
                        " ",EW3
                        );
                        //Print(iTime(NULL,0,1]," ",iTime(NULL,0,Bars-1]," ",iTime(NULL,0,100]," ",iTime(NULL,0,1]-iTime(NULL,0,Bars-1]," ",(iTime(NULL,0,1]-iTime(NULL,0,Bars-1])/60/Period(), " ", iTime(NULL,0,0] - EW5MARKTIME);
*/
                        if (EW0MARK == 1 && EW1MARK == 0)
                           Print("ERROR: Bars:",Bars-1," EW0 Bar:", EW5MARKBAR, " EW0 Time:",TimeToStr(EW5MARKTIME), " Calculated EW0 Time:",TimeToStr(iTime(NULL,0,EW5MARKBAR))," EW0 Bars Diff:",(EW5MARKTIME - iTime(NULL,0,EW5MARKBAR))/60/Period());
                        if (EW1MARK == 1 && EW2MARK == 0)
                           Print("ERROR: Bars:",Bars-1," EW1 Bar:", EW1MARKBAR, " EW1 Time:",TimeToStr(EW1MARKTIME), " Calculated EW1 Time:",TimeToStr(iTime(NULL,0,EW1MARKBAR))," EW1 Bars Diff:",(EW1MARKTIME - iTime(NULL,0,EW1MARKBAR))/60/Period());
                        if (EW2MARK == 1 && EW3MARK == 0)
                           Print("ERROR: Bars:",Bars-1," EW2 Bar:", EW2MARKBAR, " EW2 Time:",TimeToStr(EW2MARKTIME), " Calculated EW2 Time:",TimeToStr(iTime(NULL,0,EW2MARKBAR))," EW2 Bars Diff:",(EW2MARKTIME - iTime(NULL,0,EW2MARKBAR))/60/Period());
                        if (EW3MARK == 1 && EW4MARK == 0)
                           Print("ERROR: Bars:",Bars-1," EW3 Bar:", EW3MARKBAR, " EW3 Time:",TimeToStr(EW3MARKTIME), " Calculated EW3 Time:",TimeToStr(iTime(NULL,0,EW3MARKBAR))," EW3 Bars Diff:",(EW3MARKTIME - iTime(NULL,0,EW3MARKBAR))/60/Period());
                        if (EW4MARK == 1 && EW5MARK == 0)
                           Print("ERROR: Bars:",Bars-1," EW4 Bar:", EW4MARKBAR, " EW4 Time:",TimeToStr(EW4MARKTIME), " Calculated EW4 Time:",TimeToStr(iTime(NULL,0,EW4MARKBAR))," EW4 Bars Diff:",(EW4MARKTIME - iTime(NULL,0,EW4MARKBAR))/60/Period());
                        if (EW5MARK == 1 && EW0MARK == 0)
                           Print("ERROR: Bars:",Bars-1," EW5 Bar:", EW5MARKBAR, " EW5 Time:",TimeToStr(EW5MARKTIME), " Calculated EW5 Time:",TimeToStr(iTime(NULL,0,EW5MARKBAR))," EW5 Bars Diff:",(EW5MARKTIME - iTime(NULL,0,EW5MARKBAR))/60/Period());
                     }
                  EW0MARK=0;
                  EW1MARK=0;  
                  EW1=0;
                  EW1MARKTIME=0;
                  EW1MARKBAR=0;
                  EW2MARK=0;
                  EW2=0;
                  EW2MARKTIME=0;
                  EW2MARKBAR=0;
                  EW3MARK=0;
                  EW3=0;
                  EW3MARKTIME=0;
                  EW3MARKBAR=0;
                  EW4MARK=0;
                  EW4=0;
                  EW4MARKTIME=0;
                  EW4MARKBAR=0;
                  EW5MARK=0;
                  EW5=0;
                  EW5MARKTIME=0;
                  EW5MARKBAR=0;
                  ORDERMARK=0;
                  //break;
               }

            if (EW0MARK == 0 && EW1MARK == 0)
               {
                  EW0MARK = 0;
                  EW1MARK = 0;
                  EW1MARKBAR = 0;
                  EW1MARKTIME = 0;
                  EW2MARK = 0;
                  EW2MARKBAR = 0;
                  EW2MARKTIME = 0;
                  EW3MARK = 0;
                  EW3MARKBAR = 0;
                  EW3MARKTIME = 0;
                  EW4MARK = 0;
                  EW4MARKBAR = 0;
                  EW4MARKTIME = 0;
                  EW5MARK = 0;
                  EW5MARKBAR = 0;
                  EW5MARKTIME = 0;
               }

            MaxPriceBar = Highest (MODE_CLOSE,MaxBars+1, MaxBars);
            MinPriceBar = Lowest (MODE_CLOSE, MaxBars+1, MaxBars);
            MaxPrice = iClose(NULL,0,MaxPriceBar);
            MinPrice = iClose(NULL,0,MinPriceBar);
            //MaxPriceBar=iTime(NULL,0,MaxPriceBar];
            //MinPriceBar=iTime(NULL,0,MinPriceBar];


            if (EW0MARK == 1 && EW2MARK == 0 && EW3MARK == 0)
// Recalculate EW entry point while have only Elliot Wave [I]
               {
                  MaxPriceBar = Highest (MODE_CLOSE,MaxBars+1, MaxBars);
                  MinPriceBar = Lowest (MODE_CLOSE, MaxBars+1, MaxBars);
                  MaxPrice = iClose(NULL,0,MaxPriceBar);
                  MinPrice = iClose(NULL,0,MinPriceBar);
                  if ((WaveAngle == 1 && MinPrice < EW5PRICE)
                  || (WaveAngle == 2 && MaxPrice > EW5PRICE))
                     {
                        if (EW5MARKBAR <= MaxBars)
                           {
//****
                              //DelArrow(EW5MARKTIME,EW5PRICE + StopLoss / 2 * Point);
                              //DelArrow(EW5MARKTIME,EW5PRICE - StopLoss / 2 * Point);
                              ObjectDelete("Arrow"+EW5MARKTIME);
                             
                           }
                        EW0MARK=0;
                     }
               }
/*
            if WaveAngle = 1 && Close[counter] > MaxPrice  
               Print("Counter:",counter, " MaxPrice:",MaxPrice);
            if WaveAngle = 2 && Close[counter] < MaxPrice  
               Print("Counter:",counter, " MinPrice:",MinPrice);
/*
//Reallign Elliot wave entry point
            if WaveAngle = 1 && MaxPriceBar < RetracementBars  
               WaveAngle = 2
            else
               if WaveAngle = 2 && MinPriceBar < RetracementBars*/

            //Print("PriceLevel:",PriceLevel);

            if (EW0MARK == 0)
            //or (MaxPriceBar > MinPriceBar && WaveAngle = 1)
            //or (MaxPriceBar < MinPriceBar && WaveAngle = 2)
               {
                  EW0MARK=1;
                  EW1MARK=0;
                  EW2MARK=0;
                  EW3MARK=0;
                  EW4MARK=0;
                  EW5MARK=0;
                  if (WaveAngle == 1)
// try to mark first Elliot Wave
                     {
                        EW5=MinPrice;
                        EW5MARKBAR=MinPriceBar;
                        EW5MARKTIME=iTime(NULL,0,MinPriceBar);
                        EW5PRICE=MinPrice;
                        EW1=MinPrice;
//*****
                        //SetArrow(EW5MARKTIME,EW5PRICE,128,White);
                        //SetArrow(EW5MARKTIME,EW5PRICE - StopLoss / 2 * Point,384,White);
                        ObjectCreate("Arrow"+EW5MARKTIME,OBJ_ARROW,0,EW5MARKTIME,EW5PRICE);
                        ObjectCreate("Arrow"+EW5MARKTIME,OBJ_ARROW,0,EW5MARKTIME,EW5PRICE - StopLoss / 2 * Point);
                        Comment("\nEWTrend=Possible UP",
                        "\nLastTime=",TimeToStr(iTime(NULL,0,0)),
                        "\nEW0=",TimeToStr(EW5MARKTIME),
                        "    ",EW5,
                        "\nPivot                         ",Pivot,
                        "\nResistance Level I            ",ResistanceLevel1,
                        "\nSupport Level I               ",SupportLevel1,
                        "\nResistance Level II           ",ResistanceLevel2,
                        "\nSupport Level II              ",SupportLevel2,
                        "\nPrice Level                   ",PriceLevel," %"
                        );
                        //Print(Symbol," EW0 Time:",TimeToStr(EW5MARKTIME),": EW0:",EW5," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);
                     }

                  if (WaveAngle == 2)
// try to mark first reversed Elliot Wave
                     {
                        EW5=MaxPrice;
                        EW5MARKBAR=MaxPriceBar;
                        EW5MARKTIME=iTime(NULL,0,MaxPriceBar);
                        EW5PRICE=MaxPrice;
                        EW1=MaxPrice;
//*****
                        //SetArrow(EW5MARKTIME,EW5PRICE,128,Violet);
                        //SetArrow(EW5MARKTIME,EW5PRICE + StopLoss / 2 * Point,384,Violet);
                        ObjectCreate("Arrow"+EW5MARKTIME,OBJ_ARROW,0,EW5MARKTIME,EW5PRICE);
                        ObjectCreate("Arrow"+EW5MARKTIME,OBJ_ARROW,0,EW5MARKTIME,EW5PRICE + StopLoss / 2 * Point);
                        Comment("\nEWTrend=Possible DOWN",
                        "\nLastTime=",TimeToStr(iTime(NULL,0,0)),
                        "\nEW0=",TimeToStr(EW5MARKTIME),
                        "    ",EW5,
                        "\nPivot                         ",Pivot,
                        "\nResistance Level I            ",ResistanceLevel1,
                        "\nSupport Level I               ",SupportLevel1,
                        "\nResistance Level II           ",ResistanceLevel2,
                        "\nSupport Level II              ",SupportLevel2,
                        "\nPrice Level                   ",PriceLevel," %"
                        );
                        //Print(Symbol," EW0 Time:",TimeToStr(EW5MARKTIME),": EW0:",EW5," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);
                     }
                  //Print ("waveangle=",WaveAngle);
               }

            //if IsTesting && EW3MARK = 1  Print("EW0MARK:",EW0MARK," EW1MARK:",EW1MARK," EW2MARK:",EW2MARK," EW3MARK:",EW3MARK," EW4MARK:",EW4MARK);

            BarsShift=EW5MARKBAR;
/*
            if EW5MARKBAR > MaxBars 
// reset EW count start entry 
               {
                  EW0MARK=0;
                  if WaveAngle = 1  
                     //DelArrow(EW5MARKTIME,EW5PRICE + StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW5MARKTIME);
                  if WaveAngle = 2  
                     //DelArrow(EW5MARKTIME,EW5PRICE - StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW5MARKTIME);
               }
*/
            if (EW0MARK==1 && EW2MARK==0 && EW3MARK==0
            //&& EW5MARKBAR > BarsCount
            )
               {
                  for (counter=BarsShift - 1;counter > 1;counter--)
                     {
                        BarsCount = BarsShift - counter;
                        MaxPriceBar = Highest (MODE_CLOSE,EW5MARKBAR , BarsCount);
                        MinPriceBar = Lowest (MODE_CLOSE,EW5MARKBAR , BarsCount);
                        MaxPrice = iClose(NULL,0,MaxPriceBar);
                        MinPrice = iClose(NULL,0,MinPriceBar);
                     }
               }

            if (WaveAngle == 1 && MaxPrice > EW1 && MaxPriceBar < EW5MARKBAR)
               {
                  EW1 = MaxPrice;
                  if (EW1MARKBAR <= MaxBars)
//*****
                     //DelArrow(EW1MARKTIME , Open[counter] + StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW1MARKTIME);
                     EW1MARKTIME=iTime(NULL,0,MaxPriceBar);
                     //Print("EW1=",EW1);
               }
            if (WaveAngle == 2 && MinPrice < EW1 && MinPriceBar < EW5MARKBAR)   
               {
                  if (EW1MARKBAR <= MaxBars)
//*****
                     //DelArrow(EW1MARKTIME , Open[counter] - StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW1MARKTIME);
                     EW1MARKTIME=iTime(NULL,0,MinPriceBar);
                     EW1 = MinPrice;
                     //Print("EW1=",EW1);
               }
/*
            if (IsTesting && (counter = BarsShift-1 || counter = 1)) 
               {
                  if (WaveAngle == 1)  
                     Print("BarCount:",BarsCount ," Counter:",counter," Price:",Close[counter]," MaxPrice: ",MaxPrice," MaxPriceBar:",MaxPriceBar);
                  if (WaveAngle == 2)
                     Print("BarCount:",BarsCount ," Counter:",counter," Price:",Close[counter]," MinPrice:",MinPrice," MinPriceBar:",MinPriceBar);
                     Print("Bars:",Bars-1," EW0 Bar:", EW5MARKBAR, " EW0 Time:",TimeToStr(EW5MARKTIME), " Calculated EW0 Time:",TimeToStr(iTime(NULL,0,EW5MARKBAR])," EW0 Bars Diff:",(EW5MARKTIME-iTime(NULL,0,EW5MARKBAR])/60/Period());
                     Print("Bars:",Bars-1," EW1 Bar:", EW1MARKBAR, " EW1 Time:",TimeToStr(EW1MARKTIME), " Calculated EW1 Time:",TimeToStr(iTime(NULL,0,EW1MARKBAR])," EW1 Bars Diff:",(EW1MARKTIME-iTime(NULL,0,EW1MARKBAR])/60/Period());
                     Print("WaveAngle:",WaveAngle," EW1MARK:",EW1MARK," EW0:",EW5PRICE," EW1:",EW1);
               }
*/
            if (WaveAngle == 1
            && iClose(NULL,0,EW5MARKBAR) + NoisePips * Point < Close[counter]
            && MaxPrice <= Close[counter]
            && EW1 > iClose(NULL,0,EW5MARKBAR) + NoisePips * Point
            && EW1 <= Close[counter]
            )
               {
                  if (EW1MARKBAR <= MaxBars)
//*****
                     //DelArrow(EW1MARKTIME , Open[counter] + StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW1MARKTIME);
                  if (Close[counter] > MaxPrice)
                     {
                        EW1 = Close[counter];
                        EW1MARKTIME=iTime(NULL,0,counter);
                     }
                  EW1MARK=1;
                  EW2=EW1;
                  EW1MARKTIME=iTime(NULL,0,counter);
                  EW1MARKBAR=counter;
/****
                  //SetArrow(EW1MARKTIME,Open[counter] + StopLoss / 2 * Point,129,White);
                  ObjectCreate("Arrow"+EW1MARKTIME,OBJ_ARROW,0,EW1MARKTIME,Open[counter] + StopLoss / 2 * Point);
                  Comment("\nEWTrend=Possible UP",
                  "\nEW0=",TimeToStr(EW5MARKTIME),
                  "    ",EW5,
                  "\nEW1=",TimeToStr(EW1MARKTIME),
                  "    ",EW1,
                  "\nPivot                         ",Pivot,
                  "\nResistance Level I            ",ResistanceLevel1,
                  "\nSupport Level I               ",SupportLevel1,
                  "\nResistance Level II           ",ResistanceLevel2,
                  "\nSupport Level II              ",SupportLevel2,
                  "\nPrice Level                   ",PriceLevel," %"
                  );
                  //Print("EW1 Time:",TimeToStr(EW1MARKTIME),": EW1:",EW1," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);
               }

            if (WaveAngle == 2 
            && iClose(NULL,0,EW5MARKBAR) - NoisePips * Point > Close[counter]
            && MinPrice >= Close[counter]
            && EW1 < iClose(NULL,0,EW5MARKBAR) - NoisePips * Point
            && EW1 >= Close[counter]
            )
               {
                  if (EW1MARKBAR <= MaxBars) 
//*****
                     //DelArrow(EW1MARKTIME , Open[counter] - StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW1MARKTIME);
                  if (Close[counter] < MinPrice)
                     {
                        EW1 = Close[counter];
                        EW1MARKTIME=iTime(NULL,0,counter];
                     }
                  EW1MARK=1;
                  EW2=EW1;
                  EW1MARKBAR=counter;
                  //SetArrow(EW1MARKTIME,Open[counter] - StopLoss / 2 * Point,129,Violet);
                  ObjectCreate("Arrow"+EW1MARKTIME,OBJ_ARROW,0,EW1MARKTIME,Open[counter] - StopLoss / 2 * Point);
                  EW5MARKTIME,EW5PRICE + StopLoss / 2 * Point
                  Comment("\nEWTrend=Possible DOWN",
                  "\nEW0=",TimeToStr(EW5MARKTIME),
                  "    ",EW5,
                  "\nEW1=",TimeToStr(EW1MARKTIME),
                  "    ",EW1,
                  "\nPivot                         ",Pivot,
                  "\nResistance Level I            ",ResistanceLevel1,
                  "\nSupport Level I               ",SupportLevel1,
                  "\nResistance Level II           ",ResistanceLevel2,
                  "\nSupport Level II              ",SupportLevel2,
                  "\nPrice Level                   ",PriceLevel," %"
                  );
                  //Print("EW1 Time:",TimeToStr(EW1MARKTIME),": EW1:",EW1," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);
               }


            if (EW1MARK == 1 && counter < EW1MARKBAR
            && (WaveAngle == 1 && Close[counter] < EW1 - NoisePips * Point 
            || (WaveAngle == 2 && Close[counter] > EW1 + NoisePips * Point)) 
            )
// Wave 1 ended
               {
                  EW3MARK=1;
                  //break;
               }
            return(0);

            if (EW0MARK==1 && EW2MARK==0 && EW3MARK==1)
               {
                  EW3MARK=0;
                  if (WaveAngle == 1)
                     { 
                        if (EW1MARKBAR <= MaxBars)
                           {
//*****                              
                              //DelArrow(EW1MARKTIME, EW1 + StopLoss / 2 * Point);
                              //SetArrow(EW1MARKTIME, EW1 + StopLoss / 2 * Point,129,White);
                              ObjectDelete("Arrow"+EW1MARKTIME);
                              ObjectCreate("Arrow"+EW1MARKTIME,OBJ_ARROW,0,EW1MARKTIME,EW1 + StopLoss / 2 * Point);
                           }
                     }
                  else
                     { 
                        if (EW1MARKBAR <= MaxBars)
                           {
//*****
                              //DelArrow(EW1MARKTIME, EW1 - StopLoss / 2 * Point);
                              //SetArrow(EW1MARKTIME, EW1 - StopLoss / 2 * Point,129,Violet);
                              ObjectDelete("Arrow"+EW1MARKTIME);
                              ObjectCreate("Arrow"+EW1MARKTIME,OBJ_ARROW,0,EW1MARKTIME,EW1 - StopLoss / 2 * Point);
                           }
                     }
               }

            BarsShift=EW1MARKBAR;
            if (Bars < BarsShift)
               //break;
// Check for failed Elliot Wave 1
            if ((EW3MARK==0 && EW1MARK==1 && EW2MARK==0 && WaveAngle == 1 && EW1 < EW5PRICE - NoisePips * Point)
            || (EW3MARK==0 && EW1MARK==1 && EW2MARK==0 && WaveAngle == 2 && EW1 > EW5PRICE + NoisePips * Point))
               {
                  for (counter=1;counter >= EW5MARKBAR; counter ++) 
                     {
//*****
                        //DelArrow(iTime(NULL,0,counter] , Close[counter] + StopLoss / 2 * Point);
                        //DelArrow(iTime(NULL,0,counter] , Close[counter] - StopLoss / 2 * Point);
                        ObjectDelete("Arrow"+iTime(NULL,0,counter]);
                     }
                  EW0MARK=0;
                  EW1MARK=0;
                  EW2MARK=0;
                  EW3MARK=0;
                  EW4MARK=0;
                  EW5MARK=0;
               }

            if (EW1MARK==1 && EW3MARK==0)

               for (counter=BarsShift - 1;counter >= 1;counter --)
                  BarsCount = BarsShift - counter;
            MaxPriceBar = Highest (MODE_CLOSE,EW1MARKBAR , BarsCount);
            MinPriceBar = Lowest (MODE_CLOSE,EW1MARKBAR , BarsCount);
            MaxPrice = iClose(NULL,0,MaxPriceBar);
            MinPrice = iClose(NULL,0,MinPriceBar);

            if (WaveAngle == 1 && MinPrice < EW2 && MinPriceBar < EW5MARKBAR)
               {
                  if (EW2MARKBAR <= MaxBars)
//*****
                     //DelArrow(EW2MARKTIME , Open[counter] - StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW2MARKTIME);
                  EW2 = MinPrice;
                  EW2MARKTIME=iTime(NULL,0,MinPriceBar);
               }
            if (WaveAngle == 2 && MaxPrice > EW2 && MaxPriceBar < EW5MARKBAR)
               {
                  if (EW2MARKBAR <= MaxBars)
//*****
                     //DelArrow(EW2MARKTIME , Open[counter] + StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW2MARKTIME);
                  EW2 = MaxPrice;
                  EW2MARKTIME=iTime(NULL,0,MaxPriceBar);
               }
            if (WaveAngle == 1
            && iClose(NULL,0,EW1MARKBAR) - NoisePips * Point > Close[counter]
            && MinPrice >= Close[counter]
            && EW2 < iClose(NULL,0,EW1MARKBAR) - NoisePips * Point
            && EW2 > Close[counter]
            )
               {
                  if (EW2MARKBAR <= MaxBars)
//*****
                     //DelArrow(EW2MARKTIME , Open[counter] - StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW2MARKTIME);
                  if (Close[counter] < MinPrice)
                     {
                        EW2 = Close[counter];
                        EW2MARKTIME=iTime(NULL,0,counter];
                     }
                  EW3=EW2;
                  EW2MARK=1;
                  EW2MARKBAR=counter;
                  EW3MARKBAR=EW2MARKBAR;
                  //SetArrow(EW2MARKTIME,Open[counter] - StopLoss / 2 * Point,130,White);
                  ObjectCreate("Arrow"+EW2MARKTIME,OBJ_ARROW,0,EW2MARKTIME,Open[counter] - StopLoss / 2 * Point);
                  Comment("\nEWTrend=Possible UP",
                  "\nEW0=",TimeToStr(EW5MARKTIME),
                  "    ",EW5,
                  "\nEW1=",TimeToStr(EW1MARKTIME),
                  "    ",EW1,
                  "\nEW2=",TimeToStr(EW2MARKTIME),
                  "    ",EW2,
                  
                  );
                  //Print("EW2 Time:",TimeToStr(EW2MARKTIME),": EW2:",EW2," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);
               }

            if (WaveAngle == 2 
            && iClose(NULL,0,EW1MARKBAR) + NoisePips * Point < Close[counter]
            && MaxPrice <= Close[counter]
            && EW2 > iClose(NULL,0,EW1MARKBAR) + NoisePips * Point
            && EW2 < Close[counter]
            )
               {     
                  if (EW2MARKBAR <= MaxBars)
//*****
                     //DelArrow(EW2MARKTIME , Open[counter] + StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW2MARKTIME);
                  if (Close[counter] > MaxPrice)
                     {
                        EW2 = Close[counter];
                        EW2MARKTIME=iTime(NULL,0,counter];
                     }
                  EW3=EW2;
                  EW2MARK=1;
                  EW2MARKBAR=counter;
                  EW3MARKBAR=EW2MARKBAR;
                  //SetArrow(EW2MARKTIME,Open[counter] + StopLoss / 2 * Point,130,Violet);
                  ObjectCreate("Arrow"+EW2MARKTIME,OBJ_ARROW,0,EW2MARKTIME,Open[counter] + StopLoss / 2 * Point);
                  Comment("\nEWTrend=Possible DOWN",
                  "\nEW0=",TimeToStr(EW5MARKTIME),
                  "    ",EW5,
                  "\nEW1=",TimeToStr(EW1MARKTIME),
                  "    ",EW1,
                  "\nEW2=",TimeToStr(EW2MARKTIME),
                  "    ",EW2,
                  "\nPivot                         ",Pivot,
                  "\nResistance Level I            ",ResistanceLevel1,
                  "\nSupport Level I               ",SupportLevel1,
                  "\nResistance Level II           ",ResistanceLevel2,
                  "\nSupport Level II              ",SupportLevel2,
                  "\nPrice Level                   ",PriceLevel," %"
                  );
                  //Print("EW2 Time:",TimeToStr(EW2MARKTIME),": EW2:",EW2," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);
               }
// Check for failed Elliot Wave 2
            if ((EW3MARK==0 && EW2MARK==1 && WaveAngle == 1 && EW2 < EW5 - NoisePips * Point)
            || (EW3MARK==0 && EW2MARK==1 && WaveAngle == 2 && EW2 > EW5 + NoisePips * Point))
               {
                  for (counter=1; counter <= EW5MARKBAR; counter ++)
                     {
//*****                        
                        //DelArrow(iTime(NULL,0,counter] , Close[counter] + StopLoss / 2 * Point);
                        //DelArrow(iTime(NULL,0,counter] , Close[counter] - StopLoss / 2 * Point);
                        ObjectDelete("Arrow"+iTime(NULL,0,counter]);
                     }
                  EW0MARK=0;
                  EW1MARK=0;
                  EW2MARK=0;
                  EW3MARK=0;
                  EW4MARK=0;
                  EW5MARK=0; 
                  Comment("\nEWTrend=Recalculating..",
                  "\nEW0=",TimeToStr(EW5MARKTIME),
                  "    ",EW5,
                  "\nEW1=",TimeToStr(EW1MARKTIME),
                  "    ",EW1,
                  "\nEW2=",TimeToStr(EW2MARKTIME),
                  "    ",EW2,
                  "\nEW3=",TimeToStr(EW3MARKTIME),
                  "    ",EW3,
                  "\nPivot                         ",Pivot,
                  "\nResistance Level I            ",ResistanceLevel1,
                  "\nSupport Level I               ",SupportLevel1,
                  "\nResistance Level II           ",ResistanceLevel2,
                  "\nSupport Level II              ",SupportLevel2,
                  "\nPrice Level                   ",PriceLevel," %"
                  );
/*
                  Print(TimeToStr(time),": ",Symbol," Elliot Wave 2 failed, reverting retracement trend vector. ");
                  Print("Old EW0=",TimeToStr(EW5MARKTIME),
                  " ",EW5,
                  " EW1=",TimeToStr(EW1MARKTIME),
                  " ",EW1,
                  " EW2=",TimeToStr(EW2MARKTIME),
                  " ",EW2,
                  " EW3=",TimeToStr(EW3MARKTIME),
                  " ",EW3
                  );
/*
                  MaxPriceBar = Highest (MODE_CLOSE,EW1MARKBAR + MaxBars+1 ,MaxBars);
                  MinPriceBar = Lowest (MODE_CLOSE,EW1MARKBAR + MaxBars+1 ,MaxBars);
                  MaxPrice = iClose(NULL,0,MaxPriceBar];
                  MinPrice = iClose(NULL,0,MinPriceBar];

                  tempval=EW5;
                  EW3=EW2;
                  EW2=EW1;
                  if WaveAngle = 1  
                     EW5 = MinPrice;
                  if WaveAngle = 2  
                     EW5 = MaxPrice;
                  EW5PRICE=EW5;
                  EW1=tempval;

                  tempval=EW5MARKTIME;
                  if WaveAngle = 1  
                     EW5MARKTIME = iTime(NULL,0,MinPriceBar];
                  if WaveAngle = 2  
                     EW5MARKTIME = iTime(NULL,0,MaxPriceBar];
                  EW3MARKTIME=EW2MARKTIME;
                  EW2MARKTIME=EW1MARKTIME;
                  EW1MARKTIME=tempval;
 
                  tempval=EW5MARKBAR;
                  if WaveAngle = 1  
                     EW5MARKBAR = MinPriceBar;
                  if WaveAngle = 2  
                     EW5MARKBAR = MaxPriceBar;
                  EW5MARKBAR=EW1MARKBAR;
                  EW3MARKBAR=EW2MARKBAR;
                  EW2MARKBAR=EW1MARKBAR;
                  EW1MARKBAR=tempval;

                  if Bars < EW1MARKBAR + MaxBars+1 
// Check if we have not enough prices for estimating EW0
                     {
                        EW5=Close[Bars-1];
                        EW5PRICE=EW5;
                        EW5MARKTIME=iTime(NULL,0,Bars-1];
                        EW5MARKBAR=Bars-1;
                     }
                  EW4=0;
                  EW4MARKTIME=0;
                  //Print(TimeToStr(time),": ",TimeToStr(EW5MARKTIME)," ",EW5MARKBAR," ",EW5 + StopLoss / 2 * Point);
                  //Print(time, " ",EW1MARKTIME," ",EW5MARKTIME," ",Period());
                  //Print(TimeToStr(time), " ",TimeToStr(EW1MARKTIME)," ",TimeToStr(EW5MARKTIME)," ",Period());

                  if WaveAngle = 1  
                     {
// WaveAngle = 2;
                        Comment("\nEWTrend=Recalculating..",
                        "\nEW0=",TimeToStr(EW5MARKTIME),
                        "    ",EW5,
                        "\nEW1=",TimeToStr(EW1MARKTIME),
                        "    ",EW1,
                        "\nEW2=",TimeToStr(EW2MARKTIME),
                        "    ",EW2,
                        "\nEW3=",TimeToStr(EW3MARKTIME),
                        "    ",EW3,
                        "\nPivot                         ",Pivot,
                        "\nResistance Level I            ",ResistanceLevel1,
                        "\nSupport Level I               ",SupportLevel1,
                        "\nResistance Level II           ",ResistanceLevel2,
                        "\nSupport Level II              ",SupportLevel2,
                        "\nPrice Level                   ",PriceLevel," %"
                        );
                        //SetArrow(EW5MARKTIME,EW5 + StopLoss / 2 * Point,128,Violet);
                        //SetArrow(EW1MARKTIME,EW1 - StopLoss / 2 * Point,129,Violet);
                        //SetArrow(EW2MARKTIME,EW2 + StopLoss / 2 * Point,130,Violet);
                        //SetArrow(EW3MARKTIME,EW3 - StopLoss / 2 * Point,131,Violet);
                        ObjectCreate("Arrow"+EW5MARKTIME,OBJ_ARROW,0,EW5MARKTIME,EW5 + StopLoss / 2 * Point);
                        ObjectCreate("Arrow"+EW1MARKTIME,OBJ_ARROW,0,EW1MARKTIME,EW1 - StopLoss / 2 * Point);
                        ObjectCreate("Arrow"+EW2MARKTIME,OBJ_ARROW,0,EW2MARKTIME,EW2 + StopLoss / 2 * Point);
                        ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME,EW3 - StopLoss / 2 * Point);
                     }
                  else 
                     {
// WaveAngle = 1;
                        Comment("\nEWTrend=Recalculating..",
                        "\nEW0=",TimeToStr(EW5MARKTIME),
                        "    ",EW5,
                        "\nEW1=",TimeToStr(EW1MARKTIME),
                        "    ",EW1,
                        "\nEW2=",TimeToStr(EW2MARKTIME),
                        "    ",EW2,
                        "\nEW3=",TimeToStr(EW3MARKTIME),
                        "    ",EW3,
                        "\nPivot                         ",Pivot,
                        "\nResistance Level I            ",ResistanceLevel1,
                        "\nSupport Level I               ",SupportLevel1,
                        "\nResistance Level II           ",ResistanceLevel2,
                        "\nSupport Level II              ",SupportLevel2,
                        "\nPrice Level                   ",PriceLevel," %"
                        );
                        //SetArrow(EW5MARKTIME,EW5 - StopLoss / 2 * Point,128,White);
                        //SetArrow(EW1MARKTIME,EW1 + StopLoss / 2 * Point,129,White);
                        ObjectCreate("Arrow"+EW5MARKTIME,OBJ_ARROW,0,EW5MARKTIME,EW5 - StopLoss / 2 * Point);
                        ObjectCreate("Arrow"+EW1MARKTIME,OBJ_ARROW,0,EW1MARKTIME,EW1 + StopLoss / 2 * Point);
                        // Print(TimeToStr(EW1MARKTIME)," ",TimeToStr(iTime(NULL,0,EW1MARKBAR])," ",EW1 + StopLoss / 2 * Point);
                        // Print("EW0 Time:",TimeToStr(EW5MARKTIME),": EW0:",EW5," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);

                        //SetArrow(EW2MARKTIME,EW2 - StopLoss / 2 * Point,130,White);
                        //SetArrow(EW3MARKTIME,EW3 + StopLoss / 2 * Point,131,White);
                        ObjectCreate("Arrow"+EW2MARKTIME,OBJ_ARROW,0,EW2MARKTIME,EW2 - StopLoss / 2 * Point);
                        ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME,EW3 + StopLoss / 2 * Point);
                     }
 /*
                  Print("\nEWTrend=Recalculating..",
                  "EW0=",TimeToStr(EW5MARKTIME),
                  " ",EW5,
                  " EW1=",TimeToStr(EW1MARKTIME),
                  " ",EW1,
                  " EW2=",TimeToStr(EW2MARKTIME),
                  " ",EW2,
                  " EW3=",TimeToStr(EW3MARKTIME),
                  " ",EW3,
                  " Pivot ",Pivot,
                  " Resistance Level I ",ResistanceLevel1,
                  " Support Level I ",SupportLevel1,
                  " Resistance Level II ",ResistanceLevel2,
                  "\nSupport Level II              ",SupportLevel2,
                  "\nPrice Level                   ",PriceLevel,"%"
                  );
 */
                  //break;
               }  
            return(0);

            if (EW2MARK==1 && EW3MARK==0)
               {
                  if (WaveAngle == 2) 
                     { 
                        if (EW2MARKBAR <= MaxBars)
//*****
                           //DelArrow(EW2MARKTIME, EW2 + StopLoss / 2 * Point);
                           //SetArrow(EW1MARKTIME, EW1 - StopLoss / 2 * Point,129,Violet);
                           //SetArrow(EW2MARKTIME, EW2 + StopLoss / 2 * Point,130,Violet);
                           ObjectDelete("Arrow"+EW2MARKTIME);
                           ObjectCreate("Arrow"+EW1MARKTIME,OBJ_ARROW,0,EW1MARKTIME, EW1 - StopLoss / 2 * Point);
                           ObjectCreate("Arrow"+EW2MARKTIME,OBJ_ARROW,0,EW2MARKTIME, EW2 + StopLoss / 2 * Point);
                     }
                  else
                     { 
                        if (EW2MARKBAR <= MaxBars)
//*****
                           //DelArrow(EW2MARKTIME, EW2 - StopLoss / 2 * Point);
                           //SetArrow(EW1MARKTIME, EW1 + StopLoss / 2 * Point,129,White);
                           //SetArrow(EW2MARKTIME, EW2 - StopLoss / 2 * Point,130,White);
                           ObjectDelete("Arrow"+EW2MARKTIME);
                           ObjectCreate("Arrow"+EW1MARKTIME,OBJ_ARROW,0,EW1MARKTIME, EW1 + StopLoss / 2 * Point);
                           ObjectCreate("Arrow"+EW2MARKTIME,OBJ_ARROW,0,EW2MARKTIME, EW2 - StopLoss / 2 * Point);
                     }
               }

            BarsShift=EW1MARKBAR;
            if (Bars < BarsShift)
               //break;

            if (EW2MARK == 1 && EW4MARK == 0
            //&& EW4MARK == 0 
            )
               for (counter=BarsShift - 1;counter >= 1;counter--)
                  BarsCount = BarsShift - counter;
                  MaxPriceBar = Highest (MODE_CLOSE,EW1MARKBAR , BarsCount);
                  MinPriceBar = Lowest (MODE_CLOSE,EW1MARKBAR , BarsCount);
                  MaxPrice = iClose(NULL,0,MaxPriceBar);
                  MinPrice = iClose(NULL,0,MinPriceBar);

            if (WaveAngle == 1 && MaxPrice > EW3 && MaxPriceBar < EW2MARKBAR)
               {
                  EW3 = MaxPrice;
                  EW3MARKTIME=iTime(NULL,0,MaxPriceBar);
                  EW3MARKBAR=MaxPriceBar;
                  if (EW3MARKBAR <= MaxBars) 
//*****
                     //DelArrow(EW3MARKTIME , Open[counter] + StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW3MARKTIME);
                  Print("EW3=",EW3);
               }

            if (WaveAngle == 2 && MinPrice < EW3 && MinPriceBar < EW2MARKBAR)   
               {
                  if (EW3MARKBAR <= MaxBars) 
//*****
                     //DelArrow(EW3MARKTIME , Open[counter] - StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW3MARKTIME);
                  EW3MARKTIME=iTime(NULL,0,MinPriceBar);
                  EW3MARKBAR=MinPriceBar;
                  EW3 = MinPrice;
                  //Print("EW3=",EW3);
               }
/*
            if IsTesting && (counter = BarsShift-1 || counter = 1) 
               {
                  if WaveAngle = 1  
                     Print("BarCount:",BarsCount ," Counter:",counter," Price:",Close[counter]," MaxPrice: ",MaxPrice," MaxPriceBar:",MaxPriceBar);
                  if WaveAngle = 2  
                     Print("BarCount:",BarsCount ," Counter:",counter," Price:",Close[counter]," MinPrice:",MinPrice," MinPriceBar:",MinPriceBar);
                  Print("Bars:",Bars-1," EW2 Bar:", EW2MARKBAR, " EW2 Time:",TimeToStr(EW2MARKTIME), " Calculated EW2 Time:",TimeToStr(iTime(NULL,0,EW2MARKBAR])," EW2 Bars Diff:",(EW2MARKTIME-iTime(NULL,0,EW2MARKBAR])/60/Period());
                  Print("Bars:",Bars-1," EW3 Bar:", EW3MARKBAR, " EW3 Time:",TimeToStr(EW3MARKTIME), " Calculated EW3 Time:",TimeToStr(iTime(NULL,0,EW3MARKBAR])," EW3 Bars Diff:",(EW3MARKTIME-iTime(NULL,0,EW3MARKBAR])/60/Period());
                  Print("WaveAngle:",WaveAngle," EW3MARK:",EW3MARK," EW4MARK:",EW4MARK," EW0:",EW5PRICE," EW1:",EW1," EW2:",EW2," EW3:",EW3);
               }
/*
            if WaveAngle = 1 && Close[counter] > MaxPrice  
               Print("Counter:",counter, " MaxPrice:",MaxPrice);
            if WaveAngle = 2 && Close[counter] < MaxPrice  
               Print("Counter:",counter, " MinPrice:",MinPrice);
*/

            if (WaveAngle == 1 
            && EW1 + NoisePips * Point < Close[counter]
            && MaxPrice <= Close[counter]
            && EW3 > EW2 + NoisePips * Point
            && EW3 < Close[counter]
            )
               {
                  if (EW3MARKBAR <= EW5MARKBAR )
//*****
                     //DelArrow(EW3MARKTIME , Open[counter] + StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW3MARKTIME);
                  EW3 = Close[counter];
                  EW3MARKTIME=iTime(NULL,0,counter);
                  EW3MARK=1;
                  EW4=EW3;
                  EW3MARKBAR=counter;
                  //SetArrow(iTime(NULL,0,counter],Open[counter] + StopLoss / 2 * Point,131,White);
                  ObjectCreate("Arrow"+iTime(NULL,0,counter),OBJ_ARROW,0,iTime(NULL,0,counter),Open[counter] + StopLoss / 2 * Point);
                  //Print("EW0 date:",TimeToStr(EW5MARKTIME)," EW1 date:",TimeToStr(EW1MARKTIME)," EW2 date:",TimeToStr(EW2MARKTIME)," EW3 date:",TimeToStr(EW3MARKTIME));
                  Comment("\nEWTrend=UP",
                  "\nEW0=",TimeToStr(EW5MARKTIME),
                  "    ",EW5,
                  "\nEW1=",TimeToStr(EW1MARKTIME),
                  "    ",EW1,
                  "\nEW2=",TimeToStr(EW2MARKTIME),
                  "    ",EW2,
                  "\nEW3=",TimeToStr(EW3MARKTIME),
                  "    ",EW3,
                  "\nPivot                         ",Pivot,
                  "\nResistance Level I            ",ResistanceLevel1,
                  "\nSupport Level I               ",SupportLevel1,
                  "\nResistance Level II           ",ResistanceLevel2,
                  "\nSupport Level II              ",SupportLevel2,
                  "\nPrice Level                   ",PriceLevel," %"                  
                  );
                  //Print("EW3 Time:",TimeToStr(EW3MARKTIME),": EW3:",EW3," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);
               }

            if (WaveAngle == 2 
            && EW1 - NoisePips * Point > Close[counter]
            && MinPrice >= Close[counter]
            && EW3 < EW2 - NoisePips * Point
            && EW3 > Close[counter]
            )
               {
                  if (EW3MARKBAR <= EW5MARKBAR )
//*****
                     //DelArrow(EW3MARKTIME , Open[counter] - StopLoss / 2 * Point);
                     ObjectDelete("Arrow"+EW3MARKTIME);
                  EW3 = Close[counter];
                  EW3MARKTIME=iTime(NULL,0,counter);
                  EW3MARK=1;
                  EW4=EW3;
                  EW4MARKTIME=iTime(NULL,0,counter);
                  EW3MARKBAR=counter;
                  //SetArrow(iTime(NULL,0,counter],Open[counter],131,Violet);
                  ObjectCreate("Arrow"+iTime(NULL,0,counter),OBJ_ARROW,0,iTime(NULL,0,counter),Open[counter]);
                  Comment("\nEWTrend=DOWN",
                  "\nEW0=",TimeToStr(EW5MARKTIME),
                  "    ",EW5,
                  "\nEW1=",TimeToStr(EW1MARKTIME),
                  "    ",EW1,
                  "\nEW2=",TimeToStr(EW2MARKTIME),
                  "    ",EW2,
                  "\nEW3=",TimeToStr(EW3MARKTIME),
                  "    ",EW3,
                  "\nPivot                         ",Pivot,
                  "\nResistance Level I            ",ResistanceLevel1,
                  "\nSupport Level I               ",SupportLevel1,
                  "\nResistance Level II           ",ResistanceLevel2,
                  "\nSupport Level II              ",SupportLevel2,
                  "\nPrice Level                   ",PriceLevel," %"
                  );
                  //Print("EW3 Time:",TimeToStr(EW3MARKTIME),": EW3:",EW3," WaveAngle:",WaveAngle," MaxPriceBar:",MaxPriceBar," MinPriceBar:",MinPriceBar);
               }
/*
            if (EW3MARK == 1 && counter < EW3MARKBAR && (WaveAngle == 1 && Close[counter] < EW3 - NoisePips * Point 
            || (WaveAngle = 2 && Close[counter] > EW3 + NoisePips * Point))
            ) 
// Wave 1 ended
               {
                  EW4MARK=1;
                  break;
               }
*/
            return(0);

//Check if we have failed EW 3 && it falls bellow EW Wave 1
            if ((EW3MARK==1 && WaveAngle == 1 && iOpen(NULL,0,0) < EW2)
            || (EW3MARK==1 && WaveAngle == 2 && iOpen(NULL,0,0) > EW2))
               {
                  Comment("\nEWTrend=Recalculating..",
                  "\nLast EW0=",TimeToStr(EW5MARKTIME),
                  "    ",EW5,
                  "\nLast EW1=",TimeToStr(EW1MARKTIME),
                  "    ",EW1,
                  "\nLast EW2=",TimeToStr(EW2MARKTIME),
                  "    ",EW2,
                  "\nLast EW3=",TimeToStr(EW3MARKTIME),
                  "    ",EW3,
                  "\nPivot                         ",Pivot,
                  "\nResistance Level I            ",ResistanceLevel1,
                  "\nSupport Level I               ",SupportLevel1,
                  "\nResistance Level II           ",ResistanceLevel2,
                  "\nSupport Level II              ",SupportLevel2,
                  "\nPrice Level                   ",PriceLevel," %"
                  );
                  EW0MARK=0;
                  EW1MARK=0; 
                  EW2MARK=0;
                  EW3MARK=0;
                  EW4MARK=0;
                  EW5MARK=0;
                  ORDERMARK=0;
                  for (counter=1 ;counter <= EW2MARKBAR;counter ++)
                     {
                        if (Close[counter] == EW3)
                           {
//*****
                              //DelArrow(iTime(NULL,0,counter] , Close[counter] + StopLoss / 2 * Point);
                              //DelArrow(iTime(NULL,0,counter] , Close[counter] - StopLoss / 2 * Point);
                              ObjectDelete("Arrow"+iTime(NULL,0,counter));
                              break;
                           }
                     }

                  if (WaveAngle == 1)  
//*****
                     //SetArrow(iTime(NULL,0,0),Ask,251,Red);
                     ObjectCreate("Arrow"+iTime(NULL,0,0),OBJ_ARROW,0,iTime(NULL,0,0),Ask);
                  if (WaveAngle == 2)  
//*****
                     //SetArrow(iTime(NULL,0,0),Bid,251,Red);
                     ObjectCreate("Arrow"+iTime(NULL,0,0),OBJ_ARROW,0,iTime(NULL,0,0),Bid);
                  LastEW5 = EW5PRICE;
                  LastEW1=EW1;
                  LastEW2=EW2;
                  LastEW3=EW3;
                  //Print(TimeToStr(time),": ",Symbol," Elliot Wave 3 failed, recalculating EW0...");
               }

            if (EW3MARK == 1 && EW4MARK == 0) 
               {
                  //EWOscillator = iCustom("ElliotOscillator",EWPeriod(),0,RetracementBars,MODE_FIRST,0);
                  //EWLevel = iCustom("ElliotWaves",EWPeriod(),0,RetracementBars,MODE_FIRST,0);
                  EWOscillator = iCustom("ElliotOscillator",EWPeriod,0,RetracementBars,1,0);
                  EWLevel = iCustom("ElliotWaves",EWPeriod,0,RetracementBars,1,0);
               }

            if (EWOscillator != 0 && EWLevel != 0 && EW3MARK == 1 && EW4MARK == 0 )
               {
                  //Print("EW0MARK:",EW0MARK," EW1MARK:",EW1MARK," EW2MARK:",EW2MARK," EW3MARK:",EW3MARK," EW4MARK:",EW4MARK);
                  //Print(TimeToStr(iTime(NULL,0,0]),": EW1MARKBAR:",EW1MARKBAR," EW2MARKBAR:",EW2MARKBAR," EW3MARKBAR:",EW3MARKBAR," EW3MARKBAR=",EW3MARKBAR," EW4MARK:",EW4MARK);
                  Print(TimeToStr(iTime(NULL,0,0)),": EW3 START - Open:",iOpen(NULL,0,0) ," EW0:",EW5PRICE," EW1:",EW1," EW2:",EW2," EW3:",EW3," WaveAngle:",WaveAngle," Price Level:",PriceLevel," Last Price Level:",LastPriceLevel," Max/Min Level:",FiboLevel);
                  Print(TimeToStr(iTime(NULL,0,0)),": EW3 START - Pivot:",Pivot," Resistance Level I:",ResistanceLevel1," Support Level I:",SupportLevel1," Resistance Level II:",ResistanceLevel2," Support Level II:",SupportLevel2);
                  EW3ORDERMARK=0;
                  LastOp=0;

                  if (EW3 > Pivot )
                     { 
                        if (EW3MARKBAR <= MaxBars )
//*****
                           //DelArrow(EW3MARKTIME, EW3 + StopLoss / 2 * Point);
                           //SetArrow(EW3MARKTIME, EW3 + StopLoss / 2 * Point,131,White);
                           //DelArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                           ObjectDelete("Arrow"+EW3MARKTIME);
                           ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + StopLoss / 2 * Point,131);
                           ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,White);
                           //ObjectDelete("Arrow"+EW3MARKTIME);

                        if (EW3 > ResistanceLevel1 
                        && FiboLevel > 99 
                        && ResistanceLevel2 - ResistanceLevel1 < SupportLevel1 - SupportLevel2
                        && BullsAngle == 1)
                           {
//*****
                              //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,246,White); //UP
                              ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                              ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,White);
                              EW3ORDERMARK=1;
                              LastOp=1;
                           }   
                        else
                           if (EW3 > ResistanceLevel1 
                           && FiboLevel > 100 
                           && FiboLevel < 130 )
                              {
//*****
                                 //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,200,White); // UP
                                 ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                 ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,White);
                                 EW3ORDERMARK=1;
                                 LastOp=2;
                              } 
                           else
                              if (EW2 > SupportLevel1 
                              && FiboLevel > 80 
                              && FiboLevel < 130 
                              && PriceLevel > 65)
                                 {
                                    if (iOpen(NULL,0,0) > (MaxPrice + MinPrice) * 2 / 3
                                    || (MACDAngle == 2 && FiboLevel > 100))
                                       {
                                          if (PriceLevel > 87.5 // Murrey 7/8 support/resistance line
                                          //&& FiboLevel < 112.5 // Murrey 8/8+1 support/resistance line
                                          && BullsAngle == 1
                                          && BearsAngle == 1
                                          )
                                             {
//*****
                                                //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,200,White); // UP
                                                ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,White);
                                                EW3ORDERMARK=3;
                                                LastOp=3;
                                             }
                                          else 
                                             {
                                                if (MA < LongMA)
                                                   {
//*****   
                                                      //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,200,White); // UNSTABLE UP
                                                      ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                      ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,White);
                                                      EW3ORDERMARK=1;
                                                      LastOp=4;
                                                   }
                                                else
                                                   {
//*****
                                                      //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,200,SkyBlue); // UNSTABLE DOWN, POSSIBLE UP
                                                      ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                      ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,SkyBlue);
                                                      EW3ORDERMARK=2;
                                                      LastOp=5;
                                                   }
                                             }
                                       }
                                    else
                                       if (FiboLevel > 100) // Over Murrey 8/8 support/resistance line
                                          {
//*****
                                             //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,200,SkyBlue); // POSSIBLE UP
                                             ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                             ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,SkyBlue);
                                             EW3ORDERMARK=1;
                                             LastOp=6;
                                          }
                                       else
                                          if (FiboLevel == 100) // Murrey 8/8 support/resistance line
                                             {
//*****
                                                //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,202,SkyBlue); // POSSIBLE RESIST DOWN
                                                ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,SkyBlue);
                                                EW3ORDERMARK=12;
                                                LastOp=7;
                                             }
                                       } 
                                    else 
                                       if (FiboLevel > 70 
                                       && FiboLevel < 150 
                                       && PriceLevel < 60
                                       //&& Bid > EW3 + Slippage * Point
                                       )
                                          {
                                             if (FiboLevel == 100 // Murrey 8/8 support/resistance line
                                             && MACDAngle == 1)
                                                {
//*****
                                                   //SetArrow(EW3MARKTIME, EW3 - (StopLoss / 2 + NoisePips) * Point,196,SkyBlue); //TEMP UP, REVERT TO DOWN
                                                   ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 - (StopLoss / 2 + NoisePips) * Point);
                                                   ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,SkyBlue);
                                                   EW3ORDERMARK=13;
                                                   LastOp=8;
                                                }
                                             else
                                                {
//*****
                                                   //SetArrow(EW3MARKTIME, EW3 - (StopLoss / 2 + NoisePips) * Point,198,White); //UP
                                                   ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 - (StopLoss / 2 + NoisePips) * Point);
                                                   ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,White);
                                                   EW3ORDERMARK=3;
                                                   LastOp=9;
                                                }
                                          } 
                                       else
                                          if (PriceLevel > 65 
                                          && MA < iOpen(NULL,0,0))
                                             {
//*****
                                                //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,202,White); // DOWN
                                                ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,White);
                                                EW3ORDERMARK=4;
                                                LastOp=10;
                                             } 
                                       }
                                    else
                                       { 
                                          if (EW3MARKBAR <= MaxBars )
//*****
                                             //DelArrow(EW3MARKTIME, EW3 - StopLoss / 2 * Point);
                                             //SetArrow(EW3MARKTIME, EW3 - StopLoss / 2 * Point,131,Violet);
                                             //DelArrow(EW3MARKTIME, EW3 - (StopLoss / 2 + NoisePips) * Point);
                                             ObjectDelete("Arrow"+EW3MARKTIME);
                                             ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 - StopLoss / 2 * Point);
                                             ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                             //ObjectDelete("Arrow"+EW3MARKTIME);
                                          if (EW3 < SupportLevel1 
                                          && FiboLevel > 99 
                                          && ResistanceLevel2 - ResistanceLevel1 < SupportLevel1 - SupportLevel2 
                                          && BearsAngle == 2
                                          )
                                             {
//*****
                                                //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,248,Violet); // DOWN
                                                ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                                EW3ORDERMARK=11;
                                                LastOp=21;
                                             } 
                                          else
                                             if (EW3 < SupportLevel1  
                                             && FiboLevel < 130 
                                             && FiboLevel > 100 )
                                                {
//*****
                                                   //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,202,Violet); // DOWN
                                                   ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                   ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                                   EW3ORDERMARK=11;
                                                   LastOp=22;
                                                } 
                                             else
                                                if (EW2 < ResistanceLevel1 
                                                && FiboLevel > 80 
                                                && FiboLevel < 130 
                                                && PriceLevel < -65)
                                                   {
                                                      if (iOpen(NULL,0,0) < (MaxPrice + MinPrice) * 3 / 2
                                                      || (MACDAngle == 2 && FiboLevel > 100))
                                                         {
                                                            if (PriceLevel < -87.5 // Murrey 7/8 support/resistance line
                                                            //&& FiboLevel < 112/5 // Murrey 8/8+1 support/resistance line
                                                            && BullsAngle == 2
                                                            && BearsAngle == 2
                                                            )
                                                               {
//*****
                                                                  //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,202,Violet); // DOWN
                                                                  ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                                  ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                                                  EW3ORDERMARK=13;
                                                                  LastOp=23;
                                                               }
                                                            else
                                                               {
                                                                  if (MA > LongMA)
                                                                     {
//*****
                                                                        //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,202,Violet); // UNSTABLE DOWN
                                                                        ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                                        ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                                                        EW3ORDERMARK=11;
                                                                        LastOp=24;
                                                                     }
                                                                  else
                                                                     {
//*****
                                                                        //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,202,OrangeRed); // UNSTABLE UP, POSSIBLE DOWN
                                                                        ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                                        ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,OrangeRed);
                                                                        EW3ORDERMARK=12;
                                                                        LastOp=25;
                                                                     }  
                                                               }
                                                         }
                                                      else
                                                         if (FiboLevel > 100) // Over Murrey 8/8 support/resistance line
                                                            {
//*****
                                                               //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,202,OrangeRed); // POSSIBLE DOWN
                                                               ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                               ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,OrangeRed);
                                                               EW3ORDERMARK=11;
                                                               LastOp=26;
                                                            }
                                                         else
                                                            if (FiboLevel == 100) // Murrey 8/8 support/resistance line
                                                               {
//*****
                                                                  //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,200,OrangeRed); // POSSIBLE RESIST && UP
                                                                  ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                                  ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,OrangeRed);
                                                                  EW3ORDERMARK=2;
                                                                  LastOp=27;
                                                               }  
                                                         } 
                                                      else 
                                                         if (FiboLevel > 70 
                                                         && FiboLevel < 150 
                                                         && PriceLevel > -60
                                                         //&& Ask < EW3 - Slippage * Point
                                                         )
                                                            {
                                                               if (FiboLevel == 100 // Murrey 8/8 support/resistance line
                                                               && MACDAngle == 2)
                                                                  {
//*****
                                                                     //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,198,OrangeRed); //TEMP DOWN, REVERT TO UP
                                                                     ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                                     ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,OrangeRed);
                                                                     EW3ORDERMARK=3;
                                                                     LastOp=28;
                                                                  }
                                                               else
                                                                  {
//*****
                                                                     //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,196,Violet); //DOWN
                                                                     ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                                     ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                                                     EW3ORDERMARK=13;
                                                                     LastOp=29;
                                                                  }
                                                            } 
                                                         else
                                                            if (PriceLevel < -65 
                                                            && MA > iOpen(NULL,0,0)) 
                                                               {
//*****
                                                                  //SetArrow(EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point,200,Violet); // UP
                                                                  ObjectCreate("Arrow"+EW3MARKTIME,OBJ_ARROW,0,EW3MARKTIME, EW3 + (StopLoss / 2 + NoisePips) * Point);
                                                                  ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                                                  EW3ORDERMARK=14;
                                                                  LastOp=30;
                                                               } 
                                                         }
                                                      EW4MARK=1;
                                                      EW4MARKTIME=EW3MARKTIME;
                                                      EW4MARKBAR=EW3MARKBAR;
                                                   }

                                                if (EW3MARK==1  
                                                && ((WaveAngle == 1 && EW3 - iOpen(NULL,0,0) > EW1 - EW2 )
                                                || (WaveAngle == 2 && iOpen(NULL,0,0) - EW3 > EW2 - EW1 ))
                                                )
                                                   {
                                                      //Print(TimeToStr(time),": ",Symbol," Elliot Wave 3 retracement ended. Last EW3:",EW3," Last EW3 Time:",TimeToStr(EW3MARKTIME)," Order Stop:",TrailingStopPoint);
                                                      //Alert(TimeToStr(time),": ",Symbol," Elliot Wave 3 retracement ended. Last EW3:",EW3," Last EW3 Time:",TimeToStr(EW3MARKTIME)," Order Stop:",TrailingStopPoint);
                                                      Comment("\nEWTrend=Recalculating..",
                                                      "\nLast EW0=",TimeToStr(EW5MARKTIME),
                                                      "    ",EW5,
                                                      "\nLast EW1=",TimeToStr(EW1MARKTIME),
                                                      "    ",EW1,
                                                      "\nLast EW2=",TimeToStr(EW2MARKTIME),
                                                      "    ",EW2,
                                                      "\nLast EW3=",TimeToStr(EW3MARKTIME),
                                                      "    ",EW3,
                                                      "\nPivot                         ",Pivot,
                                                      "\nResistance Level I            ",ResistanceLevel1,
                                                      "\nSupport Level I               ",SupportLevel1,
                                                      "\nResistance Level II           ",ResistanceLevel2,
                                                      "\nSupport Level II              ",SupportLevel2,
                                                      "\nPrice Level                   ",PriceLevel," %"
                                                      );
                                                      EW0MARK=0;
                                                      EW1MARK=0;
                                                      EW2MARK=0;
                                                      EW3MARK=0;
                                                      EW4MARK=0;
                                                      EW5MARK=0;
                                                      ORDERMARK=0;
                                                   }

                                                if (prevbars > 0 && EW3ORDERMARK==99
                                                && Bars != prevbars
                                                && ((PriceLevel > 0 && LastPriceLevel <= 0) 
                                                || (PriceLevel < 0 && LastPriceLevel >= 0))
                                                //&& CCI < 200
                                                )
                                                   {
                                                      ENTRYPRICE=iOpen(NULL,0,0);
                                                      if (ParabolicSAR < iOpen(NULL,0,0))
                                                         { 
                                                            ORDERANGLE=1; 
                                                            ENTRYPRICE=Pivot;
                                                            MinTakeProfitPtS=ResistanceLevel2;
                                                         }
                                                      if (ParabolicSAR > iOpen(NULL,0,0))  
                                                         { 
                                                            ORDERANGLE=11; 
                                                            ENTRYPRICE=Pivot;
                                                            MinTakeProfitPtS=SupportLevel2;
                                                         } 
                                                      Trace = 1;
                                                      //Print(TimeToStr(time),": Trace:",Trace," ORDERMARK:",ORDERMARK," ORDERANGLE:",ORDERANGLE," Price: ",Ask," Commodity Channel Index ",CCI," Pivot ",Pivot," Resistance Level I ",ResistanceLevel1," Support Level I ",SupportLevel1," Resistance Level II ",ResistanceLevel2," Support Level II ",SupportLevel2," Price Level ",PriceLevel," Last Price Level ",LastPriceLevel);    
                                                      LastOp=0;
                                                      ORDERMARK=1;
                                                      ORDERCOUNT=0;
                                                      if (WaveAngle == 1)  
                                                         SARAngle = 1;
                                                      if (WaveAngle == 2)  
                                                         SARAngle = 2;
                                                      for (counter = 1; counter < 10; counter++)
                                                         {
                                                            tempval =iSAR(NULL,0,SARstep,SARmax,counter);                         
                                                            //Print("Price:",Close[counter]," SAR:",tempval);
                                                            if (WaveAngle == 1 && tempval > Close[counter])
                                                               SARAngle = 2;
                                                            if (WaveAngle == 2 && tempval < Close[counter])
                                                               SARAngle = 1;
                                                            return(0);
                                                            if (WaveAngle == 1)
                                                               Print(TimeToStr(iTime(NULL,0,0)),": Support/Resistance cross at price:",iOpen(NULL,0,0) ," WaveAngle: UP SAR:",ParabolicSAR, " SARAngle:",SARAngle," PriceLevel: ",PriceLevel," LastPriceLevel: ",LastPriceLevel);
                                                            if (WaveAngle == 2)
                                                               Print(TimeToStr(iTime(NULL,0,0)),": Support/Resistance cross at price:",iOpen(NULL,0,0) ," WaveAngle: DOWN SAR:",ParabolicSAR, " SARAngle:",SARAngle," PriceLevel: ",PriceLevel," LastPriceLevel: ",LastPriceLevel);  
                                                            Print(TimeToStr(iTime(NULL,0,0)),": Support/Resistance - Pivot:",Pivot," Resistance Level I:",ResistanceLevel1," Support Level I:",SupportLevel1," Resistance Level II:",ResistanceLevel2," Support Level II:",SupportLevel2);
                                                            Print(" Support/Resistance - EW0MARK:",EW0MARK," EW1MARK:",EW1MARK," EW2MARK:",EW2MARK," EW3MARK:",EW3MARK," EW3MARKBAR=",EW3MARKBAR," EW4MARK:",EW4MARK," EW0:",EW5PRICE," EW1:",EW1," EW2:",EW2," EW3:",EW3);
//*****
                                                            //SetArrow(iTime(NULL,0,0),iOpen(NULL,0,0) ,254,Blue);
                                                            ObjectCreate("Arrow"+iTime(NULL,0,0),OBJ_ARROW,0,iTime(NULL,0,0),iOpen(NULL,0,0));
                                                            ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Blue);

                                                            if (WaveAngle == 1 )
                                                               { 
                                                                  if (EW0MARK == 1 
                                                                  && EW1MARK==1
                                                                  && EW2MARK==0
                                                                  )
                                                                     ORDERANGLE=2;
                                                                  if (EW0MARK == 1 
                                                                  && EW1MARK==1
                                                                  && EW2MARK==1
                                                                  && EW3MARK==0
                                                                  )
                                                                     ORDERANGLE=23;
                                                                  if (EW0MARK == 1 
                                                                  && EW1MARK==1
                                                                  && EW2MARK==1
                                                                  && EW3MARK==1
                                                                  )
                                                                     ORDERANGLE=4;
                                                               }
                                                            if (WaveAngle == 2)
                                                               { 
                                                                  if (EW0MARK == 1
                                                                  && EW1MARK==1
                                                                  && EW2MARK==0
                                                                  )
                                                                     ORDERANGLE=21;
                                                                  if (EW0MARK == 1 
                                                                  && EW1MARK==1
                                                                  && EW2MARK==1
                                                                  && EW3MARK==0
                                                                  )
                                                                     ORDERANGLE=22;
                                                                  if (EW0MARK == 1 
                                                                  && EW1MARK==1
                                                                  && EW2MARK==1
                                                                  && EW3MARK==1
                                                                  )
                                                                     ORDERANGLE=3;
                                                               }
                                                            LastOp = 1;
                                                         }
                                                      if (ORDERMARK > 9990)
                                                         {
                                                            ORDERANGLE=WaveAngle;
                                                            if (ORDERCOUNT > TradesCount 
                                                            && EW3 <= iOpen(NULL,0,0))
                                                               ORDERCOUNT = TradesCount;   
                                                            if (WaveAngle == 1 && iOpen(NULL,0,0) - TakeProfit * Point > EW1)  
                                                               ORDERMARK = 1; // Additional Orders h&&ling
                                                            if (WaveAngle == 2 && iOpen(NULL,0,0) + TakeProfit * Point < EW1)  
                                                               ORDERMARK = 1; // Additional Orders h&&ling
                                                         }
                                                      if (WaveAngle == 1)  
                                                         SARAngle = 1;
                                                      if (WaveAngle == 2)  
                                                         SARAngle = 2;
                                                      for (counter=1;counter >= RetracementBars; counter ++)
                                                         tempval =iSAR(NULL,0,SARstep,SARmax,counter);
                                                         //Print("Price:",Close[counter]," SAR:",tempval);
                                                      if (WaveAngle == 1 && tempval > Close[counter])
                                                         SARAngle = 2;
                                                      if (WaveAngle == 2 && tempval < Close[counter])
                                                         SARAngle = 1;
                                                      return(0);

                                                      if (WaveAngle == 1)  
                                                         MACDAngle = 1;
                                                      if (WaveAngle == 2)  
                                                         MACDAngle = 2;
                                                      for (counter=1;counter >= RetracementBars; counter ++)
                                                         tempval=iMACD(NULL,0,RetracementBars/5,RetracementBars,RetracementBars/5,PRICE_CLOSE,MODE_EMA,counter);
                                                         //Print("MACD:",tempval);
                                                      if (WaveAngle == 1)
                                                         {
                                                            if (tempval > 0 && tempval < MACD)  
                                                               MACDAngle = 1;
                                                            if (tempval < 0 || tempval > MACD)  
                                                               MACDAngle = 2;
                                                         }  
                                                      if (WaveAngle == 2)
                                                         {
                                                            if (tempval > 0 || tempval < MACD)  
                                                               MACDAngle = 1;
                                                            if (tempval < 0 && tempval > MACD)  
                                                               MACDAngle = 2;
                                                         }  
                                                      return(0);
                                                      ShortMACDAngle = MACDAngle;
                                                      if (WaveAngle == 1)  
                                                         MACDAngle = 1;
                                                      if (WaveAngle == 2)  
                                                         MACDAngle = 2;
                                                      for (counter=1;counter >= RetracementBars; counter ++)
                                                         tempval=iMACD(NULL,0,RetracementBars,MaxBars,RetracementBars,PRICE_CLOSE,MODE_EMA,counter);
                                                         //Print("MACD:",tempval);
                                                      if (WaveAngle == 1)
                                                         {
                                                            if (tempval > 0 && tempval < MACD)  
                                                               MACDAngle = 1;
                                                            //if (tempval < 0 || tempval > MACD)  
                                                               //MACDAngle = 2;
                                                            if (tempval > MACD)
                                                               MACDAngle = 2;
                                                         }  
                                                      if (WaveAngle == 2)
                                                         {
                                                            if (tempval > 0 || tempval < MACD)  
                                                               MACDAngle = 1;
                                                            //if (tempval < 0 && tempval > MACD)  
                                                               //MACDAngle = 2;
                                                            if (tempval > MACD)  
                                                               MACDAngle = 2;
                                                         }  
                                                      return(0);
                                                      MaxPriceBar = Highest (MODE_CLOSE,MaxBars+1, RetracementBars);
                                                      MinPriceBar = Lowest (MODE_CLOSE, MaxBars+1, RetracementBars);
                                                      MaxPrice = iClose(NULL,0,MaxPriceBar);
                                                      MinPrice = iClose(NULL,0,MinPriceBar);
                                                      if (WaveAngle == 1) 
                                                         {
                                                            BearsAngle=1;
                                                            BullsAngle=1;
                                                            for (counter=1;counter >= RetracementBars; counter ++)
                                                               {
                                                                  tempval=iBearsPower(NULL,0,RetracementBars,MODE_HIGH,counter);
                                                                  //if (tempval < 0 || tempval > Bears)  
                                                                     //BearsAngle=2;
                                                                  if (tempval > Bears)  
                                                                     BearsAngle=2;
                                                                  tempval=iBullsPower(NULL,0,RetracementBars,MODE_LOW,counter); 
                                                                  //if (tempval < 0 || tempval > Bulls)  
                                                                     //BullsAngle=2;
                                                                  if (tempval > Bulls)  
                                                                     BullsAngle=2;
                                                               }
                                                         } 
                                                      if (WaveAngle == 2)
                                                         {
                                                            BearsAngle=2;
                                                            BullsAngle=2;
                                                            for (counter=1;counter >= RetracementBars; counter ++)
                                                               {
                                                                  tempval=iBearsPower(NULL,0,RetracementBars,MODE_HIGH,counter);
                                                                  //if (tempval > 0 || tempval < Bears)  
                                                                     //BearsAngle=1;
                                                                  if (tempval < Bears)  
                                                                     BearsAngle=1;
                                                                  tempval=iBullsPower(NULL,0,RetracementBars,MODE_LOW,counter); 
                                                                  //if (tempval > 0 || tempval < Bulls)  
                                                                     //BullsAngle=1;
                                                                  if (tempval < Bulls)  
                                                                     BullsAngle=1;
                                                               }
                                                         } 
                                                      if (EW3ORDERMARK > 0)
                                                         {  
                                                            ORDERCOUNT=0;
                                                            ORDERMARK=1;
                                                            if (EW3ORDERMARK == 1 
                                                            //&& Bid > EW3 + Slippage * Point
                                                            //&& iOpen(NULL,0,0) >= EW3
                                                            //&& Bid > EW3 + NoisePips * Point
                                                            )
                                                                  {
                                                                     ORDERANGLE=4;
                                                                  }  

                                                            if (EW3ORDERMARK == 2
                                                            //&& iOpen(NULL,0,0) >= EW3
                                                            //&& Ask < EW3 - NoisePips * Point
                                                            )
                                                               {
                                                                  ORDERANGLE = 3;    
                                                               }  

                                                            if (EW3ORDERMARK == 3
                                                            //&& iOpen(NULL,0,0) >= EW3
                                                            //&& Bid > EW3 + NoisePips * Point
                                                            )
                                                               {
                                                                  ORDERANGLE = 2;    
                                                               }  

                                                            if (EW3ORDERMARK == 4
                                                            //&& Ask < EW3 - NoisePips * Point
                                                            )
                                                               {
                                                                  ORDERANGLE = 22;
                                                               }  
                                                            if (EW3ORDERMARK == 11 
                                                            //&& Ask < EW3 - Slippage * Point
                                                            //&& iOpen(NULL,0,0) >= EW3
                                                            //&& Ask < EW3 - NoisePips * Point
                                                            )
                                                               {
                                                                  ORDERANGLE = 23;    
                                                               }  

                                                            if (EW3ORDERMARK == 12
                                                            //&& iOpen(NULL,0,0) >= EW3
                                                            //&& Bid > EW3 + NoisePips * Point
                                                            )
                                                               {
                                                                  ORDERANGLE = 22;  
                                                               }  
      
                                                            if (EW3ORDERMARK == 13
                                                            //&& iOpen(NULL,0,0) >= EW3
                                                            //&& Ask < EW3 - NoisePips * Point
                                                            )
                                                               {
                                                                  ORDERANGLE = 21;  
                                                               }  

                                                            if (EW3ORDERMARK == 14
                                                            //&& Ask < EW3 - NoisePips * Point
                                                            )
                                                               {
                                                                  ORDERANGLE = 3;    
                                                               }  
                                                            //EW3ORDERMARK=0; 
                                                         }  

                                                      MaxPriceBar = Highest (MODE_CLOSE,MaxBars+1, MaxBars);
                                                      MinPriceBar = Lowest (MODE_CLOSE, MaxBars+1, MaxBars);
                                                      MaxPrice = iClose(NULL,0,MaxPriceBar);
                                                      MinPrice = iClose(NULL,0,MinPriceBar);

                                                      if (EW2MARK == 1 && EW3MARK == 0 )
                                                         {
                                                            if (WaveAngle == 1 
                                                            && Bid > EW2 + NoisePips * Point
                                                            && Bid > SupportLevel1 + NoisePips * Point
                                                            && ((EW2 - SupportLevel1 > 0 && (EW2 - SupportLevel1) / 2 < NoisePips * 2 / 2) || (SupportLevel1 - EW2 > 0 && (SupportLevel1 - EW2) / 2 < NoisePips * 2 / 2))
                                                            && EW1 - Bid > MinTakeProfit * Point + NoisePips * Point + Slippage
                                                            )
                                                               {
                                                                  ENTRYPRICE=SupportLevel1;
                                                                  ORDERMARK=1;
//*****
                                                                  //SetArrow(iTime(NULL,0,0),Low,196,Violet);
                                                                  ObjectCreate("Arrow"+iTime(NULL,0,0),OBJ_ARROW,0,iTime(NULL,0,0),Low);
                                                                  ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                                                  Print(TimeToStr(iTime(NULL,0,0)),": ",Symbol()," Elliot Wave 2 collision with Support Level 1 detected. Last EW2:",EW2," Last EW2 Time:",TimeToStr(EW2MARKTIME)," Recommended action: BUYLIMIT at ", ENTRYPRICE, " with T/P at ",EW1 - NoisePips * Point);
                                                                  Alert(TimeToStr(iTime(NULL,0,0)),": ",Symbol()," Elliot Wave 2 collision with Support Level 1 detected. Last EW2:",EW2," Last EW2 Time:",TimeToStr(EW2MARKTIME)," Recommended action: BUYLIMIT at ", ENTRYPRICE, " with T/P at ",EW1 - NoisePips * Point);
                                                                  Print(TimeToStr(iTime(NULL,0,0)),Symbol()," : Elliot Wave 2 collision - Pivot:",Pivot," Resistance Level I:",ResistanceLevel1," Support Level I:",SupportLevel1," Resistance Level II:",ResistanceLevel2," Support Level II:",SupportLevel2);
                                                               }

                                                            if (WaveAngle == 2 
                                                            && Ask < EW2 - NoisePips * Point
                                                            && Ask < SupportLevel1 - NoisePips * Point
                                                            && ((EW2 - SupportLevel1 > 0 && (EW2 - SupportLevel1) / 2 < NoisePips * 2 / 2) || (SupportLevel1 - EW2 > 0 && (SupportLevel1 - EW2) / 2 < NoisePips * 2 / 2))
                                                            && Ask - EW1 > MinTakeProfit * Point + NoisePips * Point + Slippage)
                                                               {
                                                                  ENTRYPRICE=SupportLevel1;
                                                                  ORDERMARK=2;
//*****
                                                                  //SetArrow(iTime(NULL,0,0),High,198,Violet);
                                                                  ObjectCreate("Arrow"+iTime(NULL,0,0),OBJ_ARROW,0,iTime(NULL,0,0),High);
                                                                  ObjectSet("Arrow"+EW3MARKTIME,OBJPROP_COLOR,Violet);
                                                                  Print(TimeToStr(iTime(NULL,0,0)),": ",Symbol()," Elliot Wave 2 collision with Resistance Level 1 detected. Last EW2:",EW2," Last EW2 Time:",TimeToStr(EW2MARKTIME)," Recommended action: BUYLIMIT at ", ENTRYPRICE, " with T/P at ",EW1 - NoisePips * Point);
                                                                  Alert(TimeToStr(iTime(NULL,0,0)),": ",Symbol()," Elliot Wave 2 collision with Resistance Level 1 detected. Last EW2:",EW2," Last EW2 Time:",TimeToStr(EW2MARKTIME)," Recommended action: BUYLIMIT at ", ENTRYPRICE, " with T/P at ",EW1 - NoisePips * Point);
                                                                  Print(TimeToStr(iTime(NULL,0,0)),Symbol()," : Elliot Wave 2 collision - Pivot:",Pivot," Resistance Level I:",ResistanceLevel1," Support Level I:",SupportLevel1," Resistance Level II:",ResistanceLevel2," Support Level II:",SupportLevel2);
                                                               }
                                                         }
                                                   }
                                             }
//----========== Section dessin ==========----//
                                             /*
                                             i=0;
                                             for(h=0; h<Bars && i<MaxBars; h++)
                                                {
                                                   if ((ExtMapBuffer[h]!=0) || (ExtMapBuffer2[h]!=0)) 
                                                      {
                                                         Peak[i]= h;
                                                         i++;    
                                                      }
                                                }
   
                                             for(j=0;j<i && j<MaxBars && found==false;j++) 
                                                {
                                                   Elliot[1]=Peak[j+4]; // 1 High
                                                   Elliot[2]=Peak[j+3]; // 2 Low
                                                   Elliot[3]=Peak[j+2]; // 3 High 
                                                   Elliot[4]=Peak[j+1]; // 4 Low 
                                                   Elliot[5]=Peak[j+0]; // 5 High
                                                   if (     // Buy Elliotwave
                                                   Low[Elliot[1]]<High[Elliot[2]] &&  // 1. + 3.a.//1-3
                                                   Low[Elliot[3]]<Low[Elliot[1]] &&   // 2. + 3.b. //3-1
                                                   Low[Elliot[3]]<High[Elliot[4]]  // 4//3-4
                                                   ) 
                                                      {
                                                         ElliotWave="Buy";
                                                      } 
                                                      else if 
                                                         (     // Sell Elliotwave
                                                         High[Elliot[1]]>Low[Elliot[2]] &&  // 1. + 3.a.
                                                         High[Elliot[3]]>High[Elliot[1]] &&   // 2. + 3.b. 
                                                         High[Elliot[3]]>Low[Elliot[4]]  // 4
                                                         ) 
                                                            {
                                                               ElliotWave="Sell";
                                                            } 
                                                         else 
                                                            {
                                                               ElliotWave="Not";
                                                            }
      
                                                         if(ElliotWave=="Buy") 
                                                            {
      	                                                        ObjectCreate(Title + "Line-1-3", OBJ_TREND, 0, Time[Elliot[1]],Low[Elliot[1]], Time[Elliot[3]],Low[Elliot[3]] );
                                                                  //ObjectSet(Title + "Line-1-3",OBJPROP_RAY,0);
        	                                                         ObjectSet(Title + "Line-1-3", OBJPROP_COLOR, Lime);
          	                                                       ObjectSet(Title + "Line-1-3", OBJPROP_WIDTH, 2);
                                                                  //ObjectSet(Title + "Line-1-3",OBJPROP_BACK,1);
          	
        	                                                      if (ObjectGetValueByShift(Title + "Line-1-3", Elliot[3]) >= Low[Elliot[3]]) 
        	                                                         {
           	                                                         ObjectCreate(Title + "1", OBJ_TEXT, 0, Time[Elliot[1]],Low[Elliot[1]]-LowerDistance*Point );
           	                                                         ObjectSetText(Title + "1", ""+DoubleToStr(1,0), 10, "Arial", Blue);
           	                                                         ObjectCreate(Title + "2", OBJ_TEXT, 0, Time[Elliot[2]],High[Elliot[2]]+UpperDistance*Point );
           	                                                         ObjectSetText(Title + "2", ""+DoubleToStr(2,0), 10, "Arial", Blue);
           	                                                         ObjectCreate(Title + "3", OBJ_TEXT, 0, Time[Elliot[3]],Low[Elliot[3]]-LowerDistance*Point );
           	                                                         ObjectSetText(Title + "3", ""+DoubleToStr(3,0), 10, "Arial", Blue);
           	                                                         ObjectCreate(Title + "4", OBJ_TEXT, 0, Time[Elliot[4]],High[Elliot[4]]+UpperDistance*Point );
           	                                                         ObjectSetText(Title + "4", ""+DoubleToStr(4,0), 10, "Arial", Blue);
           	                                                         ObjectCreate(Title + "5", OBJ_TEXT, 0, Time[Elliot[5]],Low[Elliot[5]]-LowerDistance*Point );
           	                                                         ObjectSetText(Title + "5", ""+DoubleToStr(5,0), 10, "Arial", Blue);
           	
           	                                                         ObjectCreate(Title + "Line-1-4", OBJ_TREND, 0, Time[Elliot[1]],Low[Elliot[1]], Time[Elliot[4]],High[Elliot[4]] );
           	                                                         ObjectSet(Title + "Line-1-4", OBJPROP_COLOR, Red);
                                                                     //ObjectSet(Title + "Line-1-4",OBJPROP_RAY,0);
           	                                                         ObjectSet(Title,OBJPROP_STYLE,STYLE_DOT);
          	                                                         ObjectSet(Title + "Line-1-4", OBJPROP_WIDTH, 0);
          	                                                         ObjectSet(Title + "Line-1-4",OBJPROP_BACK,0);
          	                                                         ObjectSet(Title + "Line-2-5",OBJPROP_BACK,0);
          	
                                                                     //ObjectCreate(Title + "Line-2-5", OBJ_TREND, 0, Time[Elliot[2]],High[Elliot[2]], Time[Elliot[5]],Low[Elliot[5]] );
                                                                     //ObjectSet(Title,OBJPROP_STYLE,STYLE_DOT);
                                                                     //ObjectSet(Title + "Line-2-5",OBJPROP_RAY,0);
                                                                     //ObjectSet(Title + "Line-2-5", OBJPROP_COLOR, Lime);
                                                                     //ObjectSet(Title + "Line-2-5", OBJPROP_WIDTH, 1);
          	
                                                                     //Comment("Buy Elliotwave (" + TimeToStr(Time[Elliot[5]],TIME_DATE|TIME_MINUTES) + ") at " + (ObjectGetValueByShift("Line-1-3", Elliot[5])-5*Point) + " SL " + High[Elliot[5]]);
          	                                                         // found=true;
                                                                  //} 
                                                               //else 
                                                                  //{
                                                                     //ObjectDelete(Title + "Line-1-3");
                                                                  }
                                                               } 
                                                            else if (ElliotWave=="Sell") 
                                                               {
                                                                     ObjectCreate(Title + "Line-1-3", OBJ_TREND, 0, Time[Elliot[1]],High[Elliot[1]], Time[Elliot[3]],High[Elliot[3]] );
                                                                     //ObjectSet(Title + "Line-1-3",OBJPROP_RAY,0);
         	                                                         ObjectSet(Title + "Line-1-3", OBJPROP_COLOR, Lime);
          	                                                         ObjectSet(Title + "Line-1-3", OBJPROP_WIDTH, 2);
                                                                     //ObjectSet(Title + "Line-1-3",OBJPROP_BACK,1);
          	
                                                                     if ( ObjectGetValueByShift(Title + "Line-1-3", Elliot[3]) <= High[Elliot[3]] ) 
                                                                        {
           	                                                               ObjectCreate(Title + "1", OBJ_TEXT, 0, Time[Elliot[1]],High[Elliot[1]]+UpperDistance*Point );
                                                                           ObjectSetText(Title + "1", ""+DoubleToStr(1,0), 10, "Arial", Blue);
                                                                           ObjectCreate(Title + "2", OBJ_TEXT, 0, Time[Elliot[2]],Low[Elliot[2]]-LowerDistance*Point );
                                                                           ObjectSetText(Title + "2", ""+DoubleToStr(2,0), 10, "Arial", Blue);
                                                                           ObjectCreate(Title + "3", OBJ_TEXT, 0, Time[Elliot[3]],High[Elliot[3]]+UpperDistance*Point );
                                                                           ObjectSetText(Title + "3", ""+DoubleToStr(3,0), 10, "Arial", Blue);
                                                                           ObjectCreate(Title + "4", OBJ_TEXT, 0, Time[Elliot[4]],Low[Elliot[4]]-LowerDistance*Point );
                                                                           ObjectSetText(Title + "4", ""+DoubleToStr(4,0), 10, "Arial", Blue);
                                                                           ObjectCreate(Title + "5", OBJ_TEXT, 0, Time[Elliot[5]],High[Elliot[5]]+UpperDistance*Point );
                                                                           ObjectSetText(Title + "5", ""+DoubleToStr(5,0), 10, "Arial", Blue);
            
                                                                           ObjectCreate(Title + "Line-1-4", OBJ_TREND, 0, Time[Elliot[1]],High[Elliot[1]], Time[Elliot[4]],Low[Elliot[4]] );
                                                                           ObjectSet(Title + "Line-1-4", OBJPROP_COLOR, Red);
                                                                           //ObjectSet(Title + "Line-1-4",OBJPROP_RAY,0);
                                                                           ObjectSet(Title,OBJPROP_STYLE,STYLE_DOT);
                                                                           ObjectSet(Title + "Line-1-4", OBJPROP_WIDTH, 0);
                                                                           ObjectSet(Title + "Line-1-4",OBJPROP_BACK,0);
            
            
                                                                           //ObjectCreate(Title + "Line-2-5", OBJ_TREND, 0, Time[Elliot[2]],Low[Elliot[2]], Time[Elliot[5]],High[Elliot[5]] );
                                                                           //ObjectSet(Title,OBJPROP_STYLE,STYLE_DOT);
                                                                           //ObjectSet(Title + "Line-2-5",OBJPROP_RAY,0);
                                                                           //ObjectSet(Title + "Line-2-5", OBJPROP_COLOR, Yellow);
                                                                           //ObjectSet(Title + "Line-2-5", OBJPROP_WIDTH, 1);
                                                                           //ObjectSet(Title + "Line-2-5",OBJPROP_BACK,0);
      
    
                                                                           //found=true;
                                                                        } 
                                                                     //else 
                                                                        //{
                                                                              //ObjectDelete(Title + "Line-1-3");
                                                                              ObjectsRedraw();
                                                                        //}
                                                   } 
                                             }
                                             */
                                       }
                                 }
//----
      return(0);
   }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains open prices of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains open time of each bar


Indicator Curves created:

Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_SECTION


Indicators Used:

Bears Power indicator
Bulls Power indicator
Relative strength index
Commodity channel index
Parabolic Stop and Reverse system
Moving average indicator
MACD Histogram



Custom Indicators Used:
0

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen