One trade per candle on lower timeframe.

To add comments, please log in or register
Digitals113
231
Digitals113  

I have an EA that runs on the 4 hour chart and opens trade in a grid based on the new candle formation on the 15 minute timeframe.

I am trying to limit the number of trades the EA takes by only allowing a certain number of trades on the 15 minute candle from the 4 hour chart.

For example a new 15 minute bar forms and EA adds 2 trades waits for new 15 minute bar and signal and opens 2 more trades etc..

Can anyone lead me to the right direction to do this? Thank you in advance for your help.

My code for new candle formation: 

double lastClose;
bool IsNewCandle()
{
if (iClose(_Symbol,PERIOD_15,1) == lastClose){
return (false);}
if(iClose(_Symbol,PERIOD_15,1)!=lastClose){
lastClose=iClose(_Symbol,gttimeframe,1);
return(true);}
return(false);
}
Seng Joo Thio
541
Seng Joo Thio  
Digitals113:

I have an EA that runs on the 4 hour chart and opens trade in a grid based on the new candle formation on the 15 minute timeframe.

I am trying to limit the number of trades the EA takes by only allowing a certain number of trades on the 15 minute candle from the 4 hour chart.

For example a new 15 minute bar forms and EA adds 2 trades waits for new 15 minute bar and signal and opens 2 more trades etc..

Can anyone lead me to the right direction to do this? Thank you in advance for your help.

My code for new candle formation: 

Consider using time (i.e. iTime) instead of iClose, because nothing stops consecutive candles from having the same close price, however rare.

Also consider using https://www.mql5.com/en/docs/globals to store the lastTime instead, as you need it to 'remember' the last candle even after a crash, or shutdown/restart.

Documentation on MQL5: Global Variables of the Terminal
Documentation on MQL5: Global Variables of the Terminal
  • www.mql5.com
Global variables are kept in the client terminal for 4 weeks since the last access, then they will be deleted automatically. An access to a global variable is not only setting of a new value, but reading of the global variable value, as well.
andrew4789
279
andrew4789  
Digitals113:

I have an EA that runs on the 4 hour chart and opens trade in a grid based on the new candle formation on the 15 minute timeframe.

I am trying to limit the number of trades the EA takes by only allowing a certain number of trades on the 15 minute candle from the 4 hour chart.

For example a new 15 minute bar forms and EA adds 2 trades waits for new 15 minute bar and signal and opens 2 more trades etc..

Can anyone lead me to the right direction to do this? Thank you in advance for your help.

My code for new candle formation: 

You could look at using an array to save, say,  the ticket #'s. That way you could access the number of array items to give you the total orders, and only allow to your max.
Digitals113
231
Digitals113  
andrew4789:
You could look at using an array to save, say,  the ticket #'s. That way you could access the number of array items to give you the total orders, and only allow to your max.
int NumberofOrdersonCandle(){
   datetime Ordertime=iTime(Symbol(),PERIOD_M15,1);
   int EarliestSellTicket = -1;
   for(int pos = OrdersTotal()-1; pos >= 0 ; pos--)
   {
      if (!OrderSelect(pos,SELECT_BY_POS))return (-1);
      if (OrderSymbol()==Symbol() && OrderOpenTime()==Ordertime)
      
       EarliestSellTicket = OrdersTotal();

        }
        return(EarliestSellTicket);
}

datetime lastClose;
bool IsNewCandle()
{
if (iTime(_Symbol,PERIOD_M15,1) == lastClose){
return (false);}
if(iTime(_Symbol,PERIOD_M15,1)!=lastClose){
lastClose=iTime(_Symbol,PERIOD_M15,1);
return(true);}
return(false);
}

if(IsNewCandle() && NumberofOrdersonCandle()<2)
{
entry code
}

This is the code I came up with, unsure if its correct.

Konstantin Nikitin
12167
Konstantin Nikitin  

Something like this

bool IsNewCandle(void)
  {
   static datetime t_bar=iTime(_Symbol,PERIOD_15,0);
   datetime time=iTime(_Symbol,PERIOD_15,0);
//---
   if(t_bar==time)
      return false;
   t_bar=time;
//---
   return true;
  }
William Roeder
18873
William Roeder  
For a new bar test, Bars is unreliable (a refresh/reconnect can change number of bars on chart,) volume is unreliable (miss ticks,) Price is unreliable (duplicate prices and The == operand. - MQL4 and MetaTrader 4 - MQL4 programming forum.) Always use time.
I disagree with making a new bar function, because it can only be called once per tick. A variable can be tested multiple times.
          New candle - MQL4 and MetaTrader 4 - MQL4 programming forum
Digitals113
231
Digitals113  
bool Candletime()
{
datetime lastClose = iTime(_Symbol,PERIOD_M15,0);

if(TimeMinute(TimeCurrent())==TimeMinute(lastClose))
if(TimeMinute(NumberofOrdersonCandle())==TimeMinute(lastClose))
return true;
//---
return false;
}

datetime NumberofOrdersonCandle(){
   datetime Ordertime=iTime(Symbol(),PERIOD_M15,1);
   static datetime EarliestSellTicket = -1;
   for(int pos = OrdersTotal()-1; pos >= 0 ; pos--)
   {
      if (!OrderSelect(pos,SELECT_BY_POS))return (-1);
      if (OrderSymbol()==Symbol() && OrderOpenTime()==Ordertime)
      
       EarliestSellTicket = OrderOpenTime();

        }
        return(EarliestSellTicket);
}
Konstantin Nikitin
12167
Konstantin Nikitin  
William Roeder: The main thing for him to understand the principle. And how to work with it? He will decide.
Digitals113
231
Digitals113  
Konstantin Nikitin:
William Roeder: The main thing for him to understand the principle. And how to work with it? He will decide.

Thank you for your assistance. 

To add comments, please log in or register