Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 523

 
Индикатор Envelopes в советнике ,советник сам написал  , в настройках ставлю сдвиг  (-7) .Почему советник не открывает ордера  при отрицательном сдвиге  в индикаторе Envelopes ?
 
Vagif Babaev:
Индикатор Envelopes в советнике ,советник сам написал  , в настройках ставлю сдвиг  (-7) .Почему советник не открывает ордера  при отрицательном сдвиге  в индикаторе Envelopes ?
В iEnvelopes индекс получаемого значения из индикаторного буфера должен быть не меньше сдвига, т.е. последнее значение не меньше 7.
 
demonoid123000:
Уважаемые программисты. Можете помочь? Нужно "прикрутить" к советникам(выкладываю) выставление количества открытых ордеров. Не знаю поможет ли это..Попробую обьяснить,может подскажете. Ставлю эти совы на несколько пар,а ордер открывается всего один. И когда ордер открыт на одной паре,то сигналы на другой паре не игнорируются. Заранее спасибо!

проблема в этом условии

 

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)

Вот так должно работать

//+------------------------------------------------------------------+
//|                                                    Hippo_Buy.mq4 |
//|                                                        ut_Kanada |
//|                                            albertgod1972@mail.ru |
//+------------------------------------------------------------------+
#property copyright "ut_Kanada"
#property link      "albertgod1972@mail.ru"
#property version   "1.00"
#property strict
//===================================================================+
//                          ЗАДАНЫЕ ЗНАЧЕНИЯ                         |
//===================================================================+

extern double Lot= 0.1;
extern bool Stop = true;
extern int SL = 250;
extern int TP = 500;

extern bool BU=false;        // Переменная для включения Безубытка.

extern bool Tral = true;       // Переменная для выключения трала.
extern int putr = 100;         // Включение трала при прохождении цены putr пунктов.
extern int TrailingStop = 150; // Непосредственно сам трал.

                               //*****************************************************************************************************************
//==================================================================+
//                  Переменные для программы                        |
//==================================================================+

int TekBar = -1;             // Текущий бар.
int Or;                      // Номер ордера.
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//==================================================================+

int start()
  {

//==================================================================+
//                           Индикаторы                             |
//==================================================================+

   double TA1=NormalizeDouble(iCustom(NULL,0,"Trendsignal_Alert_Buy",3,300,true,true,0,0,false,1,0,1),Digits);

//==================================================================+
//                     Условия модификации Ордеров.                 |
//==================================================================+
   if(Tral==true)
     {
      int cnt;
      for(cnt=OrdersTotal(); cnt>=0; cnt--)
        {
         Or=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()-Ask>=putr*Point)
               if(OrderStopLoss()>(Ask+Point*(TrailingStop+MarketInfo(Symbol(),MODE_SPREAD))))
                  Or=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,0);
           }

         if(OrderType()==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>=putr*Point)
               if(OrderStopLoss()<(Bid-Point*(TrailingStop+MarketInfo(Symbol(),MODE_SPREAD))))
                  Or=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,0);
           }
        }
     }

//==================================================================+
//                    Условия перевода в Безубыток.                 |
//==================================================================+  

   if(BU==true)
     {
      int cnt;
      for(cnt=OrdersTotal(); cnt>=0; cnt--)
        {
         Or=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

         if(OrderType()==OP_SELL && OrderStopLoss()>=OrderOpenPrice())
           {
            if(OrderOpenPrice()-Ask>=putr*Point)
               if(OrderStopLoss()>(Ask+Point*(TrailingStop+MarketInfo(Symbol(),MODE_SPREAD))))
                  Or=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,0);
           }

         if(OrderType()==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>=putr*Point && OrderStopLoss()<=OrderOpenPrice())
               if(OrderStopLoss()<(Bid-Point*(TrailingStop+MarketInfo(Symbol(),MODE_SPREAD))))
                  Or=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,0);
           }
        }
     }

//==================================================================+    
/*
  int q;                                             
  for(q = 1; q <= Bars; q++)
  {
   double TAq = NormalizeDouble(iCustom(NULL,0,"Trendsignal_Alert_Buy",3,300,true,true,0,0,false,1,0,q),Digits);
   if(TAq != 0)
   {
    Comment("TAq = ",TAq);
    break;
   }
  }*/
//==================================================================+
//                    Условия и Открытие Ордеров.                   |
//==================================================================+

   if(Stop==true)
     {
      if(Total_orders(_Symbol)==0)
        {
         if(TekBar==Bars)return(0);
         TekBar=Bars;
           {
            if(TA1>High[1] && TA1!=0) // Условия продажи.
               Or=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point,"000",0,0,Tomato);        // Продажа.               

            if(TA1<Low[1] && TA1!=0)
               Or=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point,"000",0,0,RoyalBlue);      // Покупка.     ;

           }
        }
     }

   if(Stop==false)
     {
      if(Total_orders(_Symbol)==0)
        {
         if(TekBar==Bars)return(0);
         TekBar=Bars;
           {
            if(TA1>High[1] && TA1!=0) // Условия продажи.
               Or=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"000",0,0,Tomato);        // Продажа.                

            if(TA1<Low[1] && TA1!=0)
               Or=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"000",0,0,RoyalBlue);      // Покупка.     
           }
        }
     }
//----   
   return(0);
  }
//+------------------------------------------------------------------+
int Total_orders(string symbol
                 //int type
                 )
  {
   int n=0;
   int total=OrdersTotal();

   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         //if(OrderType()!=type)continue;
         //if(OrderMagicNumber()!=Magic)continue;
         if(OrderSymbol()!=symbol)continue;
         n++;
        }
     }
   return(n);
  }
//+------------------------------------------------------------------+
 
angel341:
подскажите какой параметр или функцию   поможет сместить индикатор на n-пунктов в верх или вниз?
добавил параметр Shift, положительное число смещение вверх, отрицательное вниз.
Файлы:
 
Sergey Gritsay:

проблема в этом условии

 

Вот так должно работать

Не владею языком прогромирования вообще...не понимаю короче. Может вы сможете изменить эти значения?
 
demonoid123000:
Не владею языком прогромирования вообще...не понимаю короче. Может вы сможете изменить эти значения?
а где тогда взяли этот код?
 
Sergey Gritsay:
добавил параметр Shift, положительное число смещение вверх, отрицательное вниз.
большое спасибо! буду щас тестить!!!!
 

Sergey Gritsay:
добавил параметр Shift, положительное число смещение вверх, отрицательное вниз.

 

Большое спасибо! 

 
Sergey Gritsay:

он имеет ввиду что-то типа этого

Исполнение кода этой функции удаляет ордера?  Если ее вызвать в начале кода :" if(TimeCurrent()>=D'23:50')close_all();return;" то дальше программа не работает т. е. не открываются ордера, в журнале пишет "кнопка остановки нажата". Если одну эту строку удалить то все работает и открывается. Подскажите пожалуйста что не так? Я слабо разбираюсь в деталях поэтому тело функции просто скопировал.
 
toni_stark:
Исполнение кода этой функции удаляет ордера?  Если ее вызвать в начале кода :" if(TimeCurrent()>=D'23:50')close_all();return;" то дальше программа не работает т. е. не открываются ордера, в журнале пишет "кнопка остановки нажата". Если одну эту строку удалить то все работает и открывается. Подскажите пожалуйста что не так? Я слабо разбираюсь в деталях поэтому тело функции просто скопировал.
ваш код в студию, пожалуйста
Причина обращения: