Trade 15 min from last trade - page 2

 
SDC:

you could do an OrderSelect() loop to find the newest open trade and then do


testing...

New function...

bool IsTimeOK() {
int ibar;
for (int i = OrdersTotal()-1; i >= 0; i--) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
   ibar = iBarShift(NULL,PERIOD_M1,OrderOpenTime()); 
  }
  if(ibar > 15)
   return (true);
}
return (false);
}

in trading code...

if ( EnableTrading ){
if ( openTrades < maxOpenOrders && isTimeOK==true ){
  trade();  
  if ( trade_successful ){
  }
}
}      
 
mharoon:


testing...

What if the Order was opened 10 mins ago and closed 5 mins ago . . . you need to look at the History pool also . . .

Don't do this . . .

 ibar = iBarShift(NULL,PERIOD_M1,OrderOpenTime()); 
  }
  if(ibar > 15)

because it means it will only work on an M15 chart.

 
if ( EnableTrading ){
if ( openTrades < maxOpenOrders && TradeTime != Time[0] ){
  trade();  
  if ( trade_successful ){
      TradeTime = Time[0];}}}

Presumably the function trade() sets a global variable trade_successful

It would be better for the function trade() to return a bool so you can just write

if ( EnableTrading ){
if ( openTrades < maxOpenOrders && TradeTime != Time[0] ){
  if ( trade() ){
      TradeTime = Time[0];}}}
 

Try this . . .

extern int MinTimeBetweenTrades;      //  time to wait before placing next trade (minutes)

bool IsTimeOK() 
   {
   datetime TimeLastTradeOpened = 0;

   for (int i = OrdersTotal()-1; i >= 0; i--)   // loop to check open Orders . . .
      {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) )
         {
         Print("OrderSelect, position: ", i, " failed.")
         continue;
         }
  
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) 
         {
         if( OrderOpenTime() > TimeLastTradeOpened )  TimeLastTradeOpened = OrderopenTime();   // if order selected is newer update variable
         }
      }

   for (int i = OrderHistoryTotal()-1; i >= 0; i--) // loop to check closed Orders . . .
      {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) )
         {
         Print("OrderSelect, history position: ", i, " failed.")
         continue;
         }
  
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) 
         {
         if( OrderOpenTime() > TimeLastTradeOpened )  TimeLastTradeOpened = OrderopenTime();   // if order selected is newer update variable
         }
      }

   if(TimeCurrent() - TimeLastTradeOpened > MinTimeBetweenTrades * 60) return (true);
      
   else return (false);
   }

not compiled or tested . . . . caveat emptor

 
RaptorUK:

Try this . . .

not compiled or tested . . . . caveat emptor


Still testing ... but looks like this did the trick! (few typo's... here is fixed code)

bool IsTimeOK() {
   datetime TimeLastTradeOpened = 0;
   for (int i = OrdersTotal()-1; i >= 0; i--)   // loop to check open Orders . . .
   {
    if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) {
     Print("OrderSelect, position: ", i, " failed.");
     continue;
    }
    if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
     if( OrderOpenTime() > TimeLastTradeOpened )  
      TimeLastTradeOpened = OrderOpenTime();   // if order selected is newer update variable
    }
   } // for i
   for (int j = OrdersHistoryTotal()-1; j >= 0; j--) // loop to check closed Orders . . .
   {
    if( ! OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ) {
     Print("OrderSelect, history position: ", i, " failed.");
     continue;
    }
   if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
     if( OrderOpenTime() > TimeLastTradeOpened )  
      TimeLastTradeOpened = OrderOpenTime();   // if order selected is newer update variable
    }
   } // for j

   if(TimeCurrent() - TimeLastTradeOpened > tradeTimeWaitINmin * 60) 
    return (true);
   else 
    return (false);
}      

Called from code...

if ( EnableTrading ){
if ( openTrades < maxOpenOrders && IsTimeOK()){
...

 

You can use i for both loops are they are outside of each other . . . but if you are going to use j then change this also . . .

Print("OrderSelect, history position: ",  i   , " failed.");
 
RaptorUK:

You can use i for both loops are they are outside of each other . . . but if you are going to use j then change this also . . .


duh... thanks
 
/* Put the following just before the end of your code. */ Sleep(1000*60*15);
 
tonny:
/* Put the following just before the end of your code. */ Sleep(1000*60*15);
LOL . . . great idea . . . this kind of idea explains why your EA take 900 hours to curve-fit . . sorry, Optimize.
 
mharoon:


Still testing ... but looks like this did the trick! (few typo's... here is fixed code)


The code above works! thanks RaptorUK, you do man!

Thank you everyone for taking time looking into this

Reason: