![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И потом ковыряйся глазами, к чему относятся эти 4 скобки внизу.
Кстати, меня очень нервирует, когда вложенность более двух уровней. Стараюсь так никогда не писать, раскидывая код по функциям.
И даже когда два уровня вложенности - обязательно после каждой закрывающей скобки - пишу комментарии, какой блок она зарывает (скажем, дублирую заголовок цикла).
Что касается стиля, то вот мой код выбора исторической позиции для МТ5 (по указанному магику, символу, с указанным диапазоном дат):
При этом сам класс истории - это наследник абстрактного интерфейса CTradeHistoryI:
Выбрав необходимую историю - можно пересчитать ее компоненты (позици для МТ5 или ордера для МТ4), и получить интерфейс на любую компоненту в виде абстрактного интерфейса:
Для МТ4 - есть соответствующие классы истории, также наследующиеся от этих интерфейсов - таким образом, заодно обеспечивается и кропссплатформенность - советнику совершенно не надо выяснять, где он работает, вся работа с историей ведется через абстрактные интерфейсы.
Не писать функции которые всегда постоянны и никогда не изменяются в таком стиле
Пишите их сжато, всё-равно в них никогда никто не смотрит, а строк занимает в два раза меньше
Раз эти функции не меняются, то зачем вы там кучу ненужных фигурных скобок понаставили? Уберите их, и всё само сожмётся. А то ваш пример выглядит нелепо: сами же размазали код, а потом выдумываете костыли, чтобы его сократить.
Согласен, можно выпилить ещё 3 строки, и сократить код, но цель была не выложить код к использованию, он по сути даже не мой, а сократить, и таких функций можно поставить пять в один экран, а не одну. После этого программы читаются легче, и не нужно 150 раз скролить. И вес файла уменьшается.
хорошая работа, мне нравиться, но мне не нравиться ООП и стараюсь обходиться без него. как и не нравятся процессоры, с разделением потоков (пример 4 ядра и 8 потоков). должно быть понятно что разделение и любая виртуализация это потеря производительности и потеря машинного времени на ее осуществление, будь то разделение потоков в ядре или виртуализация функций в коде.
Согласен, можно выпилить ещё 3 строки, и сократить код, но цель была не выложить код к использованию, он по сути даже не мой, а сократить, и таких функций можно поставить пять в один экран, а не одну. После этого программы читаются легче, и не нужно 150 раз скролить. И вес файла уменьшается.
с уважением.
Рабочий экран 27"
Перечитывать отправлять не буду, процитирую: "Не писать функции которые всегда постоянны и никогда не изменяются в таком стиле"
Зачем ковырять глазами функцию, которая пишется один раз при выходе платформы, и никогда не будет меняться в будущем? Вы часто меняете/редактируете код в функциях получения размера лота, количество ордеров и типичных? Тогда зачем её растягивать на 3 экрана 32" монитора?
P.S. Код приложен выковырянный с кодобазы.
Встречный вопрос )) У меня такие функции лежат в файле MyFunc.mqh, не вижу ни малейшего смысла его сжимать. Зачем, сэкономить 10-20 Кб на диске? И если честно, мне от такого кодестайла становится плохо ))
Встречный вопрос )) У меня такие функции лежат в файле MyFunc.mqh, не вижу ни малейшего смысла его сжимать. Зачем, сэкономить 10-20 Кб на диске? И если честно, мне от такого кодестайла становится плохо ))
по мне так код должен быть понятным, коротким, быстрым в работе, работать при любых условиях без ошибок.
с уважением.
Встречный вопрос )) У меня такие функции лежат в файле MyFunc.mqh, не вижу ни малейшего смысла его сжимать. Зачем, сэкономить 10-20 Кб на диске? И если честно, мне от такого кодестайла становится плохо ))
Вот и считай: 1000 советников x 10 кб = 10 Мб - уже есть повод задуматься об экономии ))
Встречный вопрос )) У меня такие функции лежат в файле MyFunc.mqh, не вижу ни малейшего смысла его сжимать. Зачем, сэкономить 10-20 Кб на диске? И если честно, мне от такого кодестайла становится плохо ))
Мне тоже, но как-то давно пришёл к такому выводу, что код должен быть компактный в тех местах, где в него никогда не смотрят, он никогда не правится, и правится не будет.
Разбрасывать пользовательский код по инклудам, это создать ещё одну дополнительную головную боль, чтоб перетащить файл в другой терминал, или им поделиться, нужно таскать не один файл, а несколько. Можно конечно перенести во все терминалы инклудники, но если в одном что подправил или добавил, тогда нужно во всех сделать замену на новый.
Советники и индикаторы настолько малы, что не имеет смысла что-то куда отдалять от тела программы. Вернее они не малы, а однофайловые, это-же не сайт в 10 000 страниц, где без класса и инклудов не обойтись. Тем более, сейчас есть структуры, и их вполне достаточно, чтоб писать компактные на 100% работоспособные коды.
Кстати, меня очень нервирует, когда вложенность более двух уровней. Стараюсь так никогда не писать, раскидывая код по функциям.
И даже когда два уровня вложенности - обязательно после каждой закрывающей скобки - пишу комментарии, какой блок она зарывает (скажем, дублирую заголовок цикла).
Что касается стиля, то вот мой код выбора исторической позиции для МТ5 (по указанному магику, символу, с указанным диапазоном дат):
При этом сам класс истории - это наследник абстрактного интерфейса CTradeHistoryI:
Выбрав необходимую историю - можно пересчитать ее компоненты (позици для МТ5 или ордера для МТ4), и получить интерфейс на любую компоненту в виде абстрактного интерфейса:
Для МТ4 - есть соответствующие классы истории, также наследующиеся от этих интерфейсов - таким образом, заодно обеспечивается и кропссплатформенность - советнику совершенно не надо выяснять, где он работает, вся работа с историей ведется через абстрактные интерфейсы.
Выглядит вкусно, можно еще посмотреть TRACE_*** и ASSERT?
чтоб перетащить файл в другой терминал, или им поделиться, нужно таскать не один файл, а несколько. Можно конечно перенести во все терминалы инклудники, но если в одном что подправил или добавил, тогда нужно во всех сделать замену на новый