[Archive!] Any rookie question, so as not to clutter up the forum. Professionals, don't pass it by. Couldn't go anywhere without you - 2. - page 525

 
I'm sorry. Can you imagine, the last addendum isn't logged?
//----
   for ( i=OrdersHistoryTotal();i>0;i--){
    OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
    if( OrderMagicNumber( )==2000 
    &&OrderSymbol()==Symbol()&&
    OrderTakeProfit( )==OrderClosePrice(        )&&wremjapomnim<OrderCloseTime( ) ||
   OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()
   &&OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )){
   Alert ("нашли MODE_HISTORY");
 for ( i=OrdersTotal();i>0;i--)  {
 Alert ("паследний цикл",i);
  OrderSelect(i-1,SELECT_BY_POS );
  if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
  || OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol())  { 
  Alert ("OrderTicket( )",OrderTicket( )); 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); 
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
   Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }}}}                              
   

Specifically, theAlert ("OrderTicket( )",OrderTicket( )) line; Which could mean that the last cycle is not completed!!!

Here's the log. Earlier, I often rewrote the code, I often encountered errors, I think4108 and 4050, now there is no error! Yeah, well, it's not working, anyway!

 

Yeah, well, I guess that's where it gets tricky.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

That's right, s... What did I do wrong in the line?


 
By golly, I don't know, a condition as a condition.
 
Dimka-novitsek:

Yeah, well, I guess that's where it gets tricky.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

That's right, s... What did I do wrong in the line?


|| is executed first, then &&
 
ilunga:
only by this point it could be a remote pending order and the result would be unusual ;)

I don't understand, it's not deleted I'm selecting here, not fashion histories. OK, no need, that's later.
 

-AAH!!! So I'll bracket both sides!!! THANK YOU!!!!!

Whew!!!

Okay, I'm gonna go take a shower. It's hot.

 
Dimka-novitsek:

I don't get it, I'm not culling the deleted ones, not the fashion histories. Ok, no need, that's later.

Let's assume we have 1 pending order to delete and we have reached the line (for ease of reading, I broke it down by operator)

OrderDelete(OrderTicket( ));
Alert ("OrderDelete-vse",  GetLastError( ) );
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse",  GetLastError( ) );
 C=0;

So, we have this order:

1) we delete it, and in doing so:

a) we are lucky and it is deleted

b) it may not be deleted because the price is too close/the server is overloaded/the Internet is down/etc. But we go ahead anyway.

2) if something goes wrong, we write it down

3) close the order (pending!!! which we deleted in the first point!!!)

result... I can't predict 100%, but it looks like another error

4) display a message about it

 
Dimka-novitsek:

Yeah, well, there's the problem.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

It's so right se... What did I messed up in the line?

Let's put it this way... So no one gets shot and you don't get ordered around... :))

Let's start in order. First, we'll find the last closed position and make sure it's closed at the take:

   int j=-1;
   datetime t;
   // Поищем в цикле последнюю закрытую позицию, которая закрылась по TakeProfit
   for (int i=0; i<OrdersHistoryTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol()!=Symbol())     continue;
         if (OrderType()>1)               continue;
         if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
            if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
               }
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
         Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         }
      }

This:

// Здесь код для закрытия всех открытых позиций (тоже в цикле)
// Здесь код для удаления всех отложенных ордеров (также в цикле)

This will be your homework... :)

 
THANK YOU!!!!!!
 
Cool writing!!!!
Reason: