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

 
Valeriy Yastremskiy:

а с нумерацией баров ничего не надо разве делать. Т.е. код из четверки с первым баром для пятерки будет тоже с первым баром без переворота нумерации?

Из документации

shift

[in]  Индекс получаемого значения из таймсерии (сдвиг относительно текущего бара на указанное количество баров назад).


Относительно текущего бара сдвиг 0 и будет текущий бар. А если 1, то предыдущий.

 
Igor Makanu:

можно и так:

У  Close[shift] квадратные скобки. не получилось.

Alexey Viktorov:

Из документации

Относительно текущего бара сдвиг 0 и будет текущий бар. А если 1, то предыдущий.

Правильно понимаю в таймсерии нумерация в 5ке такая же как в 4ке?

 
Valeriy Yastremskiy:

У  Close[shift] квадратные скобки. не получилось.

получилось, вот код от @fxsaber

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get(const string Symb,const int TimeFrame,const int iShift) \
    {                                                                                                         \
      T tValue[];                                                                                             \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
    T operator[](const int iPos) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
  CLASS##NAME NAME;                                                                                           \
  T i##NAME(const string Symb,const int TimeFrame,const int iShift) \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }
//+------------------------------------------------------------------+
DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)
//+------------------------------------------------------------------+

можете теперь писать Close[1] >  Close[2]   

[Удален]  
Sergey:


Здравствуйте. Пытаюсь прописать  условие, но что-то делаю не так. Помогите разобраться.

В момент пересечения ценой снизу вверх линии индикатора открывается позиция на покупку. 

Для этого же бара пытаюсь прописать  условие:

если цена закрытия текущей свечи выше линии индикатора  и цена Bid на любом из последующих баров больше линии индикатора - ..условие 1

Как это правильно сделать?

в самом терминале есть образец     Moving Average.mq5

если я правильно понял Вам нужно так ?

Снимок

 
Igor Makanu:

получилось, вот код от @fxsaber

можете теперь писать Close[1] >  Close[2]   

ну так будет работать. подумал мт4стайл должен решить проблему. счас попробую. спасибо

 
Valeriy Yastremskiy:

У  Close[shift] квадратные скобки. не получилось.

Правильно понимаю в таймсерии нумерация в 5ке такая же как в 4ке?

Нет не правильно. В данном случае просто совпадение интересов)))

 
Igor Makanu:

получилось, вот код от @fxsaber

можете теперь писать Close[1] >  Close[2]   

получилось индикатор перенести. 

var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS); //не получилось все дефайнами заменить в лоб. пришлось просто заменить.

Осталось с приведением типов разобраться.

Конечно понятно что МТ5 ближе к рынку. Но тяга к длинным именам не понятна мне.

 
Valeriy Yastremskiy:

получилось индикатор перенести. 

Осталось с приведением типов разобраться.

Конечно понятно что МТ5 ближе к рынку. Но тяга к длинным именам не понятна мне.

TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS);
 
Vitaly Muzichenko:

Да)))) Смешно  получилось, нашел только преобразование в структуру, (в справочнике в структуру и в текст в разных местах), переделал, и только потом пришла мысль, что в 5ке обязательно должно быть преобразование в текст)))) бывает. 

И не зря длинные наименования нужны))) 

 

Почему то это код выдает: 2021.01.16 20:24:53.543 (FUTSP500CONT,H1) 1980.12.31 03:00:00

При том нулевой бар есть другим временем. Выдает эту ошибку с низкой частотой один раз из 20-40 в индикаторе.

Все происходит при старте индикатора, получается если нормально включился то есть работа нет так ошибка.

int OnCalculate(const int rates_total,

        const int prev_calculated,

        const datetime& time[],

        const double& open[],

        const double& high[],

        const double& low[],

        const double& close[],

        const long& tick_volume[],

        const long& volume[],

        const int& spread[])

{
Print(time[0]);
}