Укажите новый бар - страница 2

 
Doerk Hilger:

Самый простой способ:

static datetime tlastbar=0;

datetime tnewbar=iTime(NULL,PERIOD_CURRENT,0);

bool isnewbar=tnewbar!=tlastbar;

tlastbar=tnewbar;

Насколько я знаю, тема предназначена для mql5. Ваш код подходит только для mql4.
 
Willbur:

Вот моя окончательная версия.

На самом деле я немного волнуюсь, потому что это так просто.

Ален: Было бы здорово, если бы вы выпустили благословение.

// -----------------------------------------------------------------------
bool NewBar(void)
{
bool iNewBar = false;
static double currPeriodProgress = 0;

   if(MathMod(TimeCurrent(),PeriodSeconds()) < currPeriodProgress) iNewBar = true;

   currPeriodProgress = MathMod(TimeCurrent(),PeriodSeconds());

   return(iNewBar);
}
// ------------------------------------------------------------------------
void OnTick()
{
    if(NewBar())     PlaySound("tick.wav");


Приветствую вас из Кельна
Вилбур

Проблема в том, что его можно использовать только в OnTick(). Из других обработчиков событий вы никогда не будете уверены, что TimeCurrent() связан с нужным вам символом.

И я советую вам никогда не делать один и тот же расчет дважды:

bool NewBar(void)
  {
   bool iNewBar=false;
   static double currPeriodProgress=0;

   double lastPeriodProgress=MathMod(TimeCurrent(),PeriodSeconds());

   if(lastPeriodProgress<currPeriodProgress) iNewBar=true;

   currPeriodProgress=lastPeriodProgress;

   return(iNewBar);
  }
 
Alain Verleyen:
Насколько я знаю, эта тема предназначена для mql5. Ваш код предназначен только для mql4.
Что вы имеете в виду? Это просто фрагмент, который можно включить куда угодно, например, в функцию NewBar(). И, имо, это самое простое и быстрое, надежное решение. Я включил это в производный класс CSymbolInfo для всех таймфреймов по отдельности, и он работает идеально.
 

Я использовал их в MQL4

//global
long Bars_in_Chart;

   // detected new bar
   if(Bars_in_Chart<Bars)
   {
      Bars_in_Chart=Bars;
   }
 
Doerk Hilger:
Что вы имеете в виду? Это просто фрагмент, который можно включить куда угодно, например, в функцию NewBar(). И, имо, это самое простое и быстрое, надежное решение. Я включил это в производную от класса CSymbolInfo для всех таймфреймов по отдельности, и это работает идеально.
В mql5 нет функции iTime().
 
Alain Verleyen:
В mql5 нет функции iTime().
MT5, правда? Но MQL5 - это не только MT5, по крайней мере, я так всегда понимал, потому что MT4 использует компилятор MQL5. Но на самом деле я этого не знал, я использую в основном MT4. В любом случае, спасибо за информацию об ограничении.
 
Doerk Hilger:
MT5, правда? Но MQL5 - это не только MT5, по крайней мере я так всегда понимал, потому что MT4 использует компилятор MQL5. Но на самом деле я этого не знал, я использую в основном MT4. В любом случае, спасибо за информацию об ограничении.
Нет, mql4 - для MT4, mql5 - для MT5. У них есть общее подмножество функций, но это 2 разных языка.
 

MQL4 iTime() прост и понятен для трейдеров, как и большинство других функций MQL4.

MQL5 - совсем другое дело, для его программирования нужна степень по информатике, и именно это отпугивает большинство людей.

Вот пример, с которым я столкнулся на прошлой неделе, когда хотел запустить и конвертировать советника MT4 в MT5, и решение, которое я нашел.


 
Alain Verleyen:
Нет, mql4 - для MT4, mql5 - для MT5. У них есть общее подмножество функций, но это 2 разных языка.

Язык один и тот же, но у них есть небольшое подмножество функций, которые не являются общими ;) В любом случае, вы, вероятно, правы с этим определением. MQ сделал многое, чтобы породить путаницу в этом вопросе.

 
Doerk Hilger:
MT5, правда? Но MQL5 - это не только MT5, по крайней мере я так всегда понимал, потому что MT4 использует компилятор MQL5. Но на самом деле я этого не знал, я использую в основном MT4. В любом случае, спасибо за информацию об ограничении.
Не знаете ли вы, есть ли публичная библиотека/класс, который реализует старые функции iClose, iTime ... просто для совместимости? Это имело бы смысл при пошаговой конвертации.
Причина обращения: