Обсуждение статьи "Знакомство с MQL5: написание простого советника и индикатора" - страница 5

 
Grzegorz Korycki:

Это не простой способ объяснить mql5 людям. (как будто у новичков вообще есть шанс понять это!) Это как с книгами по программированию, 90% людей не имеют понятия, как начать. Они открывают книгу, например, о программировании на Си, и первый "Простой пример" занимает целую страницу, написанную мелким шрифтом. За всю свою жизнь я прочитал только одну хорошую книгу по программированию, которая могла бы научить программированию любого. Причина в том, что их пишут, возможно, отличные программисты, но, к сожалению, очень плохие учителя. Программирование может быть очень простым, и я докажу вам это, сделав простой учебник по языку программирования MQL4, когда у меня будет немного больше времени, чем сейчас. Для всех - даже для абсолютных новичков. Самая большая ошибка - учить людей деталям языка, в основном они должны работать с ctrl+C и ctrl+v и использовать google для команд, и самое главное - держать все ОЧЕНЬ ПРОСТО. Я знаю 10+ языков программирования (программирую с 7 лет) и меня до сих пор пугает то, как объясняется этот "Легкий пример" на 11кб (!!!). Я хотел бы знать, есть ли хоть один настоящий начинающий программист, который изучил MQL5 на этом примере ;D. Сомневаюсь, а если и есть, то таких людей можно пересчитать по пальцам одной руки.

Как это верно. Я новичок в кодинге и могу сказать, что вы совершенно правы. Мне нужно понять, как устроен код. Как устроена программа. Я искал в Интернете учебник, который бы помог новичку разобраться. Это невозможно. Может быть, вы можете направить меня к такому учебнику? Видео, которое я скачиваю с youtube, все одно и то же. Спасибо
 

Ibrahim Melssen:
I have copy paste the Expert Advisor and try to test it with Strategytester. But it doesn't make any trades. I am new to MQL5 and programming so maybe I just made a stupid mistake. It compiled without any errors. I'd really like the strategy! Anyone ideas why it doesn't run on strategytester..?

То же самое с мужчинами. Не могу понять, почему.

 
Guin:

Я новичок в программировании на mql5.


Пытался научиться на этом примере, но немного запутался с циклом в конце построения индикатора. Где именно он присвоил значение переменной day_n?


Потому что цикл будет проверять day_n<day_t. Как программа может узнать значение day_n?



И как оно вообще вычисляется? Предположим, что rate_total = 10, и еще нет ни одного рассчитанного бара. Значит, prev_calculated = 0


day_t=time[0] (СЕГОДНЯ! так как отсчет ведется в обратном направлении)/PeriodSeconds... так как отсчет начинается с 1970 года, предположим, что отсчет начинается с 10 дней назад. так что должно получиться 10, верно?

Поэтому day_t=10. Теперь проверяется, не превышает ли dayt > dayn. Я не знаю dayn, но знаю, что dayt=10. Я собираюсь предположить, что dayn равен нулю, поскольку нет никакого значения.

Тогда dayn тоже станет 10. Хорошо.

Второй бросок цикла. prev_calculated + 1= 1.

DayT=time[1] (yesterday)/period... помните, он начинает отсчет с 10 дней назад... но теперь только до вчерашнего дня. это должно дать значение 9, верно?

Но теперь dayN < dayT - ложь. Тогда он начинает выполнять выражения else. Хорошо. Я понял.


Затем он вычисляет все bu[] и bd[]. Хорошо. Цикл завершится, когда prev < total rate станет ложным.

Но когда появится новый бар, и он снова станет истинным, я снова начну с нуля? Или он начнется с 10 и сразу перейдет к части else?


Спасибо!!!!

Вам нужно разделить на две части:

1 При первом применении индикатора времени к графику: prev_calculated =0 , i = 0, i++ пока i = rates_total не выйдет из цикла (time[0] это прошлое, а не настоящее).

2 Начинается новый бар: prev_calculated будет меньше rates_total, поэтому условие истинно, цикл будет выполняться только на этом новом баре

 

Привет @Guin,

Я не думаю, что на ваш вопрос был дан правильный ответ. Если вы использовали код из примера, то, скорее всего, в итоге у вас получился невидимый индикатор, который не имеет никакого смысла и не виден на графике. Это потому, что код никогда не проходит через этот блок:

if(day_n < day_t){
        day_n = day_t;
        h_day = high[i];
        l_day = low[i]
}

Причина в том, что day_n не устанавливается вручную в какое-либо значение по умолчанию, и сравнение day_n < day_t всегда будет иметь результат false. Согласно отладчику, значение day_n, когда оно не задано явно, равно "2076449103".

Просто измените определение day_n на что-то вроде:

int day_n = 0, day_t;


Надеюсь, это поможет.


Guin:

Я новичок в программировании mql5.


Пытался научиться на этом примере, но немного запутался с циклом в конце построения индикатора. Где именно он присваивает значение переменной day_n?


Потому что цикл будет проверять, что day_n<day_t. Как программа может узнать значение day_n?

[Удален]  

Отличная статья,

Спасибо, что поделились