Вопрос по MQL4

 
Возможно вопрос глупый и уже где-то описывался, но я не нашел по поиску.
Если есть офлайновый график - скажем тот же H3. Как можно получить из него данные через FileRead чтобы в итоге получить массив bar_h3[],datatime_h3[], close_h3[] и т.д.
Или может быть проще будет на ходу конвертировать часовку без всякого скрипта?
 
И еще один вопрос.
Обычно в языках переменные, объявленные в процедуре или функции, после ее завершения выгружаются из памяти. В MQL4 есть особые процедуры init(), deinit() и start(). Меня интересует конкретно start().

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


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

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


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



Видимо, это просто рудимент. Закомментируйте и все увидите (будет разница или нет). Язык MQL-4 в начале менялся достаточно быстро и гибко. ВОт пример эволюции - http://forexsystems.ru/phpBB/viewtopic.php?p=7190&highlight=tdi#7190
 
Вопрос конечно был интересный, но хотелось бы получить ответ на мой вопрос.
И еще попутно - если я считаю например в эксперте свою таймсерию, например ArrayH3[][6], 0-е значение будет постоянно смещаться, правильно? То есть получается что массив надо постоянно пересчитывать. Не слишком большая нагрузка на железо? Или если писать в массив только последнее значение - то как?
 
2 Rosh

Я так и думаю, но хотелось бы услышать это от разработчиков.
Дело в том, что в этом многажды обсуждавшемся индикаторе MQ есть еще ряд озадачивающих моментов. Пора, наверное, в них разобраться. Может быть тогда станет ясно почему он так дивно ведет себя на графике.
 
Yurixx, вы могли бы не флудить в чужой теме?
Создайте свою и задавайте вопросы там.
Или хотя бы тогда ответьте на мой вопрос.
 
2 Trender

Уж извините, что использую Вашу ветку для своих вопросов. Просто уж очень топик был подходящий.
Дождитесь понедельника, думаю, что разработчики отзовутся.

Со своей стороны по Вашему вопросу скажу:
Если Вы откроете этот Ваш график в атономе, то на нем будут работать все индикаторы и скрипты. Соответственно, все значения (Bars, Close[], Open[], High[], Low[] и т.д.) будут определяться стандартным образом. Функция FileRead Вам для этого не нужна. Просто обращайтесь к необходимым таймсериям и все.

Если же Вы хотите чтобы это происходило в динамике в реальном времени, то это тоже возможно, но сложнее.
 
2 Trender

Уж извините, что использую Вашу ветку для своих вопросов. Просто уж очень топик был подходящий.
Дождитесь понедельника, думаю, что разработчики отзовутся.

Со своей стороны по Вашему вопросу скажу:
Если Вы откроете этот Ваш график в атономе, то на нем будут работать все индикаторы и скрипты. Соответственно, все значения (Bars, Close[], Open[], High[], Low[] и т.д.) будут определяться стандартным образом. Функция FileRead Вам для этого не нужна. Просто обращайтесь к необходимым таймсериям и все.

Если же Вы хотите чтобы это происходило в динамике в реальном времени, то это тоже возможно, но сложнее.


Если я открою график в автономном режиме я не смогу обратиться к нему из эксперта. Разве это не понятно? Обратиться я могу только к ФАЙЛУ. Либо - можно вообще выкинуть скрипт конвертера и просто создать массив с таймсерией. И по ней строить индикатор(ы). Собственно меня беспокоит несколько вещей - которые я и описал. А именно - не будет ли большой нагрузкой пересчет таймсерии с каждым тиком, ну или хотя бы раз в секунду. Для меня секунды вполне достаточно. Можно даже и реже. К тому же этот способ не зависит от скрипта, который надо постоянно бросать на график, что неудобно.
 
Если я открою график в автономном режиме я не смогу обратиться к нему из эксперта. Разве это не понятно? Обратиться я могу только к ФАЙЛУ. Либо - можно вообще выкинуть скрипт конвертера и просто создать массив с таймсерией. И по ней строить индикатор(ы). Собственно меня беспокоит несколько вещей - которые я и описал. А именно - не будет ли большой нагрузкой пересчет таймсерии с каждым тиком, ну или хотя бы раз в секунду. Для меня секунды вполне достаточно. Можно даже и реже. К тому же этот способ не зависит от скрипта, который надо постоянно бросать на график, что неудобно.


Во-первых, милейший, сбавьте тон. Чтобы было понятно, надо уметь задавать понятно вопросы. Вы где-нибудь в своем первом посте упоминали про эксперта ? Нет. Поэтому я отвечал имея в виду простейший вариант. При этом уточнил, что это касается только индюков и скриптов.

Во-вторых, было бы проще отвечать Вам, если бы Вы просто объяснили всю ситуацию и чего Вы от нее хотите.

В-третьих. Если Вы хотите торговать из эксперта на нестандартном графике, то делается это так.
Открывается стандартный график и на него вешается период_конвертер. То есть должна работать вся та структура, которая в реальном времени пишет Ваш нестандартный файл истории. Если у Вас свой собственный скрипт, который пишет Ваш нестандартный файл, то в нем обязательно должен быть тот кусок из период_конвертера, который обновляет окно графика, где открыт нестандартный файл.
if(hwnd==0)
{
  hwnd=WindowHandle(Symbol(),i_period);
  if(hwnd!=0) Print("Chart window detected");
}
//---- refresh window not frequently than 1 time in 2 seconds
if(hwnd!=0 && cur_time-last_time>=2)
{
  PostMessageA(hwnd,WM_COMMAND,33324,0);
  last_time=cur_time;
}


Дальше Вы открываете автономно (как бы :-) свой нестандартный график. Теперь, в связке с тем первым графиком, он будет работать в реальном времени. На этот нестандартный график можно вешать любые индикаторы, скрипты и даже эксперты :-) без какой бы то ни было доработки. Единственная тонкость - использование имени инструмента. Но с этим, я думаю, Вы разберетесь.

Успехов.

 

Во-первых, милейший, сбавьте тон. Чтобы было понятно, надо уметь задавать понятно вопросы. Вы где-нибудь в своем первом посте упоминали про эксперта ? Нет. Поэтому я отвечал имея в виду простейший вариант. При этом уточнил, что это касается только индюков и скриптов.

Во-вторых, было бы проще отвечать Вам, если бы Вы просто объяснили всю ситуацию и чего Вы от нее хотите.

В-третьих. Если Вы хотите торговать из эксперта на нестандартном графике, то делается это так.
Открывается стандартный график и на него вешается период_конвертер. То есть должна работать вся та структура, которая в реальном времени пишет Ваш нестандартный файл истории. Если у Вас свой собственный скрипт, который пишет Ваш нестандартный файл, то в нем обязательно должен быть тот кусок из период_конвертера, который обновляет окно графика, где открыт нестандартный файл.
if(hwnd==0)
{
  hwnd=WindowHandle(Symbol(),i_period);
  if(hwnd!=0) Print("Chart window detected");
}
//---- refresh window not frequently than 1 time in 2 seconds
if(hwnd!=0 && cur_time-last_time>=2)
{
  PostMessageA(hwnd,WM_COMMAND,33324,0);
  last_time=cur_time;
}


Дальше Вы открываете автономно (как бы :-) свой нестандартный график. Теперь, в связке с тем первым графиком, он будет работать в реальном времени. На этот нестандартный график можно вешать любые индикаторы, скрипты и даже эксперты :-) без какой бы то ни было доработки. Единственная тонкость - использование имени инструмента. Но с этим, я думаю, Вы разберетесь.

Успехов.



Спасибо что написали. Желание помочь уже похвально.
1. Прочитайте первый пост. Если логически немножко подумать - я знаю про скрипт, зачем мне обращаться к офлайновому таймфрейму? Чтобы смотреть на офлайновые графики? Для этого мне ничего писать даже не надо - достаточно просто бросить скрипт на график. Зачем мне FileRead тогда и все остальное? Не хочу устраивать тут разборок по поводу кто неясно выразился. Нервы жалко.

2. Ситуация - надо написать эксперт, в котором бы использовались нестандартные таймфреймы с индикаторами на них. Показывать их необязательно. Все что нужно можно посмотреть на тех же офлайновых графиках. Надо просто эксперт который все это будет делать. То есть - мы имеем некий Н3 график виртуально со всеми значениями. И возможностью строить на нем индикатор(ы). Чтобы в итоге получить значения этих иникаторов типа MA0=myMA("H3", 0); Ну и соответственно этим значениям строить дальнейшую стратегию. То есть можно(и даже лучше) обойтись без офлайн-хистори, а создать свою таймсерию. Я подозреваю что это очень просто, но примеров не нашел. Именно поэтому "Вопрос по MQL4". Тем кто его знает наверно это не составит труда. На МТ3 я писал достаточно легко, но у 4 больше возможностей. Надеюсь я понятно выразился на этот раз.

3. Этот вариант неплохой, но очень неудобный. Представляете - придется запускать МТ, бросать на него скрипт. Плюс к этому скрипты частенько глючат. То бары пропускаются, то все бары задваиваются. У меня на дню они сглючивают 1 раз минимум. Для реальной торговли я считаю это неприемлимо. Гораздо удобнее один раз бросить эксперта который все это будет делать сам. Тем более выводить графики не надо. Автомату не надо визуальное отображение. Пример:
A=iMA(NULL,PERIOD_H3,13,8,MODE_SMMA,PRICE_MEDIAN,i);
Так написать нельзя. Надо замену этой строчке.
Если повесить на этот график эксперт - то как обратиться к другому нестандартному фрейму? Например Н12. Поэтому и надо универсальное решение.
Теперь я достаточно ясно задал вопрос?

ЗЫ: Тон абсолютно нормальный. Если я вас обидел - очень извиняюсь. Все что было сказано мной - было сказано исключительно из желания узнать как это сделать. Если отошлете к документации - я не обижусь. Только скажите где написано и дайте или покажите где посмотреть пример.
Причина обращения: