I'm trying to develop an EA and so far I have this:
I'm trying to add a part where when two trades (from the same symbol) are open both the trades will have their take profits increased. So far I have this:
However, it doesn't appear to be working, any suggestions?
Thanks,
madmax3
PHP Code
//+------------------------------------------------------------------+
//| TimeBasedEA.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
//changed by: "[email protected]"
//changed again by: madmax3
// Time frame: M5 and higher
extern int MagicNumber = 20080122;
extern double DistancefromAsk;
extern double DistancefromBid;
extern double TakeProfit = 28;
extern double StopLoss = 55;
extern double Lots = 0.1;
extern int StartHour = 2300; // Open Trade time
extern bool OpenBuy = true;
extern bool OpenSell = true;
extern int NumBuys = 1;
extern int NumSells = 1;
extern int Slippage = 2;
//+------------------------------------------------------------------+
//| S T A R T |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;
if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); }
int ct;
//-------------------------------------+
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
//-------------------------------------+
//-------------------------------------+
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
//-------------------------------------+
ct = Hour() * 100 + Minute();
total=OrdersTotal();
if(total<1)
{
// no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// check for long position (BUY) possibility
if(ct == StartHour && Close[1]>Open[1] && OpenBuy)
//if(ct == StartHour && High[1]<Open[0] && OpenBuy)
{
for ( cnt = 0; cnt < NumBuys; cnt++)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+(DistancefromAsk*Point),Slippage,Bid-(StopLoss*Point),Ask+(TakeProfit*Point),"",MagicNumber,TimeCurrent()+39600,CLR_NONE);
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-(DistancefromBid*Point),Slippage,Ask+(StopLoss*Point),Bid-(TakeProfit*Point),"",MagicNumber,TimeCurrent()+39600,CLR_NONE);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
}
return;
}
// check for short position (SELL) possibility
if(ct == StartHour && Close[1]<Open[1] && OpenSell)
//if(ct == StartHour && Low[1]>Open[0] && OpenSell)
{
for ( cnt = 0; cnt < NumSells; cnt++)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-(DistancefromAsk*Point),Slippage,Ask+(StopLoss*Point),Bid-(TakeProfit*Point),"",MagicNumber,TimeCurrent()+39600,CLR_NONE);
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+(DistancefromBid*Point),Slippage,Bid-(StopLoss*Point),Ask+(TakeProfit*Point),"",MagicNumber,TimeCurrent()+39600,CLR_NONE);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
}
return;
}
if(total>1)
if(OrderType()==OP_BUY)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if(OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit-20)*Point),0,Blue);
}
return(0);
}
void CloseAll()
{
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber()!=MagicNumber) continue;
//
//
//
//
//
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for(int c=0; c<3; c++)
{
RefreshRates();
if (OrderType()==OP_BUY)
{ double cp = Bid;}
else { cp = Ask;}
OrderClose(OrderTicket(),OrderLots(),cp,0,Yellow);
int err=GetLastError();
if(err==4 || err==136 || err==137 || err==138 || err==146)
{
Sleep(5000); continue;
}
break;
}
break;
}
}
}
// the end.
PHP Code
if(total>1)
if(OrderType()==OP_BUY)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if(OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit-20)*Point),0,Blue);
Thanks,
madmax3