ZigZag MetaQuotes и другие вопросы

 
Я уже пытался один раз задать эти вопросы вот здесь "Вопрос по MQL4",
однако разработчики так и не отозвались. Надеюсь в этот раз мне повезет больше.

Обычно в языках переменные, объявленные в процедуре или функции, после ее завершения выгружаются из памяти. В MQL4 есть особые процедуры init(), deinit() и start(). Меня интересует конкретно start().

Если в ней объявляются переменные, то, поскольку start() запускается каждый новый тик, эти переменные на каждом тике должны создаваться заново и будут иметь каждый раз нулевое начальное значение. Это так ? Если нет, то объясните ситуацию с переменными, которые обявляются в start().

Хотелось бы также чтобы тот, кто писал исходник индикатора ZigZag из стандартной поставки, кое-что пояснил в этом индикаторе.
Вопрос первый. Вот кусок из init()
SetIndexBuffer(0,ExtMapBuffer);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(0,0.0);
ArraySetAsSeries(ExtMapBuffer,true);
ArraySetAsSeries(ExtMapBuffer2,true);


Зачем здесь присутствует ArraySetAsSeries ? Разве буферы индикаторов не имеют нужную сортировку изначально ?

По ZigZag'у есть еще много вопросов. Разработчики могут конечно оставить их и без внимания, однако, этот индикатор за время своего существования вызвал так много нареканий и реализован так "странно", что может быть пора уже разобраться с ним и довести его до нормального состояния. Хотя бы и силами участников этого форума, если разработчикам заниматься этим нет возможности. Для этого достаточно вступить в диалог.
Если бы ZigZag не шел в стандартной поставке, тогда ладно. А так неудобно как-то перед юзерами во всем мире. Он же идет как образец - вот так надо программировать на MQL. :-(

 
Переменные, объявленные внутри функций, являются локальными. Они пересоздаются на каждом вызове функций. Если необходимо, чтобы локальная переменная сохранялась, то достаточно ее описать с модификатором static (полная аналогия с языком С).

Вот пример:
int start()
  {
   int    local_var=5;
   static int static_var=10;
//----
   Print("Local: ",local_var," Static: ",static_var);
   local_var++;
   static_var++;
//----
  }


При последовательных вызовах будут следующие значения:

2006.06.30 23:13:22	TestVars EURUSD,M1: Local: 5 Static: 10
2006.06.30 23:13:28	TestVars EURUSD,M1: Local: 5 Static: 11


Можно поступить даже проще, описав переменные на глобальном уровне - вне всяких функций.


По поводу ZigZag - нашу реализацию я сам лично написал 3 года назад еще для МТ3, но теперь уже не помню деталей. ArraySetAsSeries в версии для МТ4 явно лишние - добавлены были по ошибке, видимо.

 

Обычно в языках переменные, объявленные в процедуре или функции, после ее завершения выгружаются из памяти. В MQL4 есть особые процедуры init(), deinit() и start(). Меня интересует конкретно start().

Если в ней объявляются переменные, то, поскольку start() запускается каждый новый тик, эти переменные на каждом тике должны создаваться заново и будут иметь каждый раз нулевое начальное значение. Это так ? Если нет, то объясните ситуацию с переменными, которые обявляются в start().


Да, будут создаваться заново и иметь нулевое значение (если не объявлено обратное)

По поводу Зигзага - можно почитать здесь - http://forum.viac.ru/viewtopic.php?t=2141

Алгоритм можно оптимизировать, в принципе.
 

По поводу ZigZag - нашу реализацию я сам лично написал 3 года назад еще для МТ3, но теперь уже не помню деталей. ArraySetAsSeries в версии для МТ4 явно лишние - добавлены были по ошибке, видимо.


Нет Ренат, в тот момент в языке MQL-4 еще не была введена функция IndicatorBuffers() , а потому и нельзя было использовать индесные массивы для служебного пользования. Конечно, если я все праавильно помню :)
 
Спасибо Renat за ясность.

По поводу ZigZag'а хотелось бы тогда понять заинтересована ли MetaQuotes в том, чтобы он был доведен до ума ? Или он прилагается для того, чтобы юзеры могли попрактиковаться сами ? Ведь в список индикаторов реализованных системно он не вошел.

2 Rosh
По поводу Зигзага - можно почитать здесь - http://forum.viac.ru/viewtopic.php?t=2141
Алгоритм можно оптимизировать, в принципе.

Спасибо за линк. Можно также реализовать и другие алгоритмы. Вопросов на самом деле два. Нужно ли переписать ZigZag так, чтобы он работал правильно и экономно, вообще ? И нужно ли это MetaQuotes, в частности ?

Посмотрел линк, понял, что Вы его уже сделали правильным. 1.5 года назад. :-)
Вот только не увидел где его скачать. Или на том форуме надо зарегистрироваться для этого ?
 
Конечно мы заинтересованы в экономном зигзаге. Если предложите лучший вариант, то мы его можем включить в стандартную поставку в виде MQL4 файла.

А вообще можно любые свои индикаторы опубликовать в разделе CodeBase сайта "MQL4: automated forex trading" - там они доступны всем пользователям прямо из MetaEditor'а.
 
Спасибо Renat за ясность.

По поводу ZigZag'а хотелось бы тогда понять заинтересована ли MetaQuotes в том, чтобы он был доведен до ума ? Или он прилагается для того, чтобы юзеры могли попрактиковаться сами ? Ведь в список индикаторов реализованных системно он не вошел.

2 Rosh
По поводу Зигзага - можно почитать здесь - http://forum.viac.ru/viewtopic.php?t=2141
Алгоритм можно оптимизировать, в принципе.

Спасибо за линк. Можно также реализовать и другие алгоритмы. Вопросов на самом деле два. Нужно ли переписать ZigZag так, чтобы он работал правильно и экономно, вообще ? И нужно ли это MetaQuotes, в частности ?

Посмотрел линк, понял, что Вы его уже сделали правильным. 1.5 года назад. :-)
Вот только не увидел где его скачать. Или на том форуме надо зарегистрироваться для этого ?



Чтобы видеть вложения на том форуме - нужно зарегистрироваться. Тот правильный Zigzag и текущий из стандартной поставки - работают одинаково, они практически близнецы. Я не стал отвечать в этой ветке, так как ответы можно было найти самомму, хотя бы здесь -
"Вопрос о ZigZag."
и здесь - "[] сила - Zigzag побежден!"
 
Чтобы видеть вложения на том форуме - нужно зарегистрироваться. Тот правильный Zigzag и текущий из стандартной поставки - работают одинаково, они практически близнецы. Я не стал отвечать в этой ветке, так как ответы можно было найти самомму, хотя бы здесь -
"Вопрос о ZigZag."
и здесь - "[] сила - Zigzag побежден!"


Спасибо, кое что из этого я видел, а что не видел - прочитал.
Проблему вижу только в одном. Для Zigzagа можно придумать много разных алгоритмов и многие это делали. Я тоже написал для себя подходящий Zigzag. А здесь, кроме нас с Вами, этим занимался еще и Quark.
Алгоритм из стандартной поставки ничем не хуже других, но у него есть, с моей точки зрения, один существенный недостаток. Zigzag потому и Zigzag, что за минимумом обязательно следует максимум. А этот Zigzag может нарисовать несколько минимумов или максимумов подряд. Но это ИМХО. Не знаю как к этому отнесутся другие.
 
А вообще можно любые свои индикаторы опубликовать в разделе CodeBase сайта "MQL4: automated forex trading" - там они доступны всем пользователям прямо из MetaEditor'а.

Renat, спасибо за приглашение.
Меня, в общем-то, интересовало другое. Хотелось чтобы эта мелочь (Zigzag) соответствовал общему уровню качества MetaQuotes. И не устраивает в этом Zigzagе меня только два момента:
1. Он рисует максимумы и минимумы просто в воздухе, а не по High или Low.
2. Вместо свингов вверх-вниз-вверх ... от рисует ломаные. Минимум, который болше, чем предыдущий максимум - это выглядит оригинально.

Если MetaQuotes считает, что это соответствует идее или алгоритму Zigzagа, тогда нет проблем.
Если же это (или что-то еще) надо исправить, то поставьте задачу.
 
2 Rosh

Скачал и посмотрел Ваш ZigZag. Фактически это тот ZigZag, который идет сейчас в стандартной поставке.
Я нашел единственное отличие. Известная Вам строчка
if ((curlow==0)&&(curhigh==0)) continue;


в Вашем варианте закомментирвана.

Однако, мне так и не удалось найти различий, к которым это приводило бы на графике.
Таким образом, мои два вопроса так и остаются:
1. Максимумы и минимумы висят в воздухе, а не по High или Low.
2. Вместо свингов вверх-вниз-вверх - ломаные. Минимум, который больше, чем предыдущий максимум - можно ли считать это правильным алгоритмом ?

Может быть Вы скажете что-нибудь по этому поводу ?

 
Мдаа... Обычный случай, людям не приходит в голову, что их не поймут. Я тоже не понимал, о чем идет речь, пока не набросил ZigZag на график. Теперь я тоже вижу, что экстремумы висят в воздухе. При этом точно помню, что раньше этого не было. Значит, что то изменилось в компиляторе, я так думаю. Это вопрос к разработчикам.