please assist me to set the stoploss

 

//+------------------------------------------------------------------+
//| warrenmac.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"

//---- input parameters
extern double TakeProfit=50.0;
extern double Lots=0.1;
extern double TrailingStop=30.0;
extern double MACDOpenLevel=3.0;
extern double MACDCloseLevel=2.0;
extern double MATrendPeriod=26.0;
extern double StopLoss=30.0;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
double MacdCurrent, MacdPrevious, SignalCurrent;
double SignalPrevious, MaCurrent, MaPrevious;
int cnt,ticket,Stoploss, total;

if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}




// to simplify the coding and speed up access
// data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1)


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(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,Ask-stopLoss*Point,"Macd sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}

{
if(OrderSelect(ticket,SELECT_BY_POS)==true)
Print("Stop loss value for the order 10 ", OrderStopLoss());
else
Print("OrderSelect failed error code is",GetLastError());
}
return(0)

// check for short position (SELL) possibility
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,Bid+StopLoss*Point,"macd sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}

{if(OrderSelect(ticket,SELECT_BY_POS)==true)
Print("Stop loss value for the order 10 ", OrderStopLoss());
else
Print("OrderSelect failed error code is",GetLastError());

return(0);
}

for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);







}
}
}
}
else // go to short position
{
// should it be closed?
if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);



}
}
}
}
}
}
return(0);
}
// the end.

 
What is the problem with the stoploss? Do u get errors or what? Give more info.
 
Don't paste code, use the SRC button
for(cnt=0;cnt<total;cnt++) {
  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
  if(OrderType()<=OP_SELL && // check for opened position
  OrderSymbol()==Symbol()) { // check for symbol
     if(OrderType()==OP_BUY) {// long position is opened
        // should it be closed?
        if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
        MacdCurrent>(MACDCloseLevel*Point)) {
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
           return(0); // exit
        }
      // check for trailing stop
      if(TrailingStop>0){
         if(Bid-OrderOpenPrice()>Point*TrailingStop){
            if(OrderStopLoss()<Bid-Point*TrailingStop){
              OrderModify(OrderTicket(), OrderOpenPrice(), 
                          Bid-Point*TrailingStop, 
                          OrderTakeProfit(), 0, Green);
              return(0);
}  }  }  }  }

If you open only one order at a time then the above would work (although you should be checking the magic number also.

If you open multiple, and removed the return(0) the code breaks. Closing an order renumbers all higher orders. Use

for(cnt=total-1; cnt>=0; cnt--) if (
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)
&& OrderMagicNumber() == MagicNumber
&& OrderMagic()       == Symbol() ) {
 /*...*/OrderClose(...)
}

What is TrailingStop. If it is in pips (E.G. 15) and you are on a five digit broker, you are getting 1.5 pips. Likewise the slippage (3). You must either adjust your values each time you change brokers or have the EA just them:

//++++ These are adjusted for 5 digit brokers.
double	pips2points,	// slippage	 3 pips	   3=points	   30=points
	pips2dbl;	// Stoploss 15 pips	   0.0015	   0.00150
int	Digits.pips;	// DoubleToStr(dbl/pips2dbl, Digits.pips)
int init() {
	if (Digits == 3 || Digits == 5) {	// Adjust for five (5) digit brokers.
		pips2dbl	= Point*10;	pips2points = 10;	Digits.pips = 1;
	} else {pips2dbl	= Point;	pips2points =  1;	Digits.pips = 0;
	}
//...

OrderLots(),Bid,3*pips2points,Violet
Bid-pips2points*TrailingStop
 
gordon wrote >>
What is the problem with the stoploss? Do u get errors or what? Give more info.

I am getting the error "stoploss variable not defined". Thanks for your help in advance.

 

Hey,

you are getting this error because you never defined "stoploss" variable. You defined "StopLoss". Please note in MQL4 names are case sensitive meaning that "stoploss" and "StopLoss" are two different names...

thank you

Automated (automatedfx@gmail.com)

--
http://www.forexmosaic.com/ - free publishing, analyzing and portfolio building service