Скачать MetaTrader 5

Удалить отложенный ордер по времени!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Aibek Mugiynov
4576
Aibek Mugiynov  
Ребята, помогите! Нужен код, чтобы удалить не сработавший отложенный ордер по истечении времени! К примеру советник открыл отложенный ордер, но если в течении часа ордер не сработал, то советник должен удалить её! Код для МТ4 нужен)
Oksana Berenko
2735
Oksana Berenko  
Aibek Mugiynov:
Ребята, помогите! Нужен код, чтобы удалить не сработавший отложенный ордер по истечении времени! К примеру советник открыл отложенный ордер, но если в течении часа ордер не сработал, то советник должен удалить её! Код для МТ4 нужен)
Для этого есть expiration - срок истечения ордера в OrderSend
OrderSend - Документация на MQL4
  • docs.mql4.com
OrderSend - Документация на MQL4
Anton Zverev
2646
Anton Zverev  
Oksana Berenko:
Для этого есть expiration - срок истечения ордера в OrderSend
он не везде работает 
Aibek Mugiynov
4576
Aibek Mugiynov  
Oksana Berenko:
Для этого есть expiration - срок истечения ордера в OrderSend
Выходит ошибка OrderSend error 3
Eugene Myzrov
839
Eugene Myzrov  


примерно так...

   input int LIFETIME=5; // Время жизни отложенного ордера (в барах)

...


   int      nOrderType     = OrderType();
   int      nOrderTicket   = OrderTicket();
   datetime dOrderOpenTime = OrderOpenTime();
   int      nLifeTime      = iBarShift(_Symbol, PERIOD_CURRENT, dOrderOpenTime);

   if(nOrderType==OP_BUYLIMIT || nOrderType==OP_SELLLIMIT ||
      nOrderType==OP_BUYSTOP  || nOrderType==OP_SELLSTOP) {
   // Проверить время жизни отложенного ордера в барах
      if (nLifeTime>=LIFETIME) {
         if (!OrderDelete(nOrderTicket)) { // удалить ордер
            int err=GetLastError();
            Print("*** Ошибка удаления ордера #", nOrderTicket, ", код ошибки #", err);
   }  }  }

...
Aibek Mugiynov
4576
Aibek Mugiynov  
Eugene Myzrov:


примерно так.

Eugene Myzrov:


примерно так...

что-то не пашет у меня(..

Alexey Volchanskiy
20878
Alexey Volchanskiy  

Aibek Mugiynov:

что-то не пашет у меня(.. 

Это явно кусок из цикла с перебором всех ордеров, не надо его буквально вставлять

if (OrderDelete(nOrderTicket)) continue;
Eugene Myzrov
839
Eugene Myzrov  
Да, это фрагмент из цикла сопровождения ордеров. Немного поправил код, чтобы он выглядел более самостоятельно.
Eugene Myzrov
839
Eugene Myzrov  
Aibek Mugiynov: что-то не пашет у меня (..

малоинформативное утверждение, по нему ничего нельзя сказать...

Aibek Mugiynov
4576
Aibek Mugiynov  
Eugene Myzrov:

м

Eugene Myzrov:

малоинформативное утверждение, по нему ничего нельзя сказать...

//+------------------------------------------------------------------+
//|                                                      AibekuS.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Мугинов Айбек"
#property link      "aibekus92@gmail.com"
extern double   LotProc=0.1;
extern double Lot=0.1;
extern int    TP=0;
extern int    SL=0;
extern int    Tral=1000;
input double  MA_high =50;
input double  MA_low =5;
extern int    step=3000;
extern int    Magic=123;
double MaxProfit,MaxPercentTotalProfit,DrawPointBuyMax,DrawPointSellMax;  // для индюка
string gs_140 = "lblfin_";
int D;
int init()
  {D=1;
  if (Digits==5 || Digits==4)D=10;
  return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{double Lot=0;
  Trail();
   if(LotProc>0)Lot=NormalizeDouble(AccountBalance()/100*LotProc/(MarketInfo(Symbol(),MODE_TICKVALUE)*100*D),2);
   if (Lot<MarketInfo(Symbol(),MODE_MINLOT))Lot=MarketInfo(Symbol(),MODE_MINLOT);
double Lots=0;
double bsl,btp,ssl,stp;  
 if(SL!=0) {bsl=Ask-SL*Point-step*Point;ssl=Bid+SL*Point+step*Point;}
 if(TP!=0) {btp=Ask+TP*Point+step*Point;stp=Bid-TP*Point-step*Point;}
//----
double MA_L=iMA(NULL,0,MA_low,0,MODE_EMA,PRICE_CLOSE,0); 
double MA_H=iMA(NULL,0,MA_high,0,MODE_EMA,PRICE_CLOSE,0); 
if(Count()==0)
  {if(MA_L>MA_H )  OrderSend(Symbol(),4,Lot,Ask+step*Point,3,bsl,btp,"Aibek",Magic);
   if(MA_L<MA_H )  OrderSend(Symbol(),5,Lot,Bid-step*Point,3,ssl,stp,"Aibek",Magic);
}}
 //+--------------Определяем кол-во ордеров------------------------------+
int Count()
{int count=0;
 for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) count++;}
   return(count);}
 //+--------
 //--------------------------Трейлинг стоп------------------------------+
void Trail()
{for(int i=0; i<OrdersTotal(); i++)
if (OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{if(Tral!=0){
if (OrderType()==OP_BUY && Bid>MathMax(OrderOpenPrice(),OrderStopLoss())+Tral*Point)
if (!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Tral*Point,OrderTakeProfit(),0))
{}
if (OrderType()==OP_SELL && ((Ask<MathMin(OrderOpenPrice(),OrderStopLoss())-Tral*Point && 
OrderStopLoss()!=0)||(Ask<OrderOpenPrice()-Tral*Point && OrderStopLoss()==0)))
if (!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Tral*Point,OrderTakeProfit(),0))
{}}}}
Вот полный код совы... не знаю как сюда прикрутить.. 
Alexey Volchanskiy
20878
Alexey Volchanskiy  
Aibek Mugiynov:

Вы писали Aibek Mugiynovчто-то не пашет у меня (.. 

И где тут работа со временем отложенных ордеров?

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий