Первый класс. Учимся писать и считать.

Vladimirjurav

Активный участник
По просьбе товарищей с форума решил создать такую тему. Сразу говорю, я не программист. Здесь не будет нудных классических уроков, начиная с азов программирования. Прошу участвовать в обсуждении желающих разобраться в принципе работы индикаторов, скриптов, советников, на конкретных примерах.
По аналогии с автомобилем. Практически все мы водители. Но желание и возможность разобраться как работают все узлы автомобиля, есть далеко не у всех. Но элементарно, заменить колесо, аккумулятор, лампочку, фильтры и масло могут неверное многие.
Начну вот с чего.
Есть конкретная задача. Вставить в советник так приглянувшийся индикатор, ну почти Грааль. И потестить этот сов, посмотреть как он с маху заработает тебе лимоны и нарубит капусты..
Сразу говорю, я не претендую на истину в последней инстанции, тем более я повторяю, я не прогер.
Серьезных прогеров, если что, прошу сильно не пинать, а при желании и возможности поправить и подсказать.
У меня есть любимый советник, в который я вставляю, меняю индюки для тестирования. Хочу показать как я это делаю.. и что для этого надо знать.
Сразу надо условиться, лезть будем туда, где хоть что то понимаем.
Основное правило, не ломай работающий механизм. Если сломал, советник перестал работать.. Поставь деталь обратно.
И надо понимать, сама ложка в рот не полезет, надо думать и вникать ..

Пока вступление всё.. Далее будет все конкретно.
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Сидит программист, работает. Подходит сын и спрашивает:
- Пап, а почему солнце встаёт на востоке, а не на западе?
- Ну сколько раз тебе говорить, Не трогай отлаженную систему...


Похвально желание разобраться. Но если разбираться, то до самых косточек, а не просто куда какой кубик положить...
 

Vladimirjurav

Активный участник
Похвально желание разобраться. Но если разбираться, то до самых косточек, а не просто куда какой кубик положить...
Согласен. Если у серьезных прогеров будет желание и возможность, подсказать, поправить и дополнить, было бы здорово. Только без троля..
Разговаривал с некоторыми. Говорю как да что? Говорят также ковыряли программы и учились. Базовое образование на тему программирования мало у кого есть. На самом деле это видно и по форуму.
 

Vladimirjurav

Активный участник
Продолжим.. или начнем. Язык программирования, на то он и язык, как иностранный. За границей мы ведь должны иметь, хоть какое-то представление о языке. Можем почерпнуть у других знания. Например- vodka tomato или - ту виски кола..
В языке программирования существуют обязательные вещи которые мы должны знать и внимательно за этим следить.
Итак азы.. Для начала это скобки, кавычки и другие знаки которыми так не любят пользоваться те кто пишет СМС.
Их целая таблица, например - }, ), ", ; в общем их куча. Основное правило не потерять их и не стереть, когда что то редактируем в коде программы. Каждая точка, запятая и кавычка имеют смысл, а не поставлены просто так. Почему это. Комп не человек, он не понимает что вы начинаете или уже закончили свою мысль, или действие. Для этого и ставится такая скобка. И если скобка или кавычка стоит перед действием. Она должна быть обязательна закрыта, стоять после действия. Иначе комп будет думать что вы дальше продолжаете действие, а он же еще первое не закончил и напишет вам в журнале ошибок красным просто дофига. А все из за одной потерянной скобки.
Еще программисты пользуются символами которые понимает комп.
Их тоже много. Пока два которые нам нужны, это как в русском языке, союз - И , и еще союз ИЛИ. Союз И, обозначится двумя закорючками &&. Союз ИЛИ двумя черточками l l. Что это значит.
Мы хотим что бы советник открывал сделку когда зеленая линия индикатора Грааль поползла вверх и в тоже время цена была над трендовой линией индикатора МА.
В коде это будет написано примерно так (iClose_Signal > iMA_Signal && iGraal_Signal > 0) т.е. сигнал закрытия бара выше сигнала индикатора МА и сигнал индикатора Грааль больше нуля. По аналогии прописывается условие ИЛИ.

Это пока основное что нам нужно что бы двигаться дальше. А дальше разберемся как же сделать так что бы советник увидел что индикатор "Graal" начал рисовать зеленую линию или нарисовал стрелку в верх и ему пора открывать сделку в buy на покупку.
 
Последнее редактирование:

vladradon

Программист
Когда будете работать с редактором, а учиться быстрее получится, если взять какую-то простенькую рабочую программку (сова или индикатор), алгоритм работы которой вы знаете, но не знаете как это работает в коде, удобно пользоваться встроенным справочником по языку. Для этого в коде просто нужно мышкой выделить то, что вас интересует (это может быть какая-то функция - они выделяются цветом, или просто выделить какой-то арифметический знак типа +) и нажать кнопку на клавиатуре F1. Справочник достаточно информативный, хоть и рассчитан больше на тех, кто знает уже основы программирования. Но для новичка во многих случаях может быть очень полезен - не нужно постоянно лезть в интернет за информацией.
 

AlexeyVik

Программист mql4 mql5
Комп не человек, он не понимает что вы начинаете или уже закончили свою мысль, или действие.
Когда-то М. Ботвинник сказал, что компьютер это идиот. Вот руководствуясь этим и надо подходить к программированию. Надо понимать, что как заложено в программу, так и будет выдаваться результат. И если результат отличается от ожидаемого, то значит вы что-то не так сделали. Никогда не ищите ошибки или баги языка программирования.
 

Vladimirjurav

Активный участник
Будем разбираться, что нужно, что бы советник увидел индикатор. Смотрим что говорят по этому поводу уважаемые программисты:
"Доброго дня, а под этот индикатор реально сделать советник ?
Да, без проблем. В нем уже есть все сигналы - просто вытаскиваешь их обычным iCustom в любого сова (можно уже готовый взять индикаторный и вставить этот индюк туда)."
Так вот, вопрос, а где же эти сигналы в индикаторе?
Про iCustom чуть позже.
Ответ, в буферах. При чем, сигналы там могут быть совершенно разные, и 0 и 1, и -1, и меняющееся относительно нуля числовое значение, и в минус и в плюс. И число соответствующее котировки валютной пары. И очень смешное число, встречается довольно часто, меняться может на любое другое значение, вы это увидите. Выглядит оно в буфере вот так: 2147483647.00000000 и пишется в советнике вот так: EMPTY_VALUE и называется , как ни странно, "Пустое значение в индикаторном буфере". Где-то прочитал объяснение: т.к. любое другое может быть значением индикатора, ну и фиг с ним.. Вот это все вы и советник можете увидеть в буферах.
Как нам посмотреть все же, и точно знать, что в буферах индикатора, что бы потом написать советнику, мол так и так: число 1 - значит зеленая вверх, -1 значит красная в низ.. это как вариант.
Для этих целей я использую небольшой советник. В который вставляю название индикатора, включаю тест и он пишет, в левом верхнем углу экрана на графике, номере буферов и что там и как меняется в зависимости от показаний индикатора.
 

AlexeyVik

Программист mql4 mql5
Будем разбираться, что нужно, что бы советник увидел индикатор. Смотрим что говорят по этому поводу уважаемые программисты:
"Доброго дня, а под этот индикатор реально сделать советник ?
Да, без проблем. В нем уже есть все сигналы - просто вытаскиваешь их обычным iCustom в любого сова (можно уже готовый взять индикаторный и вставить этот индюк туда)."
Так вот, вопрос, а где же эти сигналы в индикаторе?
Про iCustom чуть позже.
Ответ, в буферах. При чем, сигналы там могут быть совершенно разные, и 0 и 1, и -1, и меняющееся относительно нуля числовое значение, и в минус и в плюс. И число соответствующее котировки валютной пары. И очень смешное число, встречается довольно часто, меняться может на любое другое значение, вы это увидите. Выглядит оно в буфере вот так: 2147483647.00000000 и пишется в советнике вот так: EMPTY_VALUE и называется , как ни странно, "Пустое значение в индикаторном буфере". Где-то прочитал объяснение: т.к. любое другое может быть значением индикатора, ну и фиг с ним.. Вот это все вы и советник можете увидеть в буферах.
Как нам посмотреть все же, и точно знать, что в буферах индикатора, что бы потом написать советнику, мол так и так: число 1 - значит зеленая вверх, -1 значит красная в низ.. это как вариант.
Для этих целей я использую небольшой советник. В который вставляю название индикатора, включаю тест и он пишет, в левом верхнем углу экрана на графике, номере буферов и что там и как меняется в зависимости от показаний индикатора.
Это называется "Метод научно-технического тыка...". Но для определения достаточно понимать что в индикаторе при запуске можно увидеть и даже изменить цвет отображения. Так вот номер слева это и есть номер буфера индикатора, который идет предпоследним параметром в функции iCustom. А в коде индикатора номера буферов определяются строкой

SetIndexBuffer(номер_буфера, имя_массива);
 

Vladimirjurav

Активный участник
Советник конечно не сам придумал. Всё взял из интернета, спасибо автору.
Посмотрим для начала буферы известного индикатора: SuperTrend.
Где же они в индикаторе. Визуально вы можете посмотреть в свойствах индикатора. На вкладке Цвета. Видите? 0 - Lime. 1 - Red.
Это и есть буферы. Все очень просто. Кстати в буферах счет начинается с нуля. И как меня любезно поправил известный прогер, говорится - буферы а не буфера, ударение на У..
Т.к. он говорит, буфера бывают только у женщин а в программах буферы..
Можете, ведь, открыть и посмотреть код индикатора?.
Правой кнопкой мыши щелкаете по индюку. Нажимаете Изменить. Открывается программа MetaEditor. И вот весь код индикатора на ладони. Начало кода, написано:#property indicator_buffers 2. Значит в этом индикаторе 2 буфера. Может быть и 5 и 10.

/+------------------------------------------------------------------+
//| SuperTrend.mq4 v1.2 |
//| Copyright © 2008, Jason Robinson (jnrtrading). |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Jason Robinson."
#property link "http://www.spreadtrade2win.com"

#property indicator_chart_window
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_buffers 2
double TrendUp[], TrendDown[];
int changeOfTrend;
extern int Nbr_Periods = 10;
extern double Multiplier = 3.0;

Точно так, мы будем открывать и смотреть код советника и. т. д.
В верху, в левом углу на графике видите значения: iTrend0 = 1.14501100 , а iTrend1 = 2147483647.00000000. Это и есть значения которые запрятаны в эти буферы. Т.е. мы видим сейчас на графике зеленая линия - нулевой буфер имеет значение: 1.14501100, а первый буфер значение: 2147483647.00000000 т. е. EMPTY_VALUE. Когда цвета изменятся, изменятся и значения.
Вы сами можете посмотреть код советника, которым мы смотрели значения буферов. Он прилагается. Все это я почерпнул из ролика на YouTube:


Дальше вкратце пробежимся по коду этого советника и займемся основной задачей. Чтобы наш рабочий советник увидел индикатор SuperTrend.
 

Вложения

  • SuperTrend.png
    SuperTrend.png
    118,4 КБ · Просмотры: 102
  • Test_SuperTrend.ex4
    5,8 КБ · Просмотры: 11
  • Test_SuperTrend.mq4
    1,6 КБ · Просмотры: 23
Последнее редактирование модератором:

Vladimirjurav

Активный участник
Ну что же, вижу, раз вопросов и обратной связи нет, особого интереса к теме, как подключить индикатор к советнику, наверное нет. Все же, я доведу тему до конца. Наверное это будет полезно и интересно новичкам. Т.к. то что описываю, найдено и усвоено по крупицам с этого форума и инета. Под конец расскажу как скачать и вставить в терминал архив котировок для тестирования. Все это конечно отсюда. Наверное повторяюсь. Но повторение мать учения. И это будет в одном месте для этой темы.
 
Последнее редактирование:

astromc

Новичок форума
с чего взял - что не интересно?
начал - продолжай.
будут вопросы- зададут.
не сейчас так через неделю, или через год.
когда кто тему найдёт - тогда и вопросы будут - мы же не на лекции
такова уж реальная объективность интернет форумов
вопросы лет через пять ))) ну или уточнения на не отвеченный вопрос
++++++++++++++++++++++++++++++++++++++++++++++++
мне вообще интересно как в зависимости от изменения характера рынка
(по показаниям тех же объёмов, atr и прочего)
изменять характеристики используемых индикаторов
 
Последнее редактирование:

Vladimirjurav

Активный участник
мне вообще интересно как в зависимости от изменения характера рынка
(по показаниям тех же объёмов, atr и прочего)
изменять характеристики используемых индикаторов
Глубоко копаешь.. но вопрос действительно интересный..
 

Vladimirjurav

Активный участник
Видеоролик посмотрели. Немного повторюсь.. В советнике, которым мы смотрели буферы, если мы его откроем в программе MetaEditor, мы видим такие строчки взятые в кавычки:

double iTrend0 = iCustom(NULL, PERIOD_M15, "SuperTrend", 0, 1);
double iTrend1 = iCustom(NULL, PERIOD_M15, "SuperTrend", 1, 1);

Comment("iTrend0 = " + DoubleToString(iTrend0) + "\n" +
"iTrend1 = " + DoubleToString(iTrend1));

В них мною вставлено название индикатора "SuperTrend", из которого, этот советник с помощью функции iCustom берет данные из буферов, и функцией Comment выводит нам на экран.
Посмотрим данные в буферах другого индикатора, где больше буферов. Например индикатор SMINEw. Смотрим в коде программы, там целых восемь буферов. Заменяем название индикатора в коде нашего советника Test_SuperTrend. И вообще сохраняем его под другим названием : TestSMINEw
Получится так:
double iSMINEw0 = iCustom(NULL, PERIOD_M15, "SMINEw", 0, 1);
double iSMINEw1 = iCustom(NULL, PERIOD_M15, "SMINEw", 1, 1);
double iSMINEw2 = iCustom(NULL, PERIOD_M15, "SMINEw", 2, 1);
double iSMINEw3 = iCustom(NULL, PERIOD_M15, "SMINEw", 3, 1);
double iSMINEw4 = iCustom(NULL, PERIOD_M15, "SMINEw", 4, 1);
double iSMINEw5 = iCustom(NULL, PERIOD_M15, "SMINEw", 5, 1);
double iSMINEw6 = iCustom(NULL, PERIOD_M15, "SMINEw", 6, 1);
double iSMINEw7 = iCustom(NULL, PERIOD_M15, "SMINEw", 7, 1);

Comment("iSMINEw0 = " + DoubleToString(iSMINEw0) + "\n" +
"iSMINEw1 = " + DoubleToString(iSMINEw1) + "\n" +
"iSMINEw2 = " + DoubleToString(iSMINEw2) + "\n" +
"iSMINEw3 = " + DoubleToString(iSMINEw3) + "\n" +
"iSMINEw4 = " + DoubleToString(iSMINEw4) + "\n" +
"iSMINEw5 = " + DoubleToString(iSMINEw5) + "\n" +
"iSMINEw6 = " + DoubleToString(iSMINEw6) + "\n" +
"iSMINEw7 = " + DoubleToString(iSMINEw7));
Компилируем.. (что переводится как: стырили сложили в кучу, ну или внесли изменения, пересчитываем..) Так вот - пересчитываем или компилируем. Программа создает скомпилированный файл с расширением ex4. В этом файле исполняемый код ( код советника для компьютера), в нем мы править ничего не можем. Править можем только в файлах , с расширением mq4. (там код программы для нас). И главное не выбрасываем ни какие кавычки, скобки и т.д. Меняем только то что понимаем. Не ломаем работающий механизм.. А то в журнале будет куча ошибок красным.
Индикатор SMINEw и новый тестовый советник прикреплен внизу..
Запускаем в тестере, смотрим в верхнем левом углу значения буферов.
Соотносим с данными на вкладке Цвета индикатора, и смотрим, при изменении или появлении чего на графике, что меняется в буферах.
Вот основные данные которые нам надо знать и получить от индикатора.
Далее разберем как прописать в нашем рабочем советнике эти данные из буферов индикатора и его настройки, что бы советник работал с ним по нашему желанию.
 

Вложения

  • SMINEw.png
    SMINEw.png
    135,5 КБ · Просмотры: 103
  • SMINEw.ex4
    25,2 КБ · Просмотры: 17
  • SMINEw.mq4
    16,9 КБ · Просмотры: 30
  • Test SMINEw.ex4
    5,8 КБ · Просмотры: 14
  • Test SMINEw.mq4
    2,3 КБ · Просмотры: 28

Vladimirjurav

Активный участник
Блин жаль, модератор убрал, только появилась обратная связь с Народом.. Не успел ответить. Серьезно человек так сказал, как отрезал: "Ну нафиг, мне это ваше программирование, пойду работать.." Правильное решение, взвешенное, каждому свое..

А-уу.. Господа и дамы, мужики и барышни.. Тут если чё.. в правом углу есть синяя рука с пальчиком. Если: Спасибо, все ясно и понятно по теме, нажимаете, пальчик вверх. Если считаете что гоню всякую ерунду - пальчик в низ..
 

Dimdimich

Активный участник
А-уу.. Господа и дамы, мужики и барышни.. Тут если чё.. в правом углу есть синяя рука с пальчиком. Если: Спасибо, все ясно и понятно по теме, нажимаете, пальчик вверх. Если считаете что гоню всякую ерунду - пальчик в низ..

Всем привет!*hi*
Vladimirjurav, только день-два как нарвался на Вашу тему. Немного даже успел прочитать (разгар рабочей недели). Так как не много успел, то и вопросов пока нет. Но интересно. Спасибо за Ваш труд!:)
А вопросы еще будут....:D
 
Верх