Программирование на языке MQL4

Тема в разделе "Автоматизированная торговля - советники Форекс", создана пользователем HeavyHell, 15 окт 2015.

Рекламные объявления MyForex
  1. HeavyHell

    HeavyHell Знаток

    Баланс: 43.80 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    2.100
    Симпатии:
    1.013
    Адрес:
    BY
    Данный пост будет постоянно редактироваться для дополнения новыми главами - уроками - примерами.

    Оглавление
    1. Константы и переменные
    2. Типы данных


    1. Константы и переменные

    Для начала ознакомимся с базовыми понятиями языка MQL4. Начнем с констант и переменных.
    Думаю все мы помним из школьного курса, что константа это некое неизменное значение, а переменная в свою очередь значение может менять.
    В математике это можно описать примером y=5*x, где в этом случае 5 является константой, а x и y переменными. В MQL4 точно так же, константой может быть какое либо числовое, текстовое либо логическое выражение. И точно так же переменная кроме своего значения в данный момент времени имеет свое имя.
    Пример:
    Код:
    HiTrader = 'Привет трейдер'; // Текстовой переменной HiTrader присвоено значение константы 'Привет трейдер'

    2. Типы данных

    int - целые числа.
    double - действительные числа.
    bool - значения логического типа.
    string - значения строкового типа.
    color - значения цветового типа.
    datetime - значение даты и времени.

    Рассмотрим подробнее для чего и какие переменные используются.
    Данные типа int - это целые числа, и вполне логично что в наших случаях они используются для к примеру расчета количества пунктов для стопа-тейка, либо к примеру для подсчета необходимого количества баров на графике для принятия решения.
    Данные типа double - действительные числа, то есть числа имеющие как целую, так и дробную часть наиболее часто нами будет использоваться для получения текущей цены инструмента.
    Данные типа bool - значения логического типа. Принимают значения истина (True) либо ложно (False) В основном мы будем использовать для задания логики по ходу выполнения программы. К примеру если у какогото индикатора значение больше определенного значения то открываем ордер на покупку, если меньше то на продажу
    Данные типа string - значения строкового типа. По большому нами буду использоваться только для каких либо информационных сообщений на графике, либо к примеру в логе работы робота.
    Данные типа color - значения цветового типа. Могут задаваться тремя способами:
    Код:
    color ColorDec  = C'255,0,0'; // Переменной присвоено значение красного цвета в десятеричной системе (R - Красный, максимум 255 G - Зеленый, минимум 0 B - Синий, минимум 0)
    color ColorHex  = 0xFF0000;  // Переменной присвоено значение красного цвета в шестнадцатеричной системе (R - Красный, максимум FF G - Зеленый, минимум 00 B - Синий, минимум 00)
    color ColorText = Red;  //  Переменной присвоено значение красного цвета текстом
    Применяется для задания цветов текста и графиков.
    datetime - значение даты и времени.
    Данные типа datetime - значение даты и времени. Диапазон изменения значений: от 1 января 1970 года до 31 декабря 2037 года в памяти хранится как количество секунд прошедших с 1 января 1970 года. Служит для того, что бы выделять какие либо периоды к примеру на которых мы будем учитывать значения индикаторов


    Любые вопросы одобряются, как и говорил - начальные статьи будут крайне нудными и не интересными, однако они необходимы для понимания языка в целом.
     
    #1
    MysteriousStranger, Exnihilo, MaxZ и 3 другим нравится это.
  2. Sanyok11

    Sanyok11 Куратор конкурсов от FXOpen

    Баланс: 4.60 y.e.
    Регистрация:
    7 апр 2011
    Сообщения:
    3.687
    Симпатии:
    5.709
    Вот и обещанный материал... Как говориться: "первый раз в первый класс":)
     
    #2
    HeavyHell нравится это.
  3. Sanyok11

    Sanyok11 Куратор конкурсов от FXOpen

    Баланс: 4.60 y.e.
    Регистрация:
    7 апр 2011
    Сообщения:
    3.687
    Симпатии:
    5.709
    Спасибо. Все кратко и "понятно".

    Не понял только:
    И хотел уточнить:
    "HiTrader" переменная номинально или мы этой записью сделали ее таковой "Текстовой переменной HiTrader".
     
    #3
    HeavyHell нравится это.
  4. HeavyHell

    HeavyHell Знаток

    Баланс: 43.80 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    2.100
    Симпатии:
    1.013
    Адрес:
    BY
    По поводу
    HiTrader = 'Привет трейдер';
    HiTrader - Это переменная, по факту, мы могли ее обозвать к примеру так
    a = 'Привет трейдер';
    Просто в реальности, когда програмируешь проще давать переменным какое либо ассациируещее название. Бывает пишешь несколько програм, и я как человек который утверждает что проганье это таки творческая работа уверен что прогеры как и все творческие люди не постоянны. И что б не замыливать взгляд переключаемся с проекта на проект. И тут то и спасает внятное описание переменных. Смотришь - и понимаешь какая для чего нужна. У меня по студенчиству был прикол. Одновременный заказ от целой группы на курсачи. Основной проблемой был именно подчерк прогера... Оно палится на ура.
    Если я не правильно понял вопрос, то скорее всего ты имел в виду следующее.
    HiTrader - является ли переменной.
    Тогда да.
    примером
    HiTrader = 'Привет трейдер';
    UserName = 'HeavyHell';
    PrintGraf = HiTrader
    StringAdd(HiTrader,' '); // К текстовой переменноц HiTrader добавляем пробел в конец (это стандартная функция о чем я позже раскажу)
    StringAdd(HiTrader,UserName); // К текстовой переменой HiTrader добавляем UserName
    по результату переменная HiTrader Будет содержать 'Привет трейдер HeavyHell'
    Теперь по поводу дат.
    так сложилось что отсчет идет именно от 1 января 1970 года и вполне логично что точность дат нужна максимальная. поэтому она хранится в секундах. Ну а простую операцию в делении итого секунд от 1 января 1970 года до сегодня (к примеру) можно простым делением организовать
     
    #4
  5. Sanyok11

    Sanyok11 Куратор конкурсов от FXOpen

    Баланс: 4.60 y.e.
    Регистрация:
    7 апр 2011
    Сообщения:
    3.687
    Симпатии:
    5.709
    Получается что номинально любые данные в коде программирования являются переменными.
    Получается чтобы в коде не писать 11.11.1111 (дату) + (11:11) время. Можно написать 11111111 (точка по оси время).
     
    #5
  6. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 108.30 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.216
    Симпатии:
    4.278
    не-не, просто перед проганьем мы знаем какие данные нам нужно обработать, например ценновой уровень и насколько близко подходила к нему цена - эти данные могут меняться - они - переменные,

    поэтому прогая, мы сначала задаем переменные (которые будут меняться по ходу вычисления и походу движения цены):

    double level;
    int distance;


    а потом, по ходу, мы присваиваем им значения, например берем значение фрактала и присваиваем его значение переменной level:

    level = 1.1446; // ближайший уровень
    distance = 15; // цена приближалась на такое количество пунктов

    и это значение переменой level потом может 10 раз измениться, а вот число 1.1446 - это константа
     
    #6
    HeavyHell нравится это.
  7. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 108.30 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.216
    Симпатии:
    4.278
    я думаю до времени @HeavyHell еще дойдет, на самом деле время в МТ4 измеряется в секундах, прошедших с 1970 года ))).. каждому бару соотвествует свое количество секунд, и эти секунды можно перевести в нормально понимаемое время (эт все отдельный раздел)
     
    #7
    Sanyok11 нравится это.
  8. HeavyHell

    HeavyHell Знаток

    Баланс: 43.80 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    2.100
    Симпатии:
    1.013
    Адрес:
    BY
    Ну как бы я по этому сразу озвучил, что начало будет нудное и будут вопросы.
    Так то оно так, но в каждом конкретном случае мы по разному общаемся с ботом.
    Ребята и девченки, а так же их родители. ХЗ наверно чем то могу задеть овнеров проекта, но создам тут же тему обсуждения обучалок, и попрошу перекинуть вопросы не по теме урока в нее.
    Это логично и приведет все в более порядок. По причине того что я реально хочу развернуть тему програмирования широко.
    @Sanyok11, У формата дататайм на самом деле более широкий формат. Но у меня два варианта. Выкладывать свои мысли в последовотельности полуения информации, либо вываливать их так как нас фаршруют в институтах.
    Вывод мы можем делать в формате. тобишь к примеру формат тольуо год месяц число или формат гд месяц часто часов минут секунд.
    Я это все разверну и буду коректировать внутренние статьи дл крос ссылок на пояснения
     
    #8
  9. Sanyok11

    Sanyok11 Куратор конкурсов от FXOpen

    Баланс: 4.60 y.e.
    Регистрация:
    7 апр 2011
    Сообщения:
    3.687
    Симпатии:
    5.709
    Думаю так будет лучше. Чтобы тема для публикаций материала не разбавлялась вопросами интересующихся. Так как вопросы возникают не по "графику" публикаций и могут идти не "синхронно".
     
    #9
  10. MysteriousStranger

    MysteriousStranger Знаток

    Баланс: 1.30 y.e.
    Регистрация:
    13 авг 2015
    Сообщения:
    672
    Симпатии:
    333
    Адрес:
    Лакониев
    Обучение закончилось? )
    Там в разделе фриланс товарищ Макс скинул ссылку на Вы не можете видеть ссылку Ее нужно изучать или тут все будет?
     
    #10
  11. MysteriousStranger

    MysteriousStranger Знаток

    Баланс: 1.30 y.e.
    Регистрация:
    13 авг 2015
    Сообщения:
    672
    Симпатии:
    333
    Адрес:
    Лакониев
    В програмном коде это выглядело бы так:
    string HiTrader;
    HiTrader = "Привет Трейдер";
    color HiTrader = Red;
    ?
    Почему в вашем примере HiTrader заключено в одинарные кавычки? Оно же по идее должно быть в двойных?
     
    #11
  12. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 108.30 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.216
    Симпатии:
    4.278
    а вот это - "не то пальто" ) а предыдущее верно..
    просто одна переменная не может быть двух типов - string и color, либо то, либо другое
     
    #12
    Sanyok11 и MysteriousStranger нравится это.
  13. MysteriousStranger

    MysteriousStranger Знаток

    Баланс: 1.30 y.e.
    Регистрация:
    13 авг 2015
    Сообщения:
    672
    Симпатии:
    333
    Адрес:
    Лакониев
    Ааа, спасибо). А как сделать этот текст определенным цветом? Или это уже более сложная операция?
    Честно говоря голова разболелась сильно... очень все такое совсем не знакомое, мозг кипит...
    Но интересно! Пока что... Дошел до "операции и выражения"... тут уже клинить начало... то ли от усталости, то ли от сложности
     
    #13
  14. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 108.30 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.216
    Симпатии:
    4.278
    зависит от того, как этот текст выводиться будет.. в некоторых случаях цвет придать не удастся..

    можно вывести через Alert(HiTrader); можно через Comment(HiTrader); - получится надпись слева вверху (под названием инструмента), можно через ObjectCreate создать текст или метку и уже ей присвоить цвет через ObjectSet - изменить у объекта качество - цвет

    Из недавнего скрипта, что делал для @Sanyok11 :

    ObjectCreate(0,"Fibo1",OBJ_FIBOCHANNEL,0,line1_time1,line1_price1,line1_time2,line1_price2,t3,p3);
    ObjectSetInteger(0,"Fibo1",OBJPROP_COLOR,other_lines_color);


    первой строчкой создается объект через ObjectCreate - фибо-канал, во второй строчке через ObjectSet устанавливается свойство этого канала OBJPROP_COLOR (цвет) - в нужный цвет
     
    #14
    Sanyok11 и MysteriousStranger нравится это.
  15. Sanyok11

    Sanyok11 Куратор конкурсов от FXOpen

    Баланс: 4.60 y.e.
    Регистрация:
    7 апр 2011
    Сообщения:
    3.687
    Симпатии:
    5.709
    На сколько я понимаю нужно учится "читать строку кода". Для этого не помешает знание английского и принципов последовательностей.
     
    #15
  16. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 108.30 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.216
    Симпатии:
    4.278
    с английским конечно попроще будет, так как Object - объект, Create - создать, и код понимается при этом естественно - СоздатьОбъект - ObjectCreate.. Set - устанавливать, настраивать.. и получается НастроитьОбъект - ObjectSet.. и все прочее тоже..

    а последовательность парметров - кликаешь F1, когда курсор находится на нужной функции - и тут же полная справка появляется, какие параметры требуется вписать, чтобы функция работала
     
    #16
    Sanyok11 нравится это.
  17. MysteriousStranger

    MysteriousStranger Знаток

    Баланс: 1.30 y.e.
    Регистрация:
    13 авг 2015
    Сообщения:
    672
    Симпатии:
    333
    Адрес:
    Лакониев
    Арифметические операции:
    Символ "/ " - Частное от деления Пример: x / 5... //это как? Что значит "частное"? Почему не просто "деление"?
    Символ "%" - Остаток от деления Пример: minutes = time % 60" // А это что значит?

    Операции присваивания
    похожее:
    Символ "%=" Остаток от деления значения переменной : y на x. Пример: y %= x Аналог: y = y % x

    Или достаточно совсем этим просто ознакомится? Куда пропал Маэстро?)

    Или вот еще:
    "Побитовая операция И двоичных представлений x и y. Значение выражения содержит 1 (ИСТИНА) во всех разрядах, в которых и x, и y содержат не ноль; и 0 (ЛОЖЬ) во всех остальных разрядах.

    b = ((x & y) != 0); " :dash1:
    Такие вот моменты вообще непонятные...
     
    #17
  18. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 108.30 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.216
    Симпатии:
    4.278
    да забей, мне это ни разу не пригодилось :Hi:

    Вот как было у меня, как я вообще научился mql4 с нуля: Однажды мне показалось, что я нашел грааль, он заключался в паттерне на индикаторе, но было легко его пропустить в обилии валютных пар в терминале, а хотелось же все-все-все сигналы взять. Если заказать сигнализатор паттерна - это надо платить кому-то за реализацию, да еще и отдать грааль - ужос :Shok: . На это я не был готов пойти. И взялся за mql4. Пошел на тот же сайт, куда тебя отослали - там еще много обзорных статей, типа - "пишем свой первый индикатор" - и вот по образцу по шагам начинаешь писать свое, по ходу изучая детали (жмешь хотя бы F1 на интересующих функциях).

    Индикатор я в итоге написал за два дня - но они ушли конечно полностью. Через семь дней уже был первый советник. Конечно он не был полноценным, скорее примитивным, но он открывал позицию по сигналу, ставил тэйк и стоп. А дальше только набор нюансов, мелких.. На изучение основного хватит и недели. ТОЛЬКО НУЖНА СВОЯ ЗАДАЧА! что именно реализовать в коде

    P.S. грааль оказался не граалем
     
    #18
    Sanyok11 и MysteriousStranger нравится это.
  19. alexandr1115

    alexandr1115 Пользователь

    Баланс: 0.00 y.e.
    Регистрация:
    19 дек 2015
    Сообщения:
    340
    Симпатии:
    34
    Народ подскажите, сколько сейчас стоит написать индикатор? и где это можно сделать самое главное, либо может здесь на форуме вообще может кто то помочь с этим или какая то книжка существует по написанию индикаторов, посоветуйте хоть что нить!
     
    #19
  20. Neo-30

    Neo-30 MyForex Team
    Команда форума

    Баланс: 108.30 y.e.
    Регистрация:
    11 авг 2015
    Сообщения:
    4.216
    Симпатии:
    4.278
    да есть ветка - Фриланс, выбирайте любого кто отметился, можете здесь обрисовать в общем виде что требуется и насколько готовы вложиться.. Изучить можно по статьям на сайте MQL - есть подробные разборы написания простых индикаторов - дальше по образу и подобию повторить..

    P.S. я иногда что-то пишу на mql4, как здесь
     
    #20
Похожие темы
  1. Preacher
    Ответов:
    50
    Просмотров:
    9.308
Загрузка...

Загрузка...