Download MetaTrader 5

Reverse Positions

To add comments, please log in or register
Aftab Alam
79
Aftab Alam  

Hey everyone,

can anyone please help me? i want a function that opens a position in reverse direction as soon as SL is hit.

Marco vd Heijden
Moderator
6056
Marco vd Heijden  

You first copy the number of closed trades in the history pool.

Then you compare this value to the current value.

Wherever a new order is closed this comparison will see it.

Then you can check orderclose times to see which one is the last closed order.

And then you can check the ordertype.

Now you have all the info you need to fire a reverse order.

Yohana Parmi
3493
Yohana Parmi  
141405:

Hey everyone,

can anyone please help me? i want a function that opens a position in reverse direction as soon as SL is hit.


How about your EA use this technique :)
use stop-order, it might be easier, right?


Aftab Alam
79
Aftab Alam  

the problem is that i am newbie, i used forexAdvisorGenerator, can you help with the code? here it is

//+------------------------------------------------------------------+
//                        DO NOT DELETE THIS HEADER
//             DELETING THIS HEADER IS COPYRIGHT INFRIGMENT 
//
//                   Copyright ©2011, ForexEAdvisor.com
//                 ForexEAdvisor Strategy Builder version 0.2
//                        http://www.ForexEAdvisor.com 
//
// THIS EA CODE HAS BEEN GENERATED USING FOREXEADVISOR STRATEGY BUILDER 0.2 
// on: 9/10/2017 3:09:50 PM
// Disclaimer: This EA is provided to you "AS-IS", and ForexEAdvisor disclaims any warranty
// or liability obligations to you of any kind. 
// UNDER NO CIRCUMSTANCES WILL FOREXEADVISOR BE LIABLE TO YOU, OR ANY OTHER PERSON OR ENTITY,
// FOR ANY LOSS OF USE, REVENUE OR PROFIT, LOST OR DAMAGED DATA, OR OTHER COMMERCIAL OR
// ECONOMIC LOSS OR FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, STATUTORY, PUNITIVE,
// EXEMPLARY OR CONSEQUENTIAL DAMAGES WHATSOEVER RELATED TO YOUR USE OF THIS EA OR 
// FOREXEADVISOR STRATEGY BUILDER     
// Because software is inherently complex and may not be completely free of errors, you are 
// advised to verify this EA. Before using this EA, please read the ForexEAdvisor Strategy Builder
// license for a complete understanding of ForexEAdvisor' disclaimers.  
// USE THIS EA AT YOUR OWN RISK. 
//  
// Before adding this expert advisor to a chart, make sure there are NO
// open positions.
//                      DO NOT DELETE THIS HEADER
//             DELETING THIS HEADER IS COPYRIGHT INFRIGMENT 
//+------------------------------------------------------------------+


extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=25;
extern double TakeProfit=50;
extern int TrailingStop=15;
extern int Slippage=3;
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
  
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
     int result=0;
     if((iMFI(NULL,0,14,0)<20)) // Here is your open buy rule
     {
        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
     if((iMFI(NULL,0,14,0)>80)) // Here is your open Sell rule
     {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}
Aftab Alam
79
Aftab Alam  
Marco vd Heijden:

You first copy the number of closed trades in the history pool.

Then you compare this value to the current value.

Wherever a new order is closed this comparison will see it.

Then you can check orderclose times to see which one is the last closed order.

And then you can check the ordertype.

Now you have all the info you need to fire a reverse order.

thank you, but i was looking for code, if you can provide than i will be more thankful.
Fernando Carreiro
3868
Fernando Carreiro  
141405: thank you, but i was looking for code, if you can provide than i will be more thankful.

Making changes to your "generated" EA is not very practical because it is full of bugs. Code Generators usually produce very bad and slow code.

Since you don't know how to code, and are not able to make corrections yourself, your best alternative is to place a job request at the Freelance section and have some one code your requirements.

However, if you are serious about learning, then put aside some time (months to years) and dedicate yourself to reading the documentation, learning from examples in the CodeBase and/or reading a structured book that will help you learn step-by-step.

Yohana Parmi
3493
Yohana Parmi  
141405:

the problem is that i am newbie, i used Generator, can you help with the code? here it is


Okay, according the code in your EA, here is a sample to place sell-stop at your current buy order :

 if((iMFI(NULL,0,14,0)<20)) // Here is your open buy rule
     {
        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"141405",MagicNumber,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
         
         //--stop-order
         double price_sellstop=TheStopLoss;
         result=OrderSend(Symbol(),OP_SELLSTOP,Lots,price_sellstop,Slippage,0,0,"Forum at MQL5.com",MagicNumber,0,clrRed);
         if(result>0)
         {
           if(TakeProfit>0) TheTakeProfit=price_sellstop-TakeProfit*MyPoint;
           if(StopLoss>0) TheStopLoss=price_sellstop+StopLoss*MyPoint;
           //--
           OrderSelect(result,SELECT_BY_TICKET);
           OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
         }
        }
        return(0);
     }

Good luck.

Aftab Alam
79
Aftab Alam  
Fernando Carreiro:

Making changes to your "generated" EA is not very practical because it is full of bugs. Code Generators usually produce very bad and slow code.

Since you don't know how to code, and are not able to make corrections yourself, your best alternative is to place a job request at the Freelance section and have some one code your requirements.

However, if you are serious about learning, then put aside some time (months to years) and dedicate yourself to reading the documentation, learning from examples in the CodeBase and/or reading a structured book that will help you learn step-by-step.

Can you recommend any good book?

Aftab Alam
79
Aftab Alam  
Yohana Parmi:

Okay, according the code in your EA, here is a sample to place sell-stop at your current buy order :

Good luck.

let me try it.
Yohana Parmi
3493
Yohana Parmi  
141405:
let me try it.

thank you

Aftab Alam
79
Aftab Alam  
Yohana Parmi:

thank you

no. thank YOU. i was excited to check it.
12
To add comments, please log in or register