For the EA to only launch orders every X amount of time...

 

Hi, been working on my first EA and it presents this problem, sometimes, the price is moving wildly and, it matches the EAs parameters to open trades (since the price is passing the same bid or ask multiple times in a matter of minutes) So, i was thinking of a way of programming the expert advisor to only place a new order if the last order opened more than for example two hours ago.


been trying to figure it out on reference via order select, but just cant get it to work, any ideas? thanks in advance

 
Luis Garcia:

Hi, been working on my first EA and it presents this problem, sometimes, the price is moving wildly and, it matches the EAs parameters to open trades (since the price is passing the same bid or ask multiple times in a matter of minutes) So, i was thinking of a way of programming the expert advisor to only place a new order if the last order opened more than for example two hours ago.


been trying to figure it out on reference via order select, but just cant get it to work, any ideas? thanks in advance

Try looping through all open orders and determine the most recent time thru OrderOpenTime()  ?
 

hi, you can use the iTime.

First step is to determine on what time frame and how many candle backwards to filter. Here we use PreviousTimeFrame and MinPreviousCandle.

Then we get the iTime value with TIME_MINUTES format and change iTime (which is datetime) to string with TimeToStr.

After that we substract the string, because we just want the hour digit, using StringSubstr.

Then we change the hour digit (which is still in string type) to Integer with StringToInteger so we can substract current time with previous time.

This is what i have in mind, didn't try yet...

The problem is when : now is 1am, 2 hour before is 11pm, so the result is -22 (1-23).. still don't know how to solve that

input int               MinPreviousCandle       = 2;
input ENUM_TIMEFRAMES   PreviousTimeFrame       = PERIOD_H1;
int wkt = 0;

//in your buy or sell criteria
if( **buy criteria*
&& StringToInteger(StringSubstr (TimeToStr (iTime (NULL,PreviousTimeFrame,0),TIME_MINUTES),0,2)) - wkt >= MinPreviousCandle ) 
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, sl, tp, comment, MagicNumber, 0, clrBlue);
wkt = StringToInteger(StringSubstr (TimeToStr (iTime (NULL,PreviousTimeFrame,0),TIME_MINUTES),0,2));
Reason: