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

 
ребята подскажите пожалуйста, что с тестером случилось. показывает вместо свечей только цены открытия в режиме "Все тики, наиболее точный метод" и в других режимах тоже.
МТ4 Бэттэр вольюм тоже неадекватен в тестере
Файлы:
 

Подскажите пожалуйста, почему открывает на каждом тике ?

void OnTick()
  {
   Alert(Sborinfo(Magic));
   if(Sborinfo(Magic)<=0)
     {
      MassivPrice(step); 
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,NULL,0,0,Blue);
      if(tiket>=0
         LastPrice=Ask
      else LastPrice=-1
     }
   MassivPrice(step);
   tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
   else LastPrice=-1;
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      Print("колличество ордеров ",kol);
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
         kol++;
     }
   Print("новые ордера ",kol);
   return(kol);
  }
 
Ibragim Dzhanaev:

Подскажите пожалуйста, почему открывает на каждом тике ?

потому что я всегда тестировал в этом режиме

void OnTick()
  {
   Alert(Sborinfo(Magic));
   if(Sborinfo(Magic)<=0)
     {
      MassivPrice(step); 
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,0,0,NULL,0,0,Blue);
      if(tiket>=0
         LastPrice=Ask
      else LastPrice=-1
     }
   MassivPrice(step);
   tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,0,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
   else LastPrice=-1;
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      Print("колличество ордеров ",kol);
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==magic)
         kol++;
     }
   Print("новые ордера ",kol);
   return(kol);
  }
Файлы:
 
Ibragim Dzhanaev:

Подскажите пожалуйста, почему открывает на каждом тике ?

Потому что код так написан.

 Упрощенно алгоритм ваш выглядит так: если ордеров нет, открыть Бай, а на каждом тике - открывать Селл.

 
Vitalie Postolache:

Потому что код так написан.

 Упрощенно алгоритм ваш выглядит так: если ордеров нет, открыть Бай, а на каждом тике - открывать Селл.

Как код изменить, чтобы работал без дополнительных условий ?
Alert(Sborinfo(Magic));
  // Closse(Magic);
   if(Sborinfo(Magic)==0)
     {
     Print("количество ордеров ",Sborinfo(Magic));
      MassivPrice(step);
      if(OrdersTotal()<2)// без таких условий
         tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,slippage,0,0,NULL,0,0,Green);
      if(tiket>=0)
         LastPrice=Ask;  
     }

   MassivPrice(step);
   if(OrdersTotal()<2)// без таких условий
      tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,slippage,0,0,NULL,0,0,Red);
   if(tiket>=0)
      LastPrice=Bid;
  
  }
//+------------------------------------------------------------------+
int Sborinfo(int magic)
  {
  kol=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
     Print(" чему ровно кол " , kol );
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic)
      {
      Print(" ордера после " , kol );
      
        // kol++;
         }
     }
   return(kol);
  }
 
Ibragim Dzhanaev:
Как код изменить, чтобы работал без дополнительных условий ?

А никак, если нужно и бай, и селл да ещё и ограничивать их количество. Только я бы не смотрел на OrdersTotal(), а считал бы сколько сейчас в рынке конкретно бай и сколько селл.

 И опять же, зачем вам это "if(Sborinfo(Magic)==0)", если потом используете OrdersTotal()???

 
Vitalie Postolache:

А никак, если нужно и бай, и селл да ещё и ограничивать их количество. Только я бы не смотрел на OrdersTotal(), а считал бы сколько сейчас в рынке конкретно бай и сколько селл.

 И опять же, зачем вам это "if(Sborinfo(Magic)==0)", если потом используете OrdersTotal()???

Вы имеете ввиду, вот так ? А есть другие варианты - проще ?
{
  CloseFirst(Magic);
   int b=0;
   int s=0;
   for(int i=0; i<=OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol )
        {
         if(OrderType()==OP_BUY)
            b++;
         if(OrderType()==OP_SELL)
            s++;
        }
   if(b==0)
      tiket=OrderSend(Symbol(),OP_BUY,0.01,Ask,slippage,0,0,NULL,Magic,0,Green);
  if(s==0)
      tiket=OrderSend(Symbol(),OP_SELL,0.01,Bid,slippage,0,0,NULL,Magic,0,Red);
      }
 

Товарищи! У меня к вам вопрос.
Эксперт открывает отложки с начала дня в 00:00 по экстремумам предыдущего дня.

В будни, всё работает отлично, но с открытием понедельника, отложки ставятся не по экстремумам пятницы, а почему-то по уровням четверга. Как так?  

OpenTime="00:00";
currtime=TimeToStr(TimeCurrent(),TIME_MINUTES);
Format=Digits();
DH=NormalizeDouble(iHigh(NULL,PERIOD_D1,1),Format) ;
DL=NormalizeDouble(iLow(NULL,PERIOD_D1,1),Format);
if (currtime==OpenTime)
{
отложки
}
 
Ibragim Dzhanaev:
Вы имеете ввиду, вот так ? А есть другие варианты - проще ?

Да, примерно так. Куда уж проще? 

 
Vitalie Postolache:

Да, примерно так. Куда уж проще? 

Вы случайно не знаете уроки по массивам ? Если знаете скиньте пожалуйста ссылку.