Как обнаружить новый бар - страница 3

 
Stephen Njuki:
Я использую это...

Спасибо.

 
Stephen Njuki:
Я использую это...

У меня было много проблем с использованием времени в качестве переменной, и я искал способ использовать переменные бары


спасибо, работа!


 
Mladen Rakic:

Почему бы просто не использовать что-то вроде этого?

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Это должно работать во всех случаях (даже когда есть ошибка с CopyTime(), это позволяет избежать ловушки)

спасибо, брат!

 
Mladen Rakic:

Почему бы просто не использовать что-то вроде этого:

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Это должно работать во всех случаях (даже когда есть ошибка с CopyTime(), это позволяет избежать ловушки)

Идеально.

Я искал то же самое.


Да благословит вас Бог

 

Спасибо Леонард, очень помогло.

Заметил несколько проблем при работе с iHigh, iLow и iClose непосредственно после, поэтому добавил быстрый Sleep(10000) после вызова.

void OnTick()
   {
    if(isNewBar())
       {
       Sleep(10000);
       ...
       }
   }

bool isNewBar()
   {
   
    static datetime prevTime = 0;
    datetime lastTime[1];
    if(CopyTime(Symbol(), Period(), 0, 1, lastTime) == 1 && prevTime != lastTime[0])
       {
        prevTime = lastTime[0];
        return(true);
       }
    return(false);
   }
 

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

inline bool IsNewBar(ENUM_TIMEFRAMES timeframe = PERIOD_CURRENT)
{
   static datetime lastBar;
   return lastBar != (lastBar = iTime(_Symbol, timeframe, 0));
}
 
Null_Pointer:

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

Спасибо!

Вопрос, что означает "Inline"?

 
fdesu: Вопрос, что означает "Inline"?

В языках "C" и "C++" ключевое слово "inline" рекомендует компилятору использовать встроенное расширение для оптимизации.

Однако в MQL такая возможность не документирована, хотя компилятор принимает ее и не выдает ошибку при компиляции. Возможно, она просто допускается, но не имеет никакого эффекта.

 
fdesu:

Спасибо!

Вопрос, что означает "Inline"?

12. MQL5: Добавлена поддержка спецификаторов inline, __inline и __forceinline при разборе кода. Наличие спецификаторов в коде не вызывает ошибок и не влияет на компиляцию. На данный момент эта возможность упрощает перенос С++ кода на MQL5.
Более подробную информацию о спецификаторах можно найти в MSDN.

New MetaTrader 5 platform build 1930: Floating window charts and .Net libraries in MQL5
New MetaTrader 5 platform build 1930: Floating window charts and .Net libraries in MQL5
  • 2018.10.25
  • www.mql5.com
The updated version of the MetaTrader 5 platform will be released on October 26, 2018...
 
Alain Verleyen: 12. MQL5: Added support for the inline, __inline and __forceinline specifiers when parsing code. The presence of the specifiers in the code causes no errors and does not affect the compilation. At the moment, this feature simplifies transferring С++ code to MQL5. Find more information about specifiers in MSDN.
Спасибо за информацию! Жаль, что они не включили это в документацию, так как я не смог найти упоминания об этом ни в онлайн-версии, ни в файле справки MetaEditor.