Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 206

 
a.lxrn:

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

Как сделать так чтобы сообщение при истинном условии выводилось один раз, то есть price>ma выводиться одно сообщение(а не плодилось), думаю поняли о чем я.

Как правильно прописать счетчик?

if(Work==false) // Критическая ошибка
     {
      if(AlertWork==false)   // Если Алерта еще не было
        {  Alert("Критическая ошибка. Эксперт не работает."); AlertWork=true; }
      return;
     }                        

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

 

Здравствуйте, подскажите, как запрограммировать пользовательский индикатор, чтобы лишние линии (буфера) не отображались при прикреплении индикатора к графику?


 
Alexey Kazmin:

Здравствуйте, подскажите, как запрограммировать пользовательский индикатор, чтобы лишние линии (буфера) не отображались при прикреплении индикатора к графику?


используйте эти свойства

#property indicator_buffers 5
#property indicator_plots   1
 
Vitaly Muzichenko:


Странные вещи. Вчера и сегодня не работала отправка, а только что заработала и отправилось письмо. При этом вообще ничего не менял и не перестраивал.

 
Igor Makanu:

используйте эти свойства

Спасибо, попробую

 
Что-то я запутался с графическими объектами, не могу понять, как получить X Y координаты High[0] в пикселях от  CORNER_RIGHT_UPPER? Какие будут функции для расчета int Х и int Y?
 
Valeriy Yastremskiy:

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

   if(sizeBar && maxmin)
     {
      
                   while(true)
                   {
                         int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 5, sl, tp);
                         if(ticket>0) break;                        
                   }      
             
     }

так и не понял

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

это условие будет истинным на протяжении долгого времени, и при каждой итерации будут открываться по данному коду ордера

как сделать так чтобы открылся один ордер по этому условию и все?

 
a.lxrn:

так и не понял

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

это условие будет истинным на протяжении долгого времени, и при каждой итерации будут открываться по данному коду ордера

как сделать так чтобы открылся один ордер по этому условию и все?

Если условие открытия ордера истина И флаг открытия ордера ложь то открываем ордер и присваиваем  флагу открытия ордера значение истина.
 
a.lxrn:

так и не понял

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

это условие будет истинным на протяжении долгого времени, и при каждой итерации будут открываться по данному коду ордера

как сделать так чтобы открылся один ордер по этому условию и все?

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

OrderDelete 

Прошу помощи найти ошибку в коде. Ни компилятор ни тестер не выдает ошибки но лимитки не удаляются...

void OnTick()
            
      if (Low[1] < val2 && BUY() == 0 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)

      {
      
      SL = NormalizeDouble(Ask - StopLoss*Point, 5);
      TP = NormalizeDouble(Ask + TakeProfit*Point, 5); 
          
      ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, "EU buy", Magic, 0, Red);
      
      if(ticket<0)
         Print("Не удалось открыть ордер");
      }
            
      {
      if (BUY() == 1 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price1 - StopLoss1*Point, 5);
      TP = NormalizeDouble(price1 + TakeProfit1*Point, 5); 
     
      ticket1 = OrderSend(Symbol(), OP_BUYLIMIT, Lots1, price1, 3, SL, TP, "EU buy", Magic1, 0, Red);
      

            {
            if (BUY() == 0 && BUYLIMIT1() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic1)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }
      
      {
      if (BUYLIMIT1() == 1 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price2 - StopLoss2*Point, 5);
      TP = NormalizeDouble(price2 + TakeProfit2*Point, 5); 

      ticket2 = OrderSend(Symbol(), OP_BUYLIMIT, Lots2, price2, 3, SL, TP, "GU buy", Magic2, 0, Red);
      

            {
            if (BUY1() == 0 && BUYLIMIT2() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic2)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }     
      
                               
}


//+------------------------------------------------------------------+
int BUY()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic &&
         OrderType() == OP_BUY)
         {
         count++;
         }

     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}
Причина обращения: