Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2668

 
Andrei Sokolov #:
но они все проходили, а потом поиск индекса какого-то нужного бара выдавал -1.
Ну, так с каким временем Вы бар ищите? Он есть такой?
 

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

 
fvdtrejder #:

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

Я вот например, вообще не понял что должна вычислить Ваша программа. Что такое номер средней? Что значит "по текущей свечи цены закрытия"?
 
lynxntech #:

Есть способ получить Print в OnDeinit индикатора только на текущем графике Терминала? Т.е. в других копиях и окнах пропускать принт

нужно для написания и отладки, что-бы принт не задваивался с других окон при перекомпиляции


примерно такой код не помогает

Может вот так:

void OnDeinit(const int reason){
        if(ChartID()==0 && Period() == ChartPeriod(0) && reason==REASON_RECOMPILE)
  if(Symbol()=="EURUSD"){
                Print(" была перекомпилирована. ",__DATETIME__);
        }
        IndicatorRelease(Handle);
}
 
Vitaly Murlenko #:

Может вот так:

на текущий график не хочет обращать внимание, только по символу можно отфильтровать + reason
 
lynxntech #:
на текущий график не хочет обращать внимание, только по символу можно отфильтровать + reason
Ну напрашивается поиск способа узнать, какое из подокон терминала активно (имеет фокус). Если есть фокус, то принтуем. Если нет, то ни чего не делаем. Например, активно окно графика EurUsd. Если можно программно получить признак его активности, то принт будет только 1.
 
Разьве ChartFirst() не срабатывает?
 
Vitaly Murlenko #:
Разьве ChartFirst() не срабатывает?

так же со всех окон печатает, фильтровать удается только по текущему символу, дальше пока не буду пробовать

void OnDeinit(const int reason)
  {
   long chartId = ChartFirst();
   if(ChartFirst()==chartId && reason==REASON_RECOMPILE)
     {
      Print("была перекомпилирована. ",__DATETIME__);
     }
   IndicatorRelease(Handle);
  }
 
Vitaly Murlenko #:
Я вот например, вообще не понял что должна вычислить Ваша программа. Что такое номер средней? Что значит "по текущей свечи цены закрытия"?
 например есть свеча на 5 минутном графике. Нужно провести по цене закрытия этой свечи простую среднюю. Для этого нужно найти параметр этой средней.
 
fvdtrejder #:
 например есть свеча на 5 минутном графике. Нужно провести по цене закрытия этой свечи простую среднюю. Для этого нужно найти параметр этой средней.

Вы не понимаете, что просите. Простая средняя - это то самое арифметическое среднее, которое нам давали в школе. Это ни что иное, как среднее значение числового ряда. Вычисляется по алгоритму: суммируем все значения числового ряда и делим на их количество. У скользящей средней количество элементов числового ряда называется термином "период усреднения". Например имеем числовой ряд из значений цен закрытия трёх последних свеч: 125,5  125,8  125,2. Сумма этих значений = 376,5. Число элементов нашего ряда = 3 (период усреднения). Поэтому 376,5/3 = 125,5. А вот теперь самое интересное. Закрылась ещё одна свеча. Например, по цене 126,0. Мы имеем теперь числовой ряд, состоящий уже из 4-х элементов: 125,5  125,8  125,2 и 126,0. Но поскольку мы вычисляем трёх-периодное среднее, то берём только три последних элемента. Это числа 125,8  125,2 и 126,0. Первый элемент 125,5 - отбрасывается. Что мы теперь имеем? (125,8 + 125,2 + 126,0) / 3 = 125,7.

Чтоб на пятиминутном графике получить значение простой средней, нужно кинуть на график индикатор Moving Averages (В терминале в списке трендовых индикаторов он есть), и в его параметрах указать, что строится он по ценам закрытия и указать период усреднения (сколько именно последних свеч) мы будем брать для вычисления значения средней величины.