Need help with coding

To add comments, please log in or register
eric79
308
eric79  

Hi

i am trying to code a very simple EA but i'm not a programmer and i've never made an EA before.

I took the MACD Sample from MT4 and edited some parts and deleted all the rest that i thought i don't need.

I'm sure my code is really horrible

I would like the EA to work like this:

My custom indicator ELine has two lines that move in steps. Sometimes one is higher than the other, sometimes they are the same.

When one line crosses the other i would like the EA to enter a long position or a short position, depending on which line crosses up.

There is always an open position, except on start of the EA.

When i try to compile it it says "if" - semicolon expected (20,7)

Then in the next step it should always close an already existing position when it opens a new one but i couldn't code this so far.

Could somebody please correct the errors in my code and maybe tell me how i can close the positions any time the EA enters a new one?

Thanks a lot!

Files:
el1.mq4 2 kb
eric79
308
eric79  

Hi

I have now solved this problem. I could compile the EA and tried to backtest it. But unfortunately it does not buy or sell anything !

Apart from this it seems to work, this is the journal:

14:16:18 EL1 inputs: Lots=0.1; Timeframe=240;

14:16:18 ELine GBPUSD,H4: removed

14:16:18 2005.11.14 00:00 ELine GBPUSD,H4: loaded successfully

And this is the EA Code:

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

//| T1.mq4

//|

//|

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

extern double Lots = 0.1;

extern int Timeframe = 240;

string strDirCurrent="none";

string strDirPrevious="none";

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

//| |

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

int start()

{

// check for current direction

if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))

strDirCurrent="long";

if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))

strDirCurrent="short";

// compare to previous direction and open a position if there was a change

if(strDirCurrent=="long" && strDirPrevious=="short")

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200,"EABuyOrder",16384,0,Green);

if(strDirCurrent=="short" && strDirPrevious=="long")

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200,"EASellOrder",16384,0,Red);

strDirPrevious=strDirCurrent;

}

// the end.

Any help is very much welcome !!

Thanks

Eric

MJurban
11
MJurban  

Hi,

when i change NUL L in NULL , i dont get any errors from the copilation

MJurban
11
MJurban  

if you look in the development-course on this board, youll find "My_First_EA", a codind with crossing MAs

I could not get any result testing your EA and I'm very new on EA-Proramming too. Sorry

eric79
308
eric79  

Thank you balue. The space in NULL ist only from copy and paste, in my code it is written correctly. And it does compile (the second version).

I know the MQL course (even though i'm not through all of it yet).

I have written a similar EA for ADX to test and there it works. Only when i try to use my custom indicator it does not trade..

newoptionz
645
newoptionz  

Please attach your indicator - so we can do backtesting

Hi

Great code - I would love to backtest it - please give us your icustom Eline.

I modified your code extensively.

/*

* Created by SharpDevelop.

* User: CARDIO

* Date: 1/17/2006

* Time: 4:55 AM

*

*Todo: if there is an ope position - close it- then open in opposite direction.

*

*/

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

//| T1.mq4

//|

//|

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

#include

extern double Lots = 0.1;

extern int Timeframe = 240;

string strDirCurrent="none";

string strDirPrevious="none";

int cnt, magicEA;

bool isclosing = false;

double slippage = 3;

int init() {

return(0);

}

int deinit() {

return(0);

}

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

//| |

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

int start()

{

magicEA = 16384;

// check for current direction

if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))

{

strDirCurrent="long";

}

if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))

{strDirCurrent="short";

}

// compare to previous direction and open a position if there was a change

if(strDirCurrent=="long" && strDirPrevious=="short")

{

//firs close open positions

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);

return(0);

}

if(strDirCurrent=="short" && strDirPrevious=="long")

{

isclosing = true;

isclosing1();

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);

return(0);

}

strDirPrevious=strDirCurrent;

return(0);

}

// the end.

void isclosing1(){

//Close all open orders

//todo: get a requote on the prices if error 138 occurs, use refreshrates

//todo: check if the last 3 closes where losers - if so stop the ea

int totalOrders = OrdersTotal();

int numPos = 0;

for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...

OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders

if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA

numPos++;

if(OrderType() == OP_BUY) { // Check for close signal for bought trade

if(isclosing) {

if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade

//writetofile("10","Closed buy", OrderTicket());

//prtAlert("Day Trading: Closing BUY order");

} else {

// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));

}

}

} else { // Check sold trade for close signal

if(isclosing) {

OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);

//writetofile("10","Closed buy", OrderTicket());

// prtAlert("Day Trading: Closing SELL order");

}else {

//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));

}

}

}

}

}

newoptionz
645
newoptionz  

Fixed, I hope

Fixed hassles. Try this

We still have to work on money management etc.

Files:
el1.mq4 4 kb
eric79
308
eric79  

Thanks, now i get this:

2006.01.17 18:59:10 2006.01.12 08:20 EL1: invalid double number as parameter 7 for OrderSend function

2006.01.17 18:59:10 2006.01.12 08:10 EL1: comment for OrderSend function must be a string

2006.01.17 18:59:09 EL1: loaded successfully

and the error repeats about a million times ;-)

but i think this one is easy to fix.

newoptionz
645
newoptionz  

Try this

I am not testing the code - if you give the indicator - i will test - actually I will test it pretty soon with another indicator. Still hope this helps.

Files:
el1_1.mq4 5 kb
newoptionz
645
newoptionz  

still trying to fix - just hold on I will post now

Still fixing

newoptionz
645
newoptionz  

Fixed - hopefully

You were just missing a take profit (tp) value actually.

Don't u want a tp and a stoploss?

Good luck

Files:
el1_2.mq4 5 kb
To add comments, please log in or register