Download MetaTrader 5
To add comments, please log in or register
Have you found a good programmer? Make a targeted order!
amando
419
amando 2016.12.01 21:27 

Hello,

 

i have a problem with an oder send function, BuyStop is working, Sell Stop is nothing

 i Use für tp2 the value 200, for Stop 2 the Value 200 and for Distanz2 values between -200 and + 200

even i do not get any error code


any idea?

 

amado 

 

void StoppOrder()
  {

   double SLOrder,TPOrder;
   string LS=ObjectGetString(0,"Lot",OBJPROP_TEXT,0);
   double LS1=StringToDouble(LS);
   string Stop1= ObjectGetString(0,"Stopp",OBJPROP_TEXT,0);
   int    Stop2= StringToInteger(Stop1);
   string tp1= ObjectGetString(0,"TP1",OBJPROP_TEXT,0);
   int    tp2= StringToInteger(tp1);
   Print("Stop1 ",Stop1," TP1 ",tp1);
   string Distanz1= ObjectGetString(0,"StopOrder",OBJPROP_TEXT,0);
   double Distanz2= StringToDouble(Distanz1);
   ENUM_ORDER_TYPE OrderType;

   double Open;
   if(Distanz2 > 0 ) {OrderType = ORDER_TYPE_BUY_STOP; Open = Ask()+ Distanz2 * _Point; SLOrder = Open - (Stop2*_Point); TPOrder = Open + (tp2*_Point);}
   if(Distanz2 < 0 ) {OrderType = ORDER_TYPE_SELL_STOP; Open = Bid()- Distanz2 * _Point;SLOrder = Open + (Stop2*_Point); TPOrder = Open - (tp2*_Point);}
   if(MathAbs(Distanz2)<StopLevel()) Print("No Stop Order possible, to less distance, You are in Stoplevel");
   if(Distanz2 == 0) Print("Zero Distance is not possible, Increase distance");

   Print(_Symbol," Type ",OrderType," Lot ",LS1," Open ",Open," SL ",SLOrder," TP ",TPOrder);
   PendingOpen(_Symbol,OrderType,LS1,Open,SLOrder,TPOrder,MN,Text);


  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool PendingOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,
                 const double OrderPrice,const double sl,const double tp,const int magic,  const string comment)
  {
   MqlTradeRequest neueOrder={0};
   MqlTradeResult result={0};
//--- setting request
   neueOrder.symbol       = symbol;
   neueOrder.type         = order_type;
   neueOrder.action       = TRADE_ACTION_PENDING;
   neueOrder.type_filling = ORDER_FILLING_FOK;
   neueOrder.type_time    = ORDER_TIME_GTC;
   neueOrder.volume       = volume;
   neueOrder.price        = OrderPrice;
   neueOrder.sl           = sl;
   neueOrder.tp           = tp;
   neueOrder.magic        = magic;
   neueOrder.comment      = comment;
   neueOrder.expiration   = ORDER_TIME_SPECIFIED_DAY;


//--- action and return the result
   return(OrderSend(neueOrder,result));

   if(!OrderSend(neueOrder,result))
      PrintFormat("OrderSend error %d",GetLastError());                 // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen
//--- Details zur Transaktion
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
  }
Alain Verleyen
Moderator
29606
Alain Verleyen 2016.12.01 22:02  
//--- action and return the result
   return(OrderSend(neueOrder,result));

   if(!OrderSend(neueOrder,result))
      PrintFormat("OrderSend error %d",GetLastError());                 // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen
//--- Details zur Transaktion
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

You "return" there, so of course the remaining code is never executed.

Fix it and see what will be printed as information. Also report the result of the print in your StoppOrder() function.

amando
419
amando 2016.12.02 08:41  

Hello Alain,

 

the interresting thing is,

why is the order executed when i will send a buy oder and not when i will send a short order?

 

how you mean i should fix the return function, do you mean

 

OrderSend(neueOrder,result));

 

amando 

Roberto Jacobs
45619
Roberto Jacobs 2016.12.03 06:56  
amando:

Hello Alain,

 

the interresting thing is,

why is the order executed when i will send a buy oder and not when i will send a short order?

 

how you mean i should fix the return function, do you mean

 

OrderSend(neueOrder,result));

 

amando 

//--- action and return the result
   //   Alain intent : REMOVE this code ===> //return(OrderSend(neueOrder,result)); ==== and the program will run smoothly

   if(!OrderSend(neueOrder,result))
      PrintFormat("OrderSend error %d",GetLastError());                 // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen
//--- Details zur Transaktion
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
amando
419
amando 2016.12.03 14:10  

found it out, 

in a bool

 

bool PendingOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,
                 const double OrderPrice,const double sl,const double tp,const int magic,  const string comment)
  {
   MqlTradeRequest neueOrder={0};
   MqlTradeResult result={0};
//--- setting request
   neueOrder.symbol       = symbol;
   neueOrder.type         = order_type;
   neueOrder.action       = TRADE_ACTION_PENDING;
   neueOrder.type_filling = ORDER_FILLING_FOK;
   neueOrder.type_time    = ORDER_TIME_GTC;
   neueOrder.volume       = volume;
   neueOrder.price        = OrderPrice;
   neueOrder.sl           = sl;
   neueOrder.tp           = tp;
   neueOrder.magic        = magic;
   neueOrder.comment      = comment;
   neueOrder.expiration   = ORDER_TIME_SPECIFIED_DAY;


//--- action and return the result
   return(OrderSend(neueOrder,result));

   if(!OrderSend(neueOrder,result))
      PrintFormat("OrderSend error %d",GetLastError());                 // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen
//--- Details zur Transaktion
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
  }


 you have to use a return, bcs a bool need an return code

 

i changed it to a void and delete the return line and now it works

/
To add comments, please log in or register