В каких случаях есть смысл держать часть кода робота в индикаторе? - страница 23

 
Vinin:

Значения ЕМА при обрыве связи берется неверным. Оно берется последним рассчитанным. Но это не верно. В итоге функция будет работать ошибочно не на n барах, а на значительно большем количестве баров. Если конечно сохранять ее значения

Видимо, в код не вникли. Откомментировал:

// Комментирую для такого случая. Крайний известный M1-бар был в 14:00.
// Произошел разрыв связи на 10 минут после чего происходит вызов start.
void start()
{
  EMA = GetEMA();
  
  return;  
}

double GetEMA()
{
  static int PrevTime = 0;
  
  if (PrevTime == Time[0]) // Выпонится, когда история за крайние 10 минут подгрузится.
                           // Если истории не было, например, сутки, то может произойти ошибка.
                           // Но мы говорим про РЕАЛ, т.е. адекватность человека.
                           // Т.к. если нет связи сутки, советник оставлять нельзя.
    return(EMA);

  int i = iBarShift(Symbol(), Period(), PrevTime) - 1; // Здесь мы получим номер бара в 14:01.

  PrevTime = Time[0]; // запомним текущее время 14:10
  
// Производим расчет текущего EMA с учетом полученных 10 баров.
  while (i >= 0)
  {
    EMA = EMA * Alpha + (1 - Alpha) * GetPrice(i);
    
    i--;
  }
  
  return(EMA);
} 
 
Говоря про ошибку и адекватность, имел в виду применимость этого не только к случаю "все в одном", но и для "с индикатором".
 
hrenfx:
Говоря про ошибку и адекватность, имел в виду применимость этого не только к случаю "все в одном", но и для "с индикатором".


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

Можно сделать вывод о бесполезности этой ветки

 
Vinin:


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

Можно сделать вывод о бесполезности этой ветки

Слушайте, не надо увиливать. Я вам даже откомментировал код. Что не нравится? Вы считаете, что приведенный пример разрыва в 10 минут вызывет ошибку? Со своей стороны все конкретизировал. Утверждаете, что ошибка, значит видите где. Так не поленитесь, просто покажите это место. Вы же его уже определили.

P.S. Вы уже второй, кто увиливает. И не надо говорить, что мне не дано понять. Четко покажите место, где ошибка. Если не прав, так признаю. От меня не убудет.

 
hrenfx:

Слушайте, не надо увиливать. Я вам даже откомментировал код. Что не нравится? Вы считаете, что приведенный пример разрыва в 10 минут вызывет ошибку? Со своей стороны все конкретизировал. Утверждаете, что ошибка, значит видите где. Так не поленитесь, просто покажите это место. Вы же его уже определили.

P.S. Вы уже второй, кто увиливает. И не надо говорить, что мне не дано понять. Четко покажите место, где ошибка. Если не прав, так признаю. От меня не убудет.


Просто кто-то не хочет думать. Заставить не могу, да и не хочу.
 
Vinin:

Просто кто-то не хочет думать. Заставить не могу, да и не хочу.


Охренеть, так никто и не конкретизировал. Опять вода. Несколько человек (MT4+MQL4 знают отлично) говорят, что мой код будет работать с ошибкой, но привести конкретный пример-аргументацию (о чем просил несколько раз) не в состоянии. И это в коде всего в 10 строчек.

Может, вынесите код Integer и мой код в отдельную ветку и спросите мнение MQL4-программистов, что же в коде неверно. А сами, как модератор, проследите, чтобы флуда не было. А то в данной ветке столько букв не по делу, что код даже не найти.

Думаю, MQL4-сообществу будет полезно.

 
hrenfx:

Слушайте, не надо увиливать. Я вам даже откомментировал код. Что не нравится?

Вначале придет цена. Затем бары. К тому моменту, когда придут бары, они будут "типа" обработаны, а на деле неучтены по причине их отсутствия в момент обработки.

Я уже второй раз это повторяю.

 
TheXpert:

Вначале придет цена. Затем бары. К тому моменту, когда придут бары, они будут "типа" обработаны, а на деле неучтены по причине их отсутствия в момент обработки.

Да, вначале придет цена, но пока не будет нового бара, будет все время срабатывать условие if (PrevTime == Time[0])

Вы понимаете, что если появляется новый бар, без подкачки баров за крайние 10 минут, то советник с индикатором получит неверные значения EMA до подкачки истории. В итоге советник натворит все, что угодно.
 
hrenfx:


Охренеть, так никто и не конкретизировал. Опять вода. Несколько человек (MT4+MQL4 знают отлично) говорят, что мой код будет работать с ошибкой, но привести конкретный пример-аргументацию (о чем просил несколько раз) не в состоянии. И это в коде всего в 10 строчек.

Может, вынесите код Integer и мой код в отдельную ветку и спросите мнение MQL4-программистов, что же в коде неверно. А сами, как модератор, проследите, чтобы флуда не было. А то в данной ветке столько букв не по делу, что код даже не найти.

Думаю, MQL4-сообществу будет полезно.


Я приводил логику работоспособного алгоритма. Не помогло. Сожалею что не достучался
 
hrenfx:
Да, вначале придет цена, но пока не будет нового бара, будет все время срабатывать условие if (PrevTime == Time[0])
Нет, цена будет уже на новом баре. Это отлично видно при включении терминала. Вначале бар имеет вид точки.
Причина обращения: