Обычно в языках переменные, объявленные в процедуре или функции, после ее завершения выгружаются из памяти. В MQL4 есть особые процедуры init(), deinit() и start(). Меня интересует конкретно start().
Если в ней объявляются переменные, то, поскольку start() запускается каждый новый тик, эти переменные на каждом тике должны создаваться заново и будут иметь каждый раз нулевое начальное значение. Это так ?
SetIndexBuffer(0,ExtMapBuffer); SetIndexBuffer(1,ExtMapBuffer2); SetIndexEmptyValue(0,0.0); ArraySetAsSeries(ExtMapBuffer,true); ArraySetAsSeries(ExtMapBuffer2,true);
Зачем здесь присутствует ArraySetAsSeries ? Разве буферы индикаторов не имеют нужную сортировку изначально ?
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-е значение будет постоянно смещаться, правильно? То есть получается что массив надо постоянно пересчитывать. Не слишком большая нагрузка на железо? Или если писать в массив только последнее значение - то как?
Я так и думаю, но хотелось бы услышать это от разработчиков.
Дело в том, что в этом многажды обсуждавшемся индикаторе MQ есть еще ряд озадачивающих моментов. Пора, наверное, в них разобраться. Может быть тогда станет ясно почему он так дивно ведет себя на графике.
Создайте свою и задавайте вопросы там.
Или хотя бы тогда ответьте на мой вопрос.
Уж извините, что использую Вашу ветку для своих вопросов. Просто уж очень топик был подходящий.
Дождитесь понедельника, думаю, что разработчики отзовутся.
Со своей стороны по Вашему вопросу скажу:
Если Вы откроете этот Ваш график в атономе, то на нем будут работать все индикаторы и скрипты. Соответственно, все значения (Bars, Close[], Open[], High[], Low[] и т.д.) будут определяться стандартным образом. Функция FileRead Вам для этого не нужна. Просто обращайтесь к необходимым таймсериям и все.
Если же Вы хотите чтобы это происходило в динамике в реальном времени, то это тоже возможно, но сложнее.
Уж извините, что использую Вашу ветку для своих вопросов. Просто уж очень топик был подходящий.
Дождитесь понедельника, думаю, что разработчики отзовутся.
Со своей стороны по Вашему вопросу скажу:
Если Вы откроете этот Ваш график в атономе, то на нем будут работать все индикаторы и скрипты. Соответственно, все значения (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. Поэтому и надо универсальное решение.
Теперь я достаточно ясно задал вопрос?
ЗЫ: Тон абсолютно нормальный. Если я вас обидел - очень извиняюсь. Все что было сказано мной - было сказано исключительно из желания узнать как это сделать. Если отошлете к документации - я не обижусь. Только скажите где написано и дайте или покажите где посмотреть пример.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Если есть офлайновый график - скажем тот же H3. Как можно получить из него данные через FileRead чтобы в итоге получить массив bar_h3[],datatime_h3[], close_h3[] и т.д.
Или может быть проще будет на ходу конвертировать часовку без всякого скрипта?