Trailing Stops and Trailing Profit - page 6

412

deVries:

OrderComment can be overwritten by your broker

you are wanting... Now, as per my requirement, when the price would be say 7 pip [103.603] in profit, the Stop Loss of

1st and 2nd trade will become say 1 pip profit [103.543] and 3rd trade's Stop Loss will remain at 103.386.

make extern int BreakEven = 7

(* 10 ) correction at 5 digit broker to get pipvalue

ohh, Yes, this is certainly a Shortcoming. All my hard work since evening gone into vain now!

Tried a way to distinguish the trades depending on 'order comment' function and wrote a code.

Anyway, your given code will do the moving of Stop Loss part to BE or at desired point but still my problem with the 'Third' trade isn't solving.

I have also this BE moving part of code but I got stuck with the Non-moving SL for third trade.

Just got another idea, trying it now.

string comment_sell="Sell Order";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

if (OrderComment()=="comment_sell") // ?

412

Is this Valid?

Say I have attached the EA to EURUSD chart.

if (Order_Symbol()==EURUSD)

Will it compare whether the current chart is of EURUSD or not?

412

Here is a way of distinguishing orders via 'Magic Number' I though.

Braces are not Balanced.

Is this Possible?

```if (Order_Symbol==EURUSD)
{
int Magic_Number_3=1303
int Magic_Number_2=1302
int Magic_Number_1=1301
}
if (Order_Symbol==GBPUSD)
{
int Magic_Number_3=1603
int Magic_Number_2=1602
int Magic_Number_1=1601
}
if (Order_Symbol==GBPUSD)
{
int Magic_Number_3=8703
int Magic_Number_2=8702
int Magic_Number_1=8701
}

if (count==3)
{
if (BuyOrder_1>0) //Checking if the order was opened or not
{
count = count - 1;
}
else
{
iLastError = GetLastError();
}
}

if (count==2)
{
{
count = count - 1;
}
else {
iLastError = GetLastError();
}
}

if (count==1)
{
{
count = count - 1;
}
else {
iLastError = GetLastError();
}
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

for(cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic_Number_3)

{

sl     = OrderStopLoss(); // Stop Loss.

tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss.

{

&& tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits))

{

tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);

ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);

if (ticket > 0)

{

Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid);

}

else{

iLastError = GetLastError();

}

}//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){

if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic_Number_2)

{

sl     = OrderStopLoss(); // Stop Loss.

tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss.

{

&& tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits))

{

tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);

ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);

if (ticket > 0)

{

Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid);

}

else{

iLastError = GetLastError();

}

}//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){

if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic_Number_1)

{

sl     = OrderStopLoss(); // Stop Loss.

tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss.

{

ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);

if (ticket > 0)

{

Print ("Stop Loss Unchanged");

}

else{

iLastError = GetLastError();

}

}//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){

6754

```if (Order_Symbol== "EURUSD") //it has to be a string if you do it this way
{                              //==EURUSD)  fails
int Magic_Number_3=1303
int Magic_Number_2=1302
int Magic_Number_1=1301
}
```

this way you have to look for 3 different magicnumbers

it looks to me possible to do

412

Ok, after a Continuous Hard Working Spell (at least for me), made the EA 'Error Free'!

Posting the changes in short:

```extern string    Order_Symbol="EURUSD";

int init()
{

}

int start()
{
int Magic_Number_1,Magic_Number_2,Magic_Number_3;
bool bOrderClosed;

//////////////////////////////////////SETTING MAGIC NUMBER///////////////////////////////////////////////////

Set_Magic_Number();

//////////////////////////////////////SETTING MAGIC NUMBER COMPLETED/////////////////////////////////////////

//////////////////////////////////////LOCKING MINIMUM PROFIT/////////////////////////////////////////////////

if(OrdersTotal()>0)
{
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
//-----------------------------------------------------------------------------------------------------------------------

if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)
{
if (OrderProfit()<0.03)
{
{
if(bOrderClosed)
{
}
else {
iLastError = GetLastError();
}//end else if(bOrderClosed)
//==========================================================================================================================
if(OrderType()==OP_SELL)
{
bOrderClosed = closeSellOrder(iOrderType_Sell); //Closing Sell order
if(bOrderClosed)
{
Print("Sell Order 1 Closed");
}
else{
iLastError = GetLastError();
}//end else if(bOrderClosed)
}//end if(OrderType()==OP_SELL)
}// if (OrderProfit()<0.03)
}// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)
//-------------------------------------------------------------------------------------------------------------------------
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2)
{
if (OrderProfit()<0.02)
{
{
if(bOrderClosed)
{
}
else{
iLastError = GetLastError();
}//end else if(bOrderClosed)
//==========================================================================================================================
if(OrderType()==OP_SELL)
{
bOrderClosed = closeSellOrder(iOrderType_Sell); //Closing Sell order
if(bOrderClosed)
{
Print("Sell Order 1 Closed");
}
else{
iLastError = GetLastError();
}//end else if(bOrderClosed)
}//end if(OrderType()==OP_SELL)
}// if (OrderProfit()<0.02)
}// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2)
//------------------------------------------------------------------------------------------------------------------------------
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3)
{
Print("Don't Close this Third Order");
}// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3)
//-------------------------------------------------------------------------------------------------------------------------------
} //end for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
}// if(OrdersTotal()>0)
//////////////////////////////////////MINIMUM PROFIT LOCKED//////////////////////////////////////////////////

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);

//count open sell orders.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,Symbol());

{
//Close Open Sell Positions

int count=3;
double  dTakeProfitPrice_1,dTakeProfitPrice_2,dTakeProfitPrice_3;
dStopLossPrice = NormalizeDouble(OpenPrice - StopLoss * dPip,Digits);

dTakeProfitPrice_1 = NormalizeDouble(OpenPrice + TakeProfit_1 * dPip,Digits);
dTakeProfitPrice_2 = NormalizeDouble(OpenPrice + TakeProfit_2 * dPip,Digits);
dTakeProfitPrice_3 = NormalizeDouble(OpenPrice + TakeProfit_3 * dPip,Digits);

iLastError = 0;
if (count==3)
{
if (BuyOrder_1>0) //Checking if the order was opened or not
{
count = count - 1;
}

else {
iLastError = GetLastError();

}
}
if (count==2)
{
{
count = count - 1;
}
else {
iLastError = GetLastError();
}
}
if (count==1)
{
{
count = count - 1;
}
else {
iLastError = GetLastError();
}
}
}

if (Sell condition met)
{

OpenPrice=Bid;
count=3;

double SellOrder_1,SellOrder_2,SellOrder_3;
dStopLossPrice = NormalizeDouble(OpenPrice + StopLoss * dPip,Digits);

dTakeProfitPrice_1 = NormalizeDouble(OpenPrice - TakeProfit_1 * dPip,Digits);
dTakeProfitPrice_2 = NormalizeDouble(OpenPrice - TakeProfit_2 * dPip,Digits);
dTakeProfitPrice_3 = NormalizeDouble(OpenPrice - TakeProfit_3 * dPip,Digits);

iLastError = 0;
if (count==3)
{
SellOrder_1=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice_1 , "Sell Order",Magic_Number_1, 0,Red);
if (SellOrder_1>0) //Checking if the order was opened or not
{
count = count - 1;
}
else {
iLastError = GetLastError();
}
}
if (count==2)
{
SellOrder_2=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice_2 , "Sell Order",Magic_Number_2, 0,Red);
if (SellOrder_1>0) //Checking if the order was opened or not
{
count = count - 1;
}
else {
iLastError = GetLastError();
}
}
if (count==1)
{
SellOrder_3=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice,dTakeProfitPrice_3 , "Sell Order",Magic_Number_3, 0,Red);
if (SellOrder_3>0) //Checking if the order was opened or not
{
count = count - 1;
}
else {
iLastError = GetLastError();
}
}
}
}

void TrailOrder(double Trailingstart,double Trailingstop)
{
int ticket = 0;
double tStopLoss;
int cnt;
double vPoint,vSlippage;
double sl;
int Magic_Number_1,Magic_Number_2,Magic_Number_3;
Set_Magic_Number();

if (Digits == 3 || Digits == 5)
{vPoint = Point * 10; vSlippage = Slippage * 10;}
else
{vPoint = Point; vSlippage = Slippage;}
RefreshRates();

if(OrdersTotal()>0)
{
for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)
{
sl = OrderStopLoss(); // Stop Loss.
tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss.
{
&& tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits))
{
tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);
ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);
if (ticket > 0)
{
Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid);
}
else{
iLastError = GetLastError();
}
}//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){
//-------------------------------------------------------------------------------------------------------------------------------------
```
412

```if (OrderType()==OP_SELL)
{
if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
|| (OrderStopLoss()==0))
{
ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red);
if (ticket > 0)
{
Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask);
}
else{
iLastError = GetLastError();
}
}//end if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
}//end if (OrderType()==OP_SELL)
}// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2)
{
sl = OrderStopLoss(); // Stop Loss.
tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss.
{
&& tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits))
{
tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);
ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);
if (ticket > 0)
{
Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid);
}
else{
iLastError = GetLastError();
}
}//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){
//-------------------------------------------------------------------------------------------------------------------------------------
if (OrderType()==OP_SELL)
{
if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
|| (OrderStopLoss()==0))
{
ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red);
if (ticket > 0)
{
Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask);
}
else{
iLastError = GetLastError();
}
}//end if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
}//end if (OrderType()==OP_SELL)
}// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3)
{
sl = OrderStopLoss(); // Stop Loss.
tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss.
{
ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);
if (ticket > 0)
{
Print ("Stop Loss Unchanged");
}
else{
iLastError = GetLastError();
}
//------------------------------------------------------------------------------------------------------------------------------
if (OrderType()==OP_SELL)
{
sl= OrderStopLoss(); // Stop Loss.
ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red);
if (ticket > 0)
{
Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask);
}
else{
iLastError = GetLastError();
}
}//end if (OrderType()==OP_SELL)
}// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}//end for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
}// end if(OrdersTotal()>0)
return(0);
}// end void TrailOrder(double Trailingstart,double Trailingstop)

{
bool bClosed_;
int Magic_Number_1,Magic_Number_2,Magic_Number_3;
Set_Magic_Number();
if(OrdersTotal()>0)
{
for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
{
{
//------------------------------------------------------------------------------------------------------------------------------------
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_1)
{
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits), Slippage);
}
//-------------------------------------------------------------------------------------------------------------------------------------
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_2)
{
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits), Slippage);
}
//-------------------------------------------------------------------------------------------------------------------------------------
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_3)
{
RefreshRates();
Print("Don't Close this Thrid Order");
}
//-------------------------------------------------------------------------------------------------------------------------------------
}//for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
}//if(OrdersTotal()>0)
return(bClosed_);
//==========================================================================================
bool closeSellOrder(int iSelltype)
{
bool bClosed_;
int Magic_Number_1,Magic_Number_2,Magic_Number_3;
Set_Magic_Number();
if(OrdersTotal()>0)
{
for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
{
if(iSelltype==OP_SELL && OrderType()==OP_SELL)
{
//------------------------------------------------------------------------------------------------------------------------------------
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_1)
{
RefreshRates();
}
//-------------------------------------------------------------------------------------------------------------------------------------
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_2)
{
RefreshRates();
}
//-------------------------------------------------------------------------------------------------------------------------------------
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_3)
{
RefreshRates();
Print("Don't Close this Thrid Order");
}
//-------------------------------------------------------------------------------------------------------------------------------------
}//end if(iSelltype==OP_SELL && OrderType()==OP_SELL)
}//for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
}//end if(OrdersTotal()>0)
return(bClosed_);
}//end bool closeSellOrder(int iSelltype)
//==========================================================================================

void Set_Magic_Number()
{
int Magic_Number_1,Magic_Number_2,Magic_Number_3;
if (Order_Symbol=="EURUSD")
{
Magic_Number_1=1301;
Magic_Number_2=1302;
Magic_Number_3=1303;
}

if (Order_Symbol=="GBPUSD")
{
Magic_Number_1=1601;
Magic_Number_2=1602;
Magic_Number_3=1603;
}

if (Order_Symbol=="AUDUSD")
{
Magic_Number_1=8701;
Magic_Number_2=8702;
Magic_Number_3=8703;
}
return (0);
}```

I have confusion with Set_Magic_Number() function.

Have I defined it correctly? Also while calling it in other functions, will it work correctly?

Regards

6754

Arav007:

I have confusion with Set_Magic_Number() function.

Have I defined it correctly? Also while calling it in other functions, will it work correctly?

Regards

you have to use the right symbol

412

deVries:

you have to use the right symbol

It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....

If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.

Have you reviewed my code?

The minimum profit feature is a 'Failure'.

It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!

But my aim is not like this.

I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure

that trade got closed with my desired minimum profit.

And here also I don't want that 'Third' trade to be affected by this feature.

I tried to write something like that but now it's not working.

6754

Arav007:

It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....

If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.

Have you reviewed my code?

The minimum profit feature is a 'Failure'.

It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!

But my aim is not like this.

I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure

that trade got closed with my desired minimum profit.

And here also I don't want that 'Third' trade to be affected by this feature.

I tried to write something like that but now it's not working.

You make it far too complex because you have no idea how to handle this

the more you read and try to program yourself the easier it becomes to make more complex things

but start with simple things if you start to make a program work for one trade then later you try with more trades

you have to learn a lot.

if you start picking a short simple written program and do some changes on that for testing

you might learn how that program is working

See how i would do it

```//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."

input double TakeProfit    =50;
input double Lots          =0.1;
input int    MagicNumber   =16384;
input int    TakeProfit1   = 15;
input int    TakeProfit2   = 25;
input int    TakeProfit3   = 0;
input int    StopLoss      = 100;
input double BreakEven     =10;
input double BreakEvenSL   =5;
input double TrailingStop  =30;
input double TrailingStep  =30;
input int    SlippagePips  =3;
input double MACDOpenLevel =3.0;
input double MACDCloseLevel=2;
input int    MATrendPeriod =26;

//++++ These are adjusted for 5 digit brokers.
int     pips2points;      // slippage  3 pips    3=points    30=points
double  pips2dbl;         // Stoploss 15 pips    0.015      0.0150
int     Digitspips;      // DoubleToStr(dbl/pips2dbl, Digitspips)
int     Slip;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---
if(Digits % 2 == 1)  // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
{pips2dbl = Point*10; pips2points = 10;   Digitspips = 1;}
else {pips2dbl = Point;    pips2points =  1;   Digitspips = 0;}
// OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
Slip = pips2points * SlippagePips;  //Slippage
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick(void)
{
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int    cnt,ticket,total;
//---
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external
// variables (Lots, StopLoss, TakeProfit,
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
//---
if(Bars<100)
{
Print("bars less than 100");
return;
}

//---
{
int CMD;
double SL,TP,price;
int LastError = 0;
RefreshRates();
{
if(StopLoss>0)SL= price-StopLoss*pips2dbl;
if(count==3 && TakeProfit1>0)TP= price+TakeProfit1*pips2dbl;
if(count==2 && TakeProfit2>0)TP= price+TakeProfit2*pips2dbl;
if(count==1 && TakeProfit3>0)TP= price+TakeProfit3*pips2dbl;
}
else
{
count=countsell;
CMD = OP_SELL;
price = Bid;
if(StopLoss>0)SL= price+StopLoss*pips2dbl;
if(count==3 && TakeProfit1>0)TP= price-TakeProfit1*pips2dbl;
if(count==2 && TakeProfit2>0)TP= price-TakeProfit2*pips2dbl;
if(count==1 && TakeProfit3>0)TP= price-TakeProfit3*pips2dbl;
}
ticket=OrderSend(Symbol(), CMD, Lots, price , Slip, SL, TP,"macd sample",MagicNumber,0,Green);
if (ticket>0) //Checking if the order was opened or not
{
OrderPrint();
countsell--;
}
else {
LastError = GetLastError();
if(CMD==OP_SELL)Print("Error sending sell order "+count+ ". Error code=  " + LastError);
}
}

//--- 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);
//--- it is important to enter the market correctly, but it is more important to exit it correctly...
total=0;
for(cnt = OrdersTotal()-1; cnt>=0 ; cnt--)
{
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)continue;
if(OrderType()<=OP_SELL)    // check for opened position
{
total++;
//--- long position is opened
{
//--- should it be closed?
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*pips2dbl))
{
//--- close order
OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Violet);
}
//--- check for breakeven
if(BreakEven>0)
{
if(Bid-OrderOpenPrice()>=pips2dbl*BreakEven)
{
if(OrderStopLoss()<OrderOpenPrice())
{
//--- modify order
if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
}
}
}
//--- check for trailing stop
if(TrailingStop>0)
{
if(OrderOpenPrice()<OrderStopLoss())
{
if(OrderStopLoss()<Bid-pips2dbl*(TrailingStop+TrailingStep))
{
//--- modify order
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-pips2dbl*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
else // go to short position
{
//--- should it be closed?
if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*pips2dbl))
{
//--- close order and exit
}
//--- check for breakeven
if(BreakEven>0)
{
{
if(OrderStopLoss()>OrderOpenPrice())
{
//--- modify order
if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
}
}
}
//--- check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()>OrderStopLoss())&&(OrderStopLoss()>Point))
{
{
//--- modify order
}
}
}
}
}
}

if(total<1)
{
countsell = 0;
//--- no opened orders identified
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
//--- check for long position (BUY) possibility
if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*pips2dbl) && MaCurrent>MaPrevious)
{
}
//--- check for short position (SELL) possibility
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*pips2dbl) && MaCurrent<MaPrevious)
{
countsell = 3;//we can open
}
}
//---
}
//+------------------------------------------------------------------+

```

not needed different inputs for Symbol()

3 different Magicnumbers..

6754

Arav007:

It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....

If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.

Have you reviewed my code?

The minimum profit feature is a 'Failure'.

It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!

But my aim is not like this.

I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure

that trade got closed with my desired minimum profit.

And here also I don't want that 'Third' trade to be affected by this feature.

I tried to write something like that but now it's not working.

I compiled your code 80 errors 6 warnings

mostly undeclared identifier

i need the code yours with all identifier declared

if the file is too big then attach

compile the file and check the errors you get