Самообучение языку MQL5 с полного нуля - страница 48

 
Если ближайшая цель реализовать простейший трейлинг стоп, то следует продолжить написание скрипта добавлением в него циклов for и while. 

Не уверен, что у скрипта "достаточно терпения" есть логическое продолжение. Наверное, лучше перейти на новую идею, требующую в реализации наличие:

1. Дерева условий if-else.
2. Расчетных функций.
3. Циклов.

Поскольку, работать придется в области алготрейдинга, то удобнее, если скрипт будет связан со стратегией торговли. Подумайте.

 
Для лучшего понимания сути циклов:

Цикл позволяет снова и снова проходить участок кода замкнутого в его теле. Результаты каждого прохода будут отличатся от результатов других проходов, потому что на каждом из них значения переменных/вызываемых функций могут разниться. Количество итераций цикла задается программистом, значением переменной или функцией, - зависит от конкретного кода.
 
MrBrooklin:

Алексей, Вы шутите? Да, мне бы для начала азы усвоить!

С уважением, Владимир.


Ни сколько. Судя по динамике и Вашей базе и теории и практики - это Ваш профиль от и до. Поэтому почему бы и нет... не сейчас, но чуть позже. . . Когда освоитесь и будете с кодом на ты.
 
Реter Konow:
Если ближайшая цель реализовать простейший трейлинг стоп, то следует продолжить написание скрипта добавлением в него циклов for и while. 

Не уверен, что у скрипта "достаточно терпения" есть логическое продолжение. Наверное, лучше перейти на новую идею, требующую в реализации наличие:

1. Дерева условий if-else.
2. Расчетных функций.
3. Циклов.

Поскольку, работать придется в области алготрейдинга, то удобнее, если скрипт будет связан со стратегией торговли. Подумайте.

Спасибо, Петер, что поддерживаете моё стремление дооснастить скрипт New7.mq5 трейлингом, особенно сейчас, когда начал изучение циклов. Кстати, уже попробовал, как работает в скрипте фунция Sleep. Эту функцию было рекомендовано применить при написании трейлинг стопа. С чего нужно начать? Наверное, сначала лучше словами расписать весь алгоритм трейлинга, а затем уже переходить к написанию кода?

С уважением, Владимир.

 
Aleksey Masterov:

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

Спасибо, Алексей, за Вашу веру в меня. Остается только не подкачать!

С уважением, Владимир.

 
MrBrooklin:

Спасибо, Петер, что поддерживаете моё стремление дооснастить скрипт New7.mq5 трейлингом, особенно сейчас, когда начал изучение циклов. Кстати, уже попробовал, как работает в скрипте фунция Sleep. Эту функцию было рекомендовано применить при написании трейлинг стопа. С чего нужно начать? Наверное, сначала лучше словами расписать весь алгоритм трейлинга, а затем уже переходить к написанию кода?

С уважением, Владимир.

Обьективно говоря, простой трейлинг стоп в скрипте написать не получится. Поясню: трейлинг не существует сам по себе, в "вакууме", он "привязан" к открытой позиции, которая, в свою очередь, "привязана" к стратегии, а та, реализуется только в советнике. 

Проблема и сложность реализации трейлинга в скрипте в том, что нужно в цикле собирать информацию об открытых позициях и их ордерах, а потом выбирать нужный ордер на нужном символе и вычислять как именно его модифицировать. Это сложно и запутано, а вот в советнике все гораздо проще. Во первых, Вы уже будете знать какой ордер нужно модифицировать, во вторых, будете знать когда модифицировать, ведь приходит событие OnTick.

И так, в скрипте Вы ставите отложенник, потом он срабатывает, открывается позиция и стоп можно тралить... Что для этого нужно:

1. Зациклить скрипт.
2. Написать функцию фиксации события изменения цены на тек.символе.
3. Написать функцию модификации стоп-ордера.
4. Написать условие выгрузки скрипта (выход из беск.цикла) по закрытию позиции.

Примерно набросал план скрипта, но нужно более серьезно подумать над ним.

П.С. функция Sleep используется для задержек выполнения кода, когда они необходимы. Например, при запросах к серверу или ожидании события. В скрипте с трейлингом эта функция несомненно понадобится.
 
Реter Konow:
Программисты боятся использовать глоб.переменные, из за ошибок возникающих при изменении их значения. Создается ситуация когда ошибку сложно локализовать, поскольку каждая функция может их менять. Естественно, что в глобальной области должны существовать только те переменные, видеть которые должны все функции программы. По другому и быть не может. 

Мне всегда нравилось использовать глоб.переменные, потому что они обеспечивали быстрый рост функционала, а программа превращалась в огромную, активную стройку. Часто ставили в упрек то, как я пишу код, но на то она и стройка, что чистота наводится после завершения основных работ по возведению здания, а когда дом построен, можно занятся облицовкой, покраской, уборкой территории. До этого времени, в приоритете остается сборка опалубки и заливка бетоном.)

Однако, программисты мыслять иначе. Они будут "мыть" и "драять" свой код, даже если он в две с половиной строчки. Программа с "гулькин нос", но блестеть у них будет... как новая монета.)) Такое отношение к коду оправдано их профессией, которой они живут, но с творческой точки зрения, они зажаты и плохо развиваются. Так уж получается...

Мой совет: учитесь писать правильно, но иногда позволяйте себе отойти от правил и экспериментировать, чтобы обрести более разнообразный опыт. Это поможет в обучении и Вы быстрее усвоите материал.

Есть такое наблюдение, что раз начав костылить, тяжело потом остановиться, как следствие, код проекта превращается в то непотребство, которое называют г..кодом.

Поясняю:

  1. Есть проект с промежуточным рабочим решением и количеством внедренных фич count=0.
  2. Есть задача - запилить фичу ++count.
  3. Для прикрутки фичи надо:
    • по дереву объектов методы прописать да связать все это дело логикой в обработчиках событий (ориентировочное время 3 ч.*count; count=0)
    • написать костыль в виде глобальной переменной и дергать ее в нескольких методах, там, где нам нужно (ориентировочное время 15 мин*count.)
  4. Баг автонумерации (это bug report для метаквотов).
  5. Естественно, выбран вариант с костылем (реально, тяжело себя заставить в этом случае работать)
  6. if (we did it) goto 2
  7. else все упало на хрен, кричим хелп ми и читаем веселые комментарии о том, что так делать нельзя.

Надеюсь обратили внимание, что счетчик внедренных фич, увеличивает время внедрения следующей фичи, но при внедрении правильном, он, после него, обнуляется?

Все конечно очень утрированно, но именно так и происходит в реале.

Это я к чему, не перепишите вы проект после внедрения всех фич, так и пойдет он в продакшн нечитаемой портянкой. А дальше, жизненный цикл любого проекта приводит к головной боли руководства: либо сажать всю команду на глобальный рефакторинг всего того, что накрутили (а конкуренты не спят, они, злыдни такие, новые фичи пилят), либо продолжать писать костыли и латать баги, лезущие сплошным потоком.

 
Реter Konow:
Обьективно говоря, простой трейлинг стоп в скрипте написать не получится. Поясню: трейлинг не существует сам по себе, в "вакууме", он "привязан" к открытой позиции, которая, в свою очередь, "привязана" к стратегии, а та, реализуется только в советнике. 

Проблема и сложность реализации трейлинга в скрипте в том, что нужно в цикле собирать информацию об открытых позициях и их ордерах, а потом выбирать нужный ордер на нужном символе и вычислять как именно его модифицировать. Это сложно и запутано, а вот в советнике все гораздо проще. Во первых, Вы уже будете знать какой ордер нужно модифицировать, во вторых, будете знать когда модифицировать, ведь приходит событие OnTick.

И так, в скрипте Вы ставите отложенник, потом он срабатывает, открывается позиция и стоп можно тралить... Что для этого нужно:

1. Зациклить скрипт.
2. Написать функцию фиксации события изменения цены на тек.символе.
3. Написать функцию модификации стоп-ордера.
4. Написать условие выгрузки скрипта (выход из беск.цикла) по закрытию позиции.

Примерно набросал план скрипта, но нужно более серьезно подумать над ним.

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

Петер, значит создаём код трейлинга в скрипте? Отлично! То, что Вы перечислили теперь беру за базовые разделы и начинаю их словами расписывать, чтобы было понятно, как потом мне писать функции, циклы и т.д. Всё правильно?

С уважением, Владимир.

 
MrBrooklin:

Петер, значит создаём код трейлинга в скрипте? Отлично! То, что Вы перечислили теперь беру за базовые разделы и начинаю их словами расписывать, чтобы было понятно, как потом мне писать функции, циклы и т.д. Всё правильно?

С уважением, Владимир.

Да, верно.
 
Vladimir Simakov:

Есть такое наблюдение, что раз начав костылить, тяжело потом остановиться, как следствие, код проекта превращается в то непотребство, которое называют г..кодом.

Поясняю:

  1. Есть проект с промежуточным рабочим решением и количеством внедренных фич count=0.
  2. Есть задача - запилить фичу ++count.
  3. Для прикрутки фичи надо:
    • по дереву объектов методы прописать да связать все это дело логикой в обработчиках событий (ориентировочное время 3 ч.*count; count=0)
    • написать костыль в виде глобальной переменной и дергать ее в нескольких методах, там, где нам нужно (ориентировочное время 15 мин*count.)
  4. Баг автонумерации (это bug report для метаквотов).
  5. Естественно, выбран вариант с костылем (реально, тяжело себя заставить в этом случае работать)
  6. if (we did it) goto 2
  7. else все упало на хрен, кричим хелп ми и читаем веселые комментарии о том, что так делать нельзя.

Надеюсь обратили внимание, что счетчик внедренных фич, увеличивает время внедрения следующей фичи, но при внедрении правильном, он, после него, обнуляется?

Все конечно очень утрированно, но именно так и происходит в реале.

Это я к чему, не перепишите вы проект после внедрения всех фич, так и пойдет он в продакшн нечитаемой портянкой. А дальше, жизненный цикл любого проекта приводит к головной боли руководства: либо сажать всю команду на глобальный рефакторинг всего того, что накрутили (а конкуренты не спят, они, злыдни такие, новые фичи пилят), либо продолжать писать костыли и латать баги, лезущие сплошным потоком.

Здравствуте, Владимир! У меня к Вам большая, даже огромная просьба! Не смотря на то, что данное сообщение в большей степени предназначено для Петера, всё-равно прошу писать без сленга для того, чтобы полноценно понимать Ваши сообщения, т.е. на языке доступном для ученика 1-го класса школы программирования, т.к. тема для начинающих с нуля.

С уважением, Владимир.

Причина обращения: