I have lots of error in my Risk free function .

To add comments, please log in or register
Reza nasimi
444
Reza nasimi  

Hi 
I wrote a function for set SL equal to OrderOpenPrice. 

It is working but in strategy tester  Journal I see many errors befor and even after this action .

would you please tell me whats wrong?

void RiskFree()
  {
   bool result;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(Bid>=OrderOpenPrice()+(point*BreakEvenPips) && 
               OrderStopLoss()<OrderOpenPrice())
              {
               result=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
               if(result)
                 {
                  Alert("RISK FREE DONE  ",OrderSymbol(),"Ticket #",OrderTicket());
                  Print("**************************************************  RISK FREE DONE  ",OrderSymbol(),"Ticket #",OrderTicket(),"  **************************************************");
                 }
               if(!result)
                 {
                  err=GetLastError();
                  Alert("RISK FREE FAILED ",OrderSymbol()," ticket no ",OrderTicket()," failed with error (",err);
                  Print("**************************************************  RISK FREE FAILED ",OrderSymbol()," ticket no ",OrderTicket()," failed with error (",err);
                 }
              }
           }

         if(OrderType()==OP_SELL)
           {
            if(Ask<=OrderOpenPrice() -(point*BreakEvenPips) && 
               (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0))
              {
               result=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
               if(result) Alert("RISK FREE DONE  ",OrderSymbol(),"Ticket #",OrderTicket());
               Print("**************************************************  RISK FREE DONE  ",OrderSymbol(),"Ticket #",OrderTicket(),"  **************************************************");
               if(!result)
                 {
                  err=GetLastError();
                  Alert("RISK FREE FAILED ",OrderSymbol()," ticket no ",OrderTicket()," failed with error (",err);
                  Print("**************************************************  RISK FREE FAILED ",OrderSymbol()," ticket no ",OrderTicket()," failed with error (",err);
                 }
              }
           }
        }
     }
  }


 

William Roeder
20228
William Roeder  
if(Bid>=OrderOpenPrice()+(point*BreakEvenPips) && 
What is the value of point*BreakEvenPips? You can't move stops (or pending prices) closer to the market than the minimum (MODE_STOPLEVEL * _Point.)
          Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial
Reza nasimi
444
Reza nasimi  
whroeder1:
What is the value of point*BreakEvenPips? You can't move stops (or pending prices) closer to the market than the minimum (MODE_STOPLEVEL * _Point.)
          Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial

Hi whroeder1, thanks for reply.
It seems the minimum distance between stop and price  is not the problem .
I send  complete code , 
note there is not any strategy and I'm just trying to write a riskfree function. 

input double   LOT=0.1;
input int      TakeProfit=22;     
input int      StopLoss=15;    
int         BreakEvenPips=7;
double point;
bool modified;

int err;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   point=Point;
   if((Digits==3) || (Digits==5))
     {
      point*=10;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
//
   if(OrdersTotal()==0)
     {
      int ticket=OrderSend(Symbol(),OP_BUY,LOT,Ask,3,Bid-(StopLoss*point),Bid+(TakeProfit*point),"My order",0,0,clrGreen);
      if(ticket<0)
        {
         Print("OrderSend failed with error #",GetLastError());
        }
      else
        {
         Print("************************************************ Order Placed Buy Type #1 ************************************************");
        }
     }

   RiskFree();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void RiskFree()
  {
   bool result;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(Bid>=OrderOpenPrice()+(point*BreakEvenPips) && 
               OrderStopLoss()<OrderOpenPrice() )
              {
               result=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
               if(result)
                 {
                  Alert("RISK FREE DONE  ",OrderSymbol(),"Ticket #",OrderTicket());
                  Print("**************************************************  RISK FREE DONE  ",OrderSymbol(),"Ticket #",OrderTicket(),"  **************************************************");
                 }
               if(!result)
                 {
                  err=GetLastError();
                  Alert("RISK FREE FAILED ",OrderSymbol()," ticket no ",OrderTicket()," failed with error (",err);
                  Print("**************************************************  RISK FREE FAILED ",OrderSymbol()," ticket no ",OrderTicket()," failed with error (",err);
                 }
              }
           }

         if(OrderType()==OP_SELL)
           {
            if(Ask<=OrderOpenPrice() -(point*BreakEvenPips) && 
               (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0))
              {
               result=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
               if(result) Alert("RISK FREE DONE  ",OrderSymbol(),"Ticket #",OrderTicket());
               Print("**************************************************  RISK FREE DONE  ",OrderSymbol(),"Ticket #",OrderTicket(),"  **************************************************");
               if(!result)
                 {
                  err=GetLastError();
                  Alert("RISK FREE FAILED ",OrderSymbol()," ticket no ",OrderTicket()," failed with error (",err);
                  Print("**************************************************  RISK FREE FAILED ",OrderSymbol()," ticket no ",OrderTicket()," failed with error (",err);
                 }
              }
           }
        }
     }
  }
William Roeder
20228
William Roeder  
  1.    if(OrdersTotal()==0){
    
       for(int i=OrdersTotal()-1;i>=0;i--){
          if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    Using OrdersTotal directly and/or no Magic number filtering on your OrderSelect loop means your code is incompatible with every EA (including itself on other charts and manual trading.)
              Symbol Doesn't equal Ordersymbol when another currency is added to another seperate chart . - MQL4 and MetaTrader 4 - MQL4 programming forum
              MagicNumber: "Magic" Identifier of the Order - MQL4 Articles

  2. Use the debugger or print out your variables, including _LastError and prices and find out why.
To add comments, please log in or register