Вопрос к знатокам MQL4 !!! - страница 5

 

Позиция не закрывается

 

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

 

Вот есть такой скрипт

 

Добрый вечер. 

Подскажите, можно ли из индикатора вызвать окно НОВЫЙ ОРДЕР ?

Т.е. чтобы по сигналу индикатора (именно индикатора) выскакивало это окно ?

Если можно, то как ?

 
Rita писал(а) >>

Добрый вечер.

Подскажите, можно ли из индикатора вызвать окно НОВЫЙ ОРДЕР ?

Т.е. чтобы по сигналу индикатора (именно индикатора) выскакивало это окно ?

Если можно, то как ?

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

 
Благодарю.
 

Добрый день.

Пож. подскажите. Позиция в советнике закрываются по достижнии заданного профита.

Иногда нормально. Но чаще всего, - сервер внаглую  не реагирует на сигнал закрытия.

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

В журнале нет отметок никаких. Вот сама функция закрытия :

//Функция реализует закрытие позиций по текущей цене
void del(int ticket) {
   int Error;
   double _bid;
   for (int w = 0; w < 1; w++) {
      GetLastError();
      OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
//-------------------------------------
      if (OrderType() == OP_BUY) {
         RefreshRates();
         _bid = MarketInfo(OrderSymbol(), MODE_BID);
         if (!OrderClose(ticket, OrderLots(), _bid, 3, Green)) Error = GetLastError();
      }
//-------------------------------------
      if (OrderType() == OP_SELL) {
         RefreshRates();
         _bid = MarketInfo(OrderSymbol(), MODE_ASK);
         if (!OrderClose(ticket, OrderLots(), _bid, 3, Green)) Error = GetLastError();
      }
//-------------------------------------
      if (Error == 0) {  PlaySound("expert.wav");  return; }//при  нормальном закрытии  
      //  позиции, - даем сигнал "expert.wav"
      if (Error != 0) {// если произошла ошибка закрытия - сигнал и печать .
         PlaySound("timeout.wav");
         Print("Error for Close Funtion =", Error);
      }
      while (!IsTradeAllowed()) Sleep(5000);//если торг. поток занят, - ждем 5 сек
      if (Error == 146) while (IsTradeContextBusy()) Sleep(10000);
      //если нет соединения с сервером, ждем - 10 сек
   }
}

И есть ли в файлах мт4 где-ниб. отметки о сигналах советника по закрытию позиций?

 

замените конструкцию for на while таким образом, чтобы исполнялось условие "пока не будет закрыто..." - продолжать закрывать... и sleep поменьше... вам ведь СРОЧНО надо, а вы еще и ждете...

int CloseOrderExpress(int Stop)
  {
//+------------------------------------------------------------------+
//| Экстренное закрытие ордеров
//| 
//|
//+------------------------------------------------------------------+
   bool   result ;
   double price, point, bid, open, ask;
   int    cmd,error;
   // int Stop = 3;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) // выбираем первый ордер
     {
      cmd=OrderType(); // тип ордера, на покупку или на продажу
      if(cmd==OP_BUY || cmd==OP_SELL)  // проверка типа ордера
        {
         while(true)
           {
               if (OrderType()==OP_BUY)
               {
                  point=MarketInfo(OrderSymbol(),MODE_POINT);
                  if (point==0) break;
                  bid=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point);
                  open=MathRound(OrderOpenPrice()/point);
                  if (bid-open<Stop) continue;
                  result = OrderClose(OrderTicket(),OrderLots(),bid,3);         
               }
               if (OrderType()==OP_SELL)
               {
                  point=MarketInfo(OrderSymbol(),MODE_POINT);
                  if (point==0) break;
                  ask=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point);
                  open=MathRound(OrderOpenPrice()/point);
                  if (open-ask<Stop) continue;
                  result = OrderClose (OrderTicket(),OrderLots(),ask*point,3);
                }
            if(result!=TRUE)
             { 
             error=GetLastError(); Print("LastError = ",error); 
             }
            else error=0;
            if(error==135) RefreshRates();
            else break;

           }
        }
     }
   else
   Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
что-то вроде этого...
 
Ок. спасибо.
 
Rita писал(а) >>
Ок. спасибо.

"сигналы" Print'ом в журнал выводить можно...