Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Игорь, желание изучать язык MQL5 не пропадает, а наооборот, только усиливается. Меня просто разрывает, почему такой тупой и не могу понять простые вещи с этим оператором цикла. Главное без оператора цикла код работает идеально, а с циклом полный ступор. Всё-равно докапаюсь до истины. Правда, времени стало гораздо меньше для самообучения, т.к. закончился карантин и на работе появляются редкие моменты, чтобы заниматься изучением языка. В основном разбираюсь с языком вечером и до поздней ночи.
Чтобы наконец-то перейти непосредственно к написанию кода Трейлинг Стопа, мне нужно до конца разобраться и решить 2-е задачи:
Владимир, Вы в какие-то дебри лезете. Вам дан был шаблон: https://www.mql5.com/ru/forum/352460/page58#comment_18726492 Вы его проигнорировали и решили идти напролом своим умом. Такая дорога трудна и может затянутся на годы. По дороге изучите Си, Си++, Rust, C#, полиморфизм, наследование, разыменовывание указателей, динамическое приведение типов - но Вы уж определитесь с целью: Вам шашечки или ехать. К цели надо идти кратчайшем путем. Если хотите трейлинг - пишите трейлинг. Не надо изучать Си и Си++ для этого. Это все потом в качестве факультатива, если возникнет желание.
Ситуация с циклом for показательная. Это мощная конструкция, которую нужно применять к месту. У Вас неттинг и вспомогательный алгоритм. Поэтому нет перебора позиций, нет никаких мэджиков, поэтому нет и этого цикла. Естественно без него у Вас все работает, а с циклом получается масло масленное. Но Вы упорно пытаетесь его обязательно использовать, видимо это является самоцелью: как можно больше использовать всего и всякого, на про запас, что бы было.
Владимир, Вы в какие-то дебри лезете. Вам дан был шаблон: https://www.mql5.com/ru/forum/352460/page58#comment_18726492 Вы его проигнорировали и решили идти напролом своим умом. Такая дорога трудна и может затянутся на годы. По дороге изучите Си, Си++, Rust, C#, полиморфизм, наследование, разыменовывание указателей, динамическое приведение типов - но Вы уж определитесь с целью: Вам шашечки или ехать. К цели надо идти кратчайшем путем. Если хотите трейлинг - пишите трейлинг. Не надо изучать Си и Си++ для этого. Это все потом в качестве факультатива, если возникнет желание.
Ситуация с циклом for показательная. Это мощная конструкция, которую нужно применять к месту. У Вас неттинг и вспомогательный алгоритм. Поэтому нет перебора позиций, нет никаких мэджиков, поэтому нет и этого цикла. Естественно без него у Вас все работает, а с циклом получается масло масленное. Но Вы упорно пытаетесь его обязательно использовать, видимо это является самоцелью: как можно больше использовать всего и всякого, на про запас, что бы было.
Здравствуйте, Василий!
Спасибо Вам за то, что как всегда вовремя подключаетесь к теме и направляете на путь истинный. Теперь разложу всё по-порядку:
Василий, за наставление и конструктивную критику премного благодарен! Также выражаю огромную благодарность всем участникам данной темы, которые как могут, так и помогают мне в самообучении языку программирования MQL5 с полного нуля.
Самообучение продолжается. To be contined (продолжение следует).
С уважением, Владимир.
Всем добрый день!
Хотел немного добавить, тема интересна, мне кажется сама идея "Самообучение языку MQL5 с полного нуля" не совсем верна, если человек 0 в программировании, то ему для начала нужно научиться программировать. Если цель научиться программировать именно на MQL с нуля, то нужно вначале научиться программировать на С, хотя-бы самый базис, а потом научиться писать на MQL, так как MQL это по сути С и есть, но специализированый, заточенный под определенную задачу, человек не понимает как циклы работают, а уже пытается во всю программы писать. Это все равно, что пытаться выучить феню не зная русского...
Другое дело, что С не самый дружелюбный язык для изучения программирования, он прост, но через чур лаконичен, новичку сложно читать и понимать код, не имея базовых понятий об алгоритмах, типах данных, булевой алгебре. в С три символа подряд могут нести смысл нескольких строк в другом языке.
Чтобы научиться просто программировать с нуля, для базы, чтобы научиться говорить с компьютером на одном (неважно пока каком) языке, я бы посоветовал начать с Pascal'я, самую простую книгу для начала прорешать на нем (недели 2-3 на расслабоне), потом С (тут после паскаля неделя максимум при усердии, освоить синтаксис, я про базовые знания языка!) а уже потом браться за специализированные языки типа MQL, потому, что MQL - это С, с небольшими заморочками но и упрощениями, так как заточен на одну задачу и очевидное компилятор знает сам. А С в свою очередь, это такой сжатый RARом паскаль, ну а паскаль почти английский =).
Теперь по циклам:
Мне когда учился программировать помогла аналогия с суммой в алгебре, где указываются начальное значение n, конечное значение n и формула с этим n для расчета.
Здравствуйте, Андрей! С базисом полностью с Вами согласен. У меня его нет и не было. Но, как говорится - Москва не сразу строилась! За советы и подсказки Вам спасибо!
С уважением, Владимир.
Да. Согласен - его коды тож гуд! Вы себя накручиваете на пустом месте. Спокойно разбирайтесь в коде без спешки и все. Вот же все элементарно здесь - выбрали и тралим: (куда уж проще - как раз ваша тема выбора НУЖНОЙ позиции... :-))
Кроме этого, включаемые файлы - это значит, что они у вас в коде типа также расположены в виде функций и все.
Спасибо, Роман, за коды и ссылки! Разбираюсь с кодами спокойно и точно никуда не тороплюсь!
С уважением, Владимир.
Всем доброго дня и хорошего настроения!
Продолжаю изучение языка программирования MQL5. Сегодня, как и обещал, выкладываю на всеобщее обозрение код шаблона советника, предназначенного для написания трейлинг стопа. В связи с тем, что код шаблона советника получился достаточно громоздким, поэтому пришлось максимально сократить комментарии. Полную версию советника с подробными комментариями каждой строчки кода, в изложении доступном для ученика 1-го класса школы программирования, опубликую позже в виде файла c рабочим названием Trailing_Stop.mq5, чтобы не плодить на сайте очередную "портянку".
Перед публикацией кода была произведена проверка работы советника в тестере стратегий. Проблемы не выявлены. В советнике применена неттинговая система учёта позиций. Эта система учета подразумевает, что в один момент времени на счете может быть только одна открытая позиция по одному и тому же символу (финансовому инструменту).
На настоящий момент в советнике реализована возможность:
Кроме того, в советнике предустановлен шаблон, любезно предоставленный Василием Соколовым, который в ходе процесса самообучения будет наполняться кодом.
ПРЕДУПРЕЖДЕНИЕ!!!
Советник разрабатывается согласно плана самообучения для демо-счёта и исключительно в учебных целях! Не предназначен для торговли на реальном счёте и извлечения прибыли!
С уважением, Владимир.
Всем доброго дня и хорошего настроения!
Продолжаю изучение языка программирования MQL5. Вчера написал код перестановки стоп лосса в безубыток для позиций Buy и Sell. Выкладываю код пока без подробных комментариев. Полную версию советника с подробным описанием каждой строчки кода, в изложении доступном для ученика 1-го класса школы программирования, опубликую позже в виде файла c рабочим названием Trailing_Stop.mq5. Перед публикацией кода была произведена проверка работы советника в тестере стратегий. Проблемы не выявлены.
С уважением, Владимир.
Всем доброго дня и хорошего настроения!
Продолжаю изучение языка программирования MQL5. Сегодня, как и обещал, выкладываю на всеобщее обозрение код шаблона советника, предназначенного для написания трейлинг стопа. В связи с тем, что код шаблона советника получился достаточно громоздким, поэтому пришлось максимально сократить комментарии. Полную версию советника с подробными комментариями каждой строчки кода, в изложении доступном для ученика 1-го класса школы программирования, опубликую позже в виде файла c рабочим названием Trailing_Stop.mq5, чтобы не плодить на сайте очередную "портянку".
...
Очень хорошо. Главная мысль схвачена верно. Особенно понравился процесс разработки:
Всем доброго дня и хорошего настроения!
Продолжаю изучение языка программирования MQL5. Вчера написал код перестановки стоп лосса в безубыток для позиций Buy и Sell. ...
Т.е. Все правильно. Не надо решать задачу всю сразу с наскока в одном месте. А делаете постепенно, как у Вас и произошло. Сначала описываете основную логику в функции OnTick и основные функции типа OpenBUY, OpenSELL, TickUP, TickDown.
Затем когда этот основной код отлажен, компилируется и работает в рамках его возможностей, начинаете описывать другие функции. Это можно сделать на следующий день, или даже неделю. При этом основной код уже изменять не нужно. Почему, думаю Вы уже это видите.
Теперь Вам нужно отточить эту манеру разработки: продолжайте писать функции, навешивая функционал через них к уже существующему коду. Существующая программа должна работать корректно. Сложность не должна расти. Добавляемые функции должны возвращать простые, ясные результаты. Их названия должны быть такими жи простыми и ясными для Вас. Если не получается так сделать, возможно причина в том, что нужно для решения задачи написать ни одну функции а две или даже три. Поначалу, общий каркас приложения будет тяжело определить. Поэтому лучше обращаться с советом к более опытным товарищам. Со временем Вы научитесь разрабатывать такие шаблоны самостоятельно.
Что бы функция решала возложенные на нее задачи, со временем, Вам потребуется использовать все больше и больше языковых конструкций внутри таких функций. Вот тогда Вы постепенно и главное органично станете расширять свои познания в конструкциях языка, изучите циклы, массивы и даже работу с указателями.
По сути, самое сложное в программировании Вы уже изучили, хотя пока еще не закрепили пройденный материал. Осталось многократно повторить это для закрепления. Дальше ничего принципиально нового не будет, все тоже самое: Общий шаблон -> Описание названий функций и их параметры-> Написание содержимого этих функций -> компоновка этих функций в центральном блоке. Все. Останется только совершенствовать навык и быть последовательным. Разные дополнительные конструкции, которые Вы начнете использовать вроде циклов и массивом - это просто детали, порою хитро сделанные, но не более чем детали.
Так как совершенству нет предела, вставлю еще несколько замечаний по коду:
Я выделил два нетривиальных места желтым.
1) Обратите внимание, что код повторяется и первом if и в следующем else. Разница только в последней строке и конечном действии (OpenBUY, OpenSell).
2) Условия попадания в блок else не очевидны. Они из-за обилия ?? не просматриваются. В действительности, они зависят лишь от последней строчки:
Это верный признак того, что здесь не хватате функции.
Нужно написать функцию, которая возвращает истину, если время для открытия позиции соответствует заданному (напишу ее чуть позже)
Очень хорошо. Главная мысль схвачена верно. Особенно понравился процесс разработки:
Т.е. Все правильно. Не надо решать задачу всю сразу с наскока в одном месте. А делаете постепенно, как у Вас и произошло. Сначала описываете основную логику в функции OnTick и основные функции типа OpenBUY, OpenSELL, TickUP, TickDown.
Затем когда этот основной код отлажен, компилируется и работает в рамках его возможностей, начинаете описывать другие функции. Это можно сделать на следующий день, или даже неделю. При этом основной код уже изменять не нужно. Почему, думаю Вы уже это видите.
Теперь Вам нужно отточить эту манеру разработки: продолжайте писать функции, навешивая функционал через них к уже существующему коду. Существующая программа должна работать корректно. Сложность не должна расти. Добавляемые функции должны возвращать простые, ясные результаты. Их названия должны быть такими жи простыми и ясными для Вас. Если не получается так сделать, возможно причина в том, что нужно для решения задачи написать ни одну функции а две или даже три.
Что бы функция решала возложенные на нее задачи, со временем, Вам потребуется использовать все больше и больше языковых конструкций внутри таких функций. Вот тогда Вы постепенно и главное органично станете расширять свои познания в конструкциях языка, изучите циклы, массивы и даже работу с указателями.
Здравствуйте, Василий! Спасибо Вам большое за своевременные подсказки и поддержку. Очень сильно помогли мне в изучении языка программирования MQL5 Ваши сообщения о роли функций и принципах построения программного кода:
Сейчас, когда информация в голове уже приняла структуированный вид, гораздо легче воспринимается код, написанный не только мною, но и другими программистами. Надеюсь, что данная тема будет хорошим подспорьем для всех начинающих изучать язык программирования MQL5 с полного нуля.
С уважением, Владимир.