This piece of code here doesn't seem to be working.

 
for(int l=OrdersTotal()-1;l>=0;l--)
          {
          if(OrderSelect(l,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()&& OrderType()==OP_SELL)
            {  OOPS=OrderOpenPrice();OOTS=OrderOpenTime();      
            if(iTime(Symbol(),0,0)-OrderOpenTime()<=0 && OrderOpenTime()!=0 )OOTS=OrderOpenTime()+(iTime(Symbol(),0,0)-OrderOpenTime());
                 if(OpenSellOrdersThisPair(Symbol())>=1)ShiftToOpenS =(iTime(Symbol(),0,0)-OOTS)/(60*period);
                 SEnvPU = iEnvelopes(NULL,0,EnvelopeMA,2,0,Applied,0.01,MODE_UPPER,ShiftToOpenS);
                 
                 

            }
                 
           }

          }
Not sure what's wrong with it but when I use the variables defined here, especially ShiftToOpenS, it doesn't seem to work as expected.
 
MetaNt:
Not sure what's wrong with it but when I use the variables defined here, especially ShiftToOpenS, it doesn't seem to work as expected.
Add some Print()s and find out what variables are not as you expect . . .
 
RaptorUK:
Add some Print()s and find out what variables are not as you expect . . .


I tried that before but in the form of an OOTS on my order labels and it does seem to be the OOTS that isn't working, but I don't know why, also the OOTS doesn't have an issue with every open order the fault seems to occur arbitrarily. The same is the case with my buy version of this code.
 
MetaNt:

I tried that before but in the form of an OOTS on my order labels and it does seem to be the OOTS that isn't working, but I don't know why, also the OOTS doesn't have an issue with every open order the fault seems to occur arbitrarily. The same is the case with my buy version of this code.

You need to review your code . . . some of it doesn't make a lot of sense, for example . . .

OOTS = OrderOpenTime() + ( iTime(Symbol(),0,0) - OrderOpenTime() );

// is the same as . . .

OOTS = iTime(Symbol(),0,0);

. . . so you have 2 unneeded function calls.

And you get rid of the remaining function call like this . . .

OOTS = Time[0];
 
RaptorUK:

You need to review your code . . . some of it doesn't make a lot of sense, for example . . .

. . . so you have 2 unneeded function calls.

And you get rid of the remaining function call like this . . .


I can't do that because this gets recalculated every tick, OOTS= the open time of the bar that my order opened in. the function that I used was just incase the order opened after the bar opened. Now I see my mistake.
 
MetaNt:

I can't do that because this gets recalculated every tick, OOTS= the open time of the bar that my order opened in. the function that I used was just incase the order opened after the bar opened.
OrderOpenTime() for an Order does not change . . . X + Y - X is always Y
 
RaptorUK:
OrderOpenTime() for an Order does not change . . . X + Y - X is always Y


Yes but I thought you suggested making OOTS ==

Time[0]

I only used the below, in order to round down to the nearest open bar time.

OOTS = OrderOpenTime() + ( iTime(Symbol(),0,0) - OrderOpenTime() )
 
MetaNt:


Yes but I thought you suggested making OOTS ==

I only used the below, in order to round down to the nearest open bar time.

But . . .

iTime(Symbol(),0,0) == Time[0]

. . . is true. Your iTime call gets the open time for bar 0 for the current chart symbol for the current timeframe . . . it's the same as Time[0] . . . unless you are constantly looping within start() ?

 
RaptorUK:

But . . .

. . . is true. Your iTime call gets the open time for bar 0 for the current chart symbol for the current timeframe . . . it's the same as Time[0] . . . unless you are constantly looping within start() ?


No I understand this, I have recently been replacing functions of such forms with the array form, my issue is not with the alternative syntax as the problem with OOTS will still persist.
 

I might have to use a bool to get this working.

Suggestions would be appreciated.

 
or(int k=OrdersTotal()-1;k>=0;k--)
          {
          if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()&& OrderType()==OP_BUY)
            { OOPB=OrderOpenPrice();      
             if((Time[0]-OrderOpenTime())<=0 && OrderOpenTime()!=0 && OrderOpenTime()!=NULL)OOTB=Time[0];  
            //else OOTB=OOTB;
                 if(OpenOrdersThisPair(Symbol())>=1)ShiftToOpenB=((Time[0]-OOTB)/60*PeriodSeconds());
                 BEnvPL = iEnvelopes(NULL,0,EnvelopeMA,2,0,Applied,0.01,MODE_LOWER,ShiftToOpenB);
                 
                  
                 
                       
                                               
            }
                 
           }

          }
          
for(int l=OrdersTotal()-1;l>=0;l--)
          {
          if(OrderSelect(l,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()&& OrderType()==OP_SELL)            
            {OOPS=OrderOpenPrice();       
             if((Time[0]-OrderOpenTime())<=0 && OrderOpenTime()!=0 && OrderOpenTime()!=NULL)OOTS=Time[0];
              //else OOTS=OOTS;      
                 if(OpenOrdersThisPair(Symbol())>=1)ShiftToOpenS =((Time[0]-OOTS)/PeriodSeconds());
                 SEnvPU = iEnvelopes(NULL,0,EnvelopeMA,2,0,Applied,0.01,MODE_UPPER,ShiftToOpenS);
                 
                 
                 

            }
                 
           }

          }
Seems to be working now, however after 5 bars the shift goes from 5 to 16...
Reason: