Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
При переходе на МТ5 много неявных (нигде не описанных) отличий.
Например. В МТ4 не получалось удалять графический выделенный объект. Предполагаю, это было потому, что он был "захвачен" мышкой для перемещений.
Наворочал в МТ4 сложный код. Объект стал удаляться. Но редко проявлялась все-таки ошибка - объект оставался на графике. А после перерисовки графика он удалялся.
В МТ5 захваченный мышкой объект удаляется и функция ончартевент также грамотно отрабатывается в этом случае. Но в МТ5 эта функция и не понадобилась, так как объект удаляется и без программных наворотов.
Ну и еще некоторые неявные отличия имеются. В статье по переходу на МТ5 с МТ4 не описанные.
=============
В МТ5 почистил код от излишеств.
В той статье много чего из предложенного не оптимально.
Там и ошибка есть.
Я не стал использовать функции из статьи. Вызов функций кушает ресурс компьютера.
В той статье много чего из предложенного не оптимально.
Артем, как найти на форуме информацию о создании нескольких индикаторных буферов?
Интересует вопрос, как привязывать цвета и стили для нескольких индикаторных буферов.
У меня выводятся несколько зигзагов одновременно. Каждой линии зигзага необходимо задать свой цвет и стиль.
В МТ4 проблем не было. В МТ5 не нахожу, как это сделать. В описании языка об этом нет информации. Задавать цвет и стиль необходимо не через #property.
Задаю
#property indicator_buffers 28
#property indicator_plots 28
Проблемы с этими буферами:
SetIndexBuffer(8,Lmzz1,INDICATOR_DATA);
SetIndexBuffer(9,Hmzz1,INDICATOR_DATA);
SetIndexBuffer(10,Lmzz2,INDICATOR_DATA);
SetIndexBuffer(11,Hmzz2,INDICATOR_DATA);
SetIndexBuffer(12,Lmzz3,INDICATOR_DATA);
SetIndexBuffer(13,Hmzz3,INDICATOR_DATA);
SetIndexBuffer(14,Lmzz4,INDICATOR_DATA);
SetIndexBuffer(15,Hmzz4,INDICATOR_DATA);
SetIndexBuffer(16,Lmzz5,INDICATOR_DATA);
SetIndexBuffer(17,Hmzz5,INDICATOR_DATA);
SetIndexBuffer(18,Lmzz6,INDICATOR_DATA);
SetIndexBuffer(19,Hmzz6,INDICATOR_DATA);
SetIndexBuffer(20,Lmzz7,INDICATOR_DATA);
SetIndexBuffer(21,Hmzz7,INDICATOR_DATA);
SetIndexBuffer(22,Lmzz8,INDICATOR_DATA);
SetIndexBuffer(23,Hmzz8,INDICATOR_DATA);
SetIndexBuffer(24,Lmzz9,INDICATOR_DATA);
SetIndexBuffer(25,Hmzz9,INDICATOR_DATA);
SetIndexBuffer(26,Lmzz10,INDICATOR_DATA);
SetIndexBuffer(27,Hmzz10,INDICATOR_DATA);
Да и, наверное, и с первыми 8 буферами также есть проблемы.
Потом задаю
PlotIndexSetInteger(8,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(9,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(10,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(11,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(12,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(13,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(14,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(15,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(16,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(17,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(18,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(19,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(20,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(21,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(22,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(23,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(24,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(25,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(26,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(27,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
PlotIndexSetInteger(8,PLOT_LINE_COLOR, propWave[0].colorWave);
PlotIndexSetInteger(9,PLOT_LINE_COLOR, propWave[0].colorWave);
PlotIndexSetInteger(10,PLOT_LINE_COLOR, propWave[1].colorWave);
PlotIndexSetInteger(11,PLOT_LINE_COLOR, propWave[1].colorWave);
PlotIndexSetInteger(12,PLOT_LINE_COLOR, propWave[2].colorWave);
PlotIndexSetInteger(13,PLOT_LINE_COLOR, propWave[2].colorWave);
PlotIndexSetInteger(14,PLOT_LINE_COLOR, propWave[3].colorWave);
PlotIndexSetInteger(15,PLOT_LINE_COLOR, propWave[3].colorWave);
PlotIndexSetInteger(16,PLOT_LINE_COLOR, propWave[4].colorWave);
PlotIndexSetInteger(17,PLOT_LINE_COLOR, propWave[4].colorWave);
PlotIndexSetInteger(18,PLOT_LINE_COLOR, propWave[5].colorWave);
PlotIndexSetInteger(19,PLOT_LINE_COLOR, propWave[5].colorWave);
PlotIndexSetInteger(20,PLOT_LINE_COLOR, propWave[6].colorWave);
PlotIndexSetInteger(21,PLOT_LINE_COLOR, propWave[6].colorWave);
PlotIndexSetInteger(22,PLOT_LINE_COLOR, propWave[7].colorWave);
PlotIndexSetInteger(23,PLOT_LINE_COLOR, propWave[7].colorWave);
PlotIndexSetInteger(24,PLOT_LINE_COLOR, propWave[8].colorWave);
PlotIndexSetInteger(25,PLOT_LINE_COLOR, propWave[8].colorWave);
PlotIndexSetInteger(26,PLOT_LINE_COLOR, propWave[9].colorWave);
PlotIndexSetInteger(27,PLOT_LINE_COLOR, propWave[9].colorWave);
PlotIndexSetInteger(8,PLOT_LINE_WIDTH, propWave[0].width);
PlotIndexSetInteger(9,PLOT_LINE_WIDTH, propWave[0].width);
PlotIndexSetInteger(10,PLOT_LINE_WIDTH, propWave[1].width);
PlotIndexSetInteger(11,PLOT_LINE_WIDTH, propWave[1].width);
PlotIndexSetInteger(12,PLOT_LINE_WIDTH, propWave[2].width);
PlotIndexSetInteger(13,PLOT_LINE_WIDTH, propWave[2].width);
PlotIndexSetInteger(14,PLOT_LINE_WIDTH, propWave[3].width);
PlotIndexSetInteger(15,PLOT_LINE_WIDTH, propWave[3].width);
PlotIndexSetInteger(16,PLOT_LINE_WIDTH, propWave[4].width);
PlotIndexSetInteger(17,PLOT_LINE_WIDTH, propWave[4].width);
PlotIndexSetInteger(18,PLOT_LINE_WIDTH, propWave[5].width);
PlotIndexSetInteger(19,PLOT_LINE_WIDTH, propWave[5].width);
PlotIndexSetInteger(20,PLOT_LINE_WIDTH, propWave[6].width);
PlotIndexSetInteger(21,PLOT_LINE_WIDTH, propWave[6].width);
PlotIndexSetInteger(22,PLOT_LINE_WIDTH, propWave[7].width);
PlotIndexSetInteger(23,PLOT_LINE_WIDTH, propWave[7].width);
PlotIndexSetInteger(24,PLOT_LINE_WIDTH, propWave[8].width);
PlotIndexSetInteger(25,PLOT_LINE_WIDTH, propWave[8].width);
PlotIndexSetInteger(26,PLOT_LINE_WIDTH, propWave[9].width);
PlotIndexSetInteger(27,PLOT_LINE_WIDTH, propWave[9].width);
При выводе на график рисуется непонятно что.
Картинка в МТ4 (так должно рисоваться):
Картинка в МТ5 (так рисуется. Цвет линий):
Сначала, после перехода, был недоволен МТ5, потом адаптировался к отличиям с МТ4, и жаловаться стало не на что. Вроде хочется сказать "Не, МТ4 в этом и этом лучше", но не могу, потому как разницы лично для моих кодов нет. Что четверка, что пятерка, работают одинаково. И там и там быстро... В общем, пятерка для меня стала чуть чуть лучше четверки именно из за требовательности. В остальном, всё тоже самое. Для меня.
Артем, как найти на форуме информацию о создании нескольких индикаторных буферов?
Интересует вопрос, как привязывать цвета и стили для нескольких индикаторных буферов.
У меня выводятся несколько зигзагов одновременно. Каждой линии зигзага необходимо задать свой цвет и стиль.
В МТ4 проблем не было. В МТ5 не нахожу, как это сделать. В описании языка об этом нет информации. Задавать цвет и стиль необходимо не через #property.
Задаю
#property indicator_buffers 28
#property indicator_plots 28
Проблемы с этими буферами:
Да и, наверное, и с первыми 8 буферами также есть проблемы.
Потом задаю
При выводе на график рисуется непонятно что.
В справке написано, что для цвета отрисовки необходимо задать номер индекса цвета в модификаторе (вторая форма вызова PlotIndexSetInteger()).
Параметры
plot_index
[in] Индекс графического построения
prop_id
[in] Идентификатор свойства индикатора. Значение может быть одним из значений перечисления ENUM_PLOT_PROPERTY_INTEGER.
prop_modifier
[in] Модификатор указанного свойства. Только свойства индексов цветов требуют модификатора.
prop_value
[in] Значение свойства.
Возвращаемое значение
В случае успешного выполнения возвращает true, в противном случае false.
PLOT_LINE_COLOR
Цвет отрисовки
color модификатор=номер индекса цвета
Значит - передайте в модификатор 0 - у вас же всего один буфер цвета для одной линии - т.е., вы же рисуете не цветным буфером (DRAW_COLOR_ZIGZAG), а обычным DRAW_ZIGZAG - значит и буфер цвета тут всего один, и его индекс должен быть нулевым.
Не утверждаю, что сам не ошибаюсь - давненько я не писал индикаторов - мог и подзабыть. Но одно время плотно занимался переделкой индикаторов с MQL4 на MQL5, и проблем с цветом не было.
Попробуйте.
Это все давно уже не актуально. Все работает. Проблемы сейчас другие. Но их решу. Просто в версии для МТ4 устранял старинную проблему. Сейчас там все работает как дОлжно. Можно и МТ5 заняться.
Хорошо. Просто мне пришло сообщение о том, что тут новое сообщение - глянул - и вправду ваше сообщение помечено цветом как новое - вот и ответил. А оказалось - совсем и не новое (если на дату глянуть) - видать новая выкладка сайта сделала своё дело...
Но если не секрет - я верно догадался? Хочется самому память освежить - не люблю забывать (а тут подзабыл)...
Но если не секрет - я верно догадался? Хочется самому память освежить - не люблю забывать (а тут подзабыл)...
Верно. У меня буферов получилось 18. Причем есть вывод какого-то параметра и через один буфер, и через два. Переключение производится через графический интерфейс. И здесь может быть и один Plot буфер и два. Этот фигуристый параметр поместил в конец списка буферов чтобы не производить программно смещение всех выше стоящих Plot-ов.
Всё верно говорят. Проблема в ChartRedrаw(). Прошел через эту проблему. Решается просто. Везде, где требуется обновление графика после пользовательского рисования, ставить флаг перерисовки(глобальный), а потом в таймере проверять его и вызывать ChartRedrаw() и обнулять флаг. Иначе, при постоянном вызове будут красные квадратики появляться.
Спасибо за совет, это сократило количество вызовов функции ChartRedrаw(), но мне не помогло с проблемой. У меня по непонятной причине при работе НЕ в тестере кнопки OBJ_BITMAP_LABEL сами по себе "отжимались", будучи нажатыми. Убрал ChartRedrаw(), не помогло. Убирал и добавлял еще много чего, но заставить работать нормально так и не смог. При том проблема вылезала только при запущенных нескольких копиях советника на разных графиках. Так и не нашел корень проблемы, видимо он закопан где-то в недрах терминала, а не в моём советнике. В итоге пришлось сделать 2 вида работы (и отрисовки) кнопок - для торгового режима через OnChartEvent и для тестера стратегий в обычном режиме через ObjectSetInteger(0,name,OBJPROP_STATE,false)/ObjectSetInteger(0,name,OBJPROP_STATE,true). Вышло неплохо, так как нажатия в торговом режиме стали более четкие и моментальные, не зависящие от таймера, при этом сохранилась работа кнопок в тестере (лично меня бесит, когда гоняешь советника в тестере и не можешь нажимать кнопки. Особо "гениальные" разработчики вообще создают торговые панели, которые не возможно протестировать в визуальном режиме для оценки функциональности продукта).