Удаление отложенного ордера - страница 3

 
khorosh:
Сами функции можете найти в ветке "Полезные функции KimIV".

Ой, извините, я пропустила ваш пост. Я думала вы говорите об этом советнике https://www.mql5.com/ru/forum/138628.
Да эти функции кажутся не сложными. Спасибо. Попробую. :)
 
FAQ:


Хороший был наборчик, правда устарел уже морально, но иногда еще им пользуюсь.

А вот вешать сверху чужой копирайт, да еще и на 3 года позже издания нехорошо...

Найдите 10 отличий...

Не спорю, на код не претендую .Нашол в инете, с открытым кодом давно уж, не помню. 11 скриптов.

То-што скопировал перекомпилировал, проверил работает, нет.

 

Уменя ещё другой вопрос.
Посмотрите пожалуйста, в чем ошибка - ордер не открывается. Мне нужно проверить что нет отложеных и открытых ордеров и только тогда открыть ордера.
Я отталкивалась от этого примера.
https://book.mql4.com/ru/samples/expert

string Symb; 
int Total, Ticket, Lts; 
int start() 
 
{   
Symb=Symbol();
Total=0;
for(int i=1; i<=OrdersTotal(); i++)
{      
if (OrderSelect(i-1,SELECT_BY_POS)==true)
{ 
if (OrderSymbol()!=Symb)continue;
 if (OrderType()>1)
 {   
  return;
  }         
  Total++;
  if (Total>1)
  { 
  return;
  }         
 }  
else
   Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,0,0,"",567,0,Red); 
   Ticket=OrderSend(Symb,OP_BUYSTOP,Lts,Ask+10*Point,3,0,0,"",567,0,Green); 
    
}
  return;
  }
 
FAQ:
это еще не все, вам нужно будет запустить эту функцию, только тогда, когда у вас на графике останется только отложенный ордер, эту часть напишите самостоятельно, на основе того что я вам дал.

Чето пока не очень у меня получается - выдает ошибку для VOID
int time,i;
int TP=10;
int SL=20;
int MagickNum=567;
int Lts;
int start()
  {
if (OrdersTotal () ==0)
    OrderSend(Symbol(),OP_SELL,Lts,Bid,3,SL,TP,"",MagickNum,0,Red); 
    OrderSend(Symbol(),OP_BUYSTOP,Lts,Bid-40,3,0,0,"",MagickNum,0,Green);
    
void ClosePending(int MagickNum=0)
{
int i,time=0;
double prof;
   for(i=OrdersHistoryTotal()-1;i>=0;i--){//?????????? ??? ???????? ??????
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){//??????? ? ???????? ????? ?? ??????
         if(OrderSymbol()!=Symbol()){continue;}//?????? ?? ??????? (???? ?? ???, ?? ??????????)
         if(MagickNum!=0&&OrderMagicNumber()!=MagickNum){continue;}//?????? ?? ??????, ???? ?? ????
         if(OrderType()>1){continue;}//???????? ?????????? - ??????????
         if(OrderCloseTime()>time){//???? ????? ????????? ?? ??????? ???????? ?? ?????????? ?????
            time = OrderCloseTime();
            prof = OrderProfit();//?????????? ??????
         }
      }
   }
   if(prof<0){return;}// ???? ?????? ????????????? (?? ??) ?????? ?? ??????
   if(time==0){return;}// ???? ????? ??????????????? ???????? ?? ?????? - ?? ?????
   // ???? ??? ??????? ??????? ?????????? ? ????????? ???????????(??)
   for(i=OrdersTotal();i>=0;i--){//?????????? ??? ???????? ?????? ??????
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){//??????? ? ???????? ????? ?? ??????
         if(OrderSymbol()!=Symbol()){continue;}//?????? ?? ??????? (???? ?? ???, ?? ??????????)
         if(MagickNum!=0&&OrderMagicNumber()!=MagickNum){continue;}//?????? ?? ??????, ???? ?? ????
         if(OrderType()<2){continue;}//?? ?????????? - ??????????
         OrderDelete(OrderTicket());// ??? ??? ???????? =  ??????????, ???????.      
      }
   }
   return;
}

 

Так ордера должны открываться, если на счёте используются 4-значные котировки.

string Symb; 
int Total, Ticket;
double Lts;

int start() 
{   
 Symb=Symbol();
 Total=0;
 Lts =0.1;
 for(int i=0; i<=OrdersTotal(); i++)
 {      
  if (OrderSelect(i,SELECT_BY_POS))
     { 
      if (OrderSymbol()==Symb)
         {
          if (OrderType()<2)
             {             
              Total++;
             }  
          }    
      }
  }            
      if (Total>1)
         { 
          return;
         }               
      else
         {    
          Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,0,0,"",567,0,Red); 
          Ticket=OrderSend(Symb,OP_BUYSTOP,Lts,Ask+10*Point,3,0,0,"",567,0,Green); 
         }
  return;
}
 
khorosh:

Так ордера должны открываться, если на счёте используются 4-значные котировки.


Ух ты! Супер! Спасибо!!!
А почему это не будет работать для пятизначных котировок?
 
liana:


А почему это не будет работать для пятизначных котировок?
else
         {    
          Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,0,0,"",567,0,Red); 
          Ticket=OrderSend(Symb,OP_BUYSTOP,Lts,Ask+10*Point,3,0,0,"",567,0,Green); 
         }
Нужно учитывать минимально допустимое расстояние до отложенного ордера. При 5-тизначных котировках, то это может оказаться очень близко от текущей цены.
 

Да, я поняла. Учту на будуще.

Ещё по ходу вопросик возник. Копирую код в MetaEditor - все коментарии по-русски становятся вопросами, хотя русский в меню выбран. Как-то можно это исправить?

 
FAQ:

Почему-то предупреждает:


Function "ClosePending" is not referenced and will be removed from exp-file
Функция "ClosePending" не определена (нет ссылки) и будет удалена из exp-file


Почему так?

Причина обращения: