Как правильно в mql4 делать не более одной ставки в одном баре.

 
У меня советник торгует больше чем надо. Мне нужно ограничить его ставки, что бы в одном баре не больше одной ставки, как это можно сделать кодом mql если можно. Спасибо за ранние.
 

можно так

         if(!NumberOfBarOpenLastPos(NULL,0,OP_BUY, Magic) == 0) 
           {//запрет неск. сделок на 1 баре

           }

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++)                                    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()==sy)                             {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op)                   {
            if (mn<0 || OrderMagicNumber()==mn)          {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }} } } } }
  return(iBarShift(sy, tf, t, True));
}

 
спасибо большое! Я знал, что здесь кто то уже оставлял такие вопросы, но искать долго, есть люди которые знают решение, спасибо еще рас.
 
int start() { int KolClosedOrders = OrdersHistoryTotal()-1; if(OrderSelect(KolClosedOrders, SELECT_BY_POS, MODE_HISTORY)==true) datetime TimeEndClosedOrders = OrderOpenTime(); int ChasPosleStavki = TimeEndClosedOrders + 3600; if (TimeCurrent() >= ChasPosleStavki){int z;} return(0); } вот не плохой скрипт, кому пригодится пользуйтесь.
 
Хамелеон, в окошке ввода текста есть не плохая кнопка SRC.
 
Вот ещё очень простое решение
int start()
{
            if(NewBar())
                  {
                  Print("Я здесь был  NewBar = True");
                  }
}

bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}
 

Самое простое:

if(Volume[0]>1)return;
Проще нет!
 
borilunad:

Самое простое:

Проще нет!


Только для тестера!!!
 
Vinin:

Только для тестера!!!

На Реале работает нормально, ставлю где нужно, и если условия совпадают с открытием бара, срабатывает чётко, без ошибок.
 
borilunad:

На Реале работает нормально, ставлю где нужно, и если условия совпадают с открытием бара, срабатывает чётко, без ошибок.


Удачи Вам. Но если придет несколько тиков подряд несколько баров подряд, то я Вам не завидую. Прошу прощения за тафталогию

Причина обращения: