Download MetaTrader 5

Help: How to write simple EA to buy and sell at a specific time? - page 5

To add comments, please log in or register
omelette
784
omelette  
Bongo:
omellette,

This is forward test.

You can not back test multiple pairs, for this moment.

Maybe MT4 will allow you to do in the future.

Print screen is from former Refco (FXCM) trading platform.

Bongo

Oh, ok. It must be a pretty old forward test, as all the dates say 2004...

As for Metaquotes implementing multiple-pair backtests (ever!) - not a chance! I'll make it to the moon under my own steam before that happens... :D

FXMan77
1192
FXMan77  
lcfxtrader:
Bongo,

Do you have a grid EA for MT4 that we can test?

Lcfx

Try this EA!

FXMan77
1192
FXMan77  
omelette:
Oh, ok. It must be a pretty old forward test, as all the dates say 2004... As for Metaquotes implementing multiple-pair backtests (ever!) - not a chance! I'll make it to the moon under my own steam before that happens... :D

omelette,

we are many, many years in this business...

b.

lcfxtrader
386
lcfxtrader  
Try this EA!

Thanks Bongo! Any pointers since you be doing this for a while?

wolfe
1037
wolfe  
Bongo:
Try this EA!

Haven't studied code to find out how it ticks yet, just ran a quick back test on only 1 month with 90% quality and no mismatched chart errors. Lot size set to 0.1, everything else set to default. Yikes!

Any good settings for this?

Files:
lcfxtrader
386
lcfxtrader  

Wolfe,

Can you modify the code of grid EA if I post it here? I doesn't place buy limits.

Thanks,

Lcfx

wolfe
1037
wolfe  
lcfxtrader:
Wolfe,

Can you modify the code of grid EA if I post it here? I doesn't place buy limits.

Thanks,

Lcfx

If you're talking about GridMaster_03 I downloaded it from post#20. I haven't really looked at the code yet, been coding another project.

lcfxtrader
386
lcfxtrader  

I found this one on FF.

extern string GridName = "Grid"; // identifies the grid. allows for several co-existing grids

extern double Lots = 0.1; // Lot sizing

extern double GridSize = 10; // pips between orders - grid or mesh size

extern double GridSteps = 10; // total number of orders to place

extern double TakeProfit = 0; // number of ticks to take profit. normally is = grid size but u can override

extern double StopLoss = 0; // if u want to add a stop loss. normal grids dont use stop losses

extern double UpdateInterval = 15; // update orders every x minutes

extern bool wantLongs = true; // do we want long positions

extern bool wantShorts = true; // do we want short positions

extern bool wantBreakout = true; // do we want longs above price, shorts below price

extern bool wantCounter = false; // do we want longs below price, shorts above price

extern double LastUpdate = 0; // counter used to note time of last update

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

#property show_inputs // shows the parameters

if ( TakeProfit <= 0 ) //

{ TakeProfit = GridSize; }

//----

return(0);

}

//+------------------------------------------------------------------------+

//| tests if there is an open position or order in the region of atRate |

//| will check for longs if checkLongs is true, else will check |

//| for shorts |

//+------------------------------------------------------------------------+

bool IsPosition(double atRate, double inRange, bool checkLongs )

{

int totalorders = OrdersTotal();

for(int j=0;j<totalorders;j++) // scan all orders and positions...

{

OrderSelect(j, SELECT_BY_POS);

if ( OrderSymbol()==Symbol() && OrderComment() == GridName ) // only look if mygrid and symbol...

{ int type = OrderType();

if (MathAbs( OrderOpenPrice() - atRate) < inRange) // dont look for exact price but price proximity (less than gridsize)

{ if ( ( checkLongs && ( type == OP_BUY || type == OP_BUYLIMIT || type == OP_BUYSTOP ) ) || (!checkLongs && ( type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP ) ) )

{ return(true); }

}

}

}

return(false);

}

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//----

int i, j,k, ticket, entermode, totalorders;

bool doit;

double point, startrate, traderate;

//----

if (MathAbs(CurTime()-LastUpdate)> UpdateInterval*60) // we update the first time it is called and every UpdateInterval minutes

{

LastUpdate = CurTime();

Print("Updating");

point = MarketInfo(Symbol(),MODE_POINT);

startrate = ( Ask + point*GridSize/2 ) / point / GridSize; // round to a number of ticks divisible by GridSize

k = startrate ;

k = k * GridSize ;

startrate = k * point - GridSize*GridSteps/2*point ; // calculate the lowest entry point

double EMA34=iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0);

for( i=0;i<GridSteps;i++)

{

traderate = startrate + i*point*GridSize;

{

if (!IsPosition(traderate,point*GridSize,true) ) // test if i have no open orders close to my price: if so, put one on

{

double myStopLoss = 0;

if ( StopLoss > 0 )

{ myStopLoss = traderate-point*StopLoss ; }

if ( traderate > Ask )

{ entermode = OP_BUYSTOP; }

else

{ entermode = OP_BUYLIMIT ; }

if ( (traderate > Ask ) && (wantBreakout) || ((traderate < Ask ) && (wantCounter)) )

{ ticket=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate+point*TakeProfit,GridName,16384,0,Green); }

}

}

{

if (!IsPosition(traderate,point*GridSize,false) ) // test if i have no open orders close to my price: if so, put one on

{

myStopLoss = 0;

if ( StopLoss > 0 )

{ myStopLoss = traderate+point*StopLoss ; }

if ( traderate > Bid )

{ entermode = OP_SELLLIMIT; }

else

{ entermode = OP_SELLSTOP ; }

if ( (traderate Bid ) && (wantCounter)) )

{ ticket=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate-point*TakeProfit,GridName,16384,0,Red); }

}

}

}

}

return(0);

}

daet
150
daet  

Timebased EA

There seems to be a problem with this EA where the magic number setting does not work. I have it trading over mutipal pairs with different magic numbers but only one trade is taken on one pair. Can someone help..?

omelette
784
omelette  
wolfe:
Haven't studied code to find out how it ticks yet, just ran a quick back test on only 1 month with 90% quality and no mismatched chart errors. Lot size set to 0.1, everything else set to default. Yikes! Any good settings for this?

Neither have I bothered looking at the code, but if this EA does use correllation, then (reliable) backtesting should not even be possible...

To add comments, please log in or register