Библиотеки: Функция работы программы по времени

 

Функция работы программы по времени:

Функция разрешает исполнение определенного кода в указанный промежуток времени. Обычно используется в советниках для указания интервала времени, где советнику разрешено торговать.

Автор: Vasyl Nosal

 

Просьба к тем кто поставил низкую оценку.

Почему?

Что вам не понравилось?

Постараюсь объяснить или исправить. 

 

Кагбэ хорошим тоном считается проверка внешних переменных, точнее их значений... потом в коде где комментарии?

И конструкция вызывает ужОс:

if((start_1<stop_1 && (time_current<start_1 || time_current>stop_1)) || (start_1>stop_1 && (time_current<start_1 && time_current>stop_1)))
      && ((start_2<stop_2 && (time_current<start_2 || time_current>stop_2)) || (start_1>stop_2 && (time_current<start_2 && time_current>stop_2)))
      && ((start_3<stop_3 && (time_current<start_3 || time_current>stop_3)) || (start_1>stop_3 && (time_current<start_3 && time_current>stop_3)))

Имхо, её стоит разбить на базовые условия и проверки... будет эффективнее...

 

Там же одна функция. Что коментировать?

Про проверку не понял.

Так вроди разбито. одна строка=один временной период. 

 
Упс. Была опечатка в коде. Исправил. Жду модератора.
 
1. Если у пользователя вашей функции не 3 "промежутка времени", а 1 или 2 или 4 или ещё сколько-ть ваша функция пользователю бесполезна? Дайте осмысленное название, чтобы было видно что функция рассчитана исключительно на 3 "промежутка времени"

2. Если у пользователя вашей функции другие, более осмысленные имена переменных - не start1 stop1 итд - ему ваша функция бесполезна? Сделайте её хотя бы минимально приспособленной к жизни за пределами вашего личного кода - передавайте функции параметры вместо использования конкретных имён глобальных переменных

3. Если пользователь вставит пробел напр перед двоеточием - обычное дело с текстовым полем ввода - функция накроется тазом? Как мало ей надо. Сделайте хотя бы проверку параметров, если корректировку наиболее популярных ошибок ввода не сможете

---

Кто-то сможет вставлять эту функцию скажем в десяток своих кодов, где будут нужны проверки "промежутков времени"? Да вы сами будете её каждый раз переписывать даже для собственных кодов. В чём же смысл помещать это в кодобазу и называть 'библиотекой'?

 

Alexander Puzanov:

...В чём же смысл помещать это в кодобазу и называть 'библиотекой'?

Не сразу всё устроилось, Москва не сразу строилась :-))

Библиотека подразумевает коллекцию функций, обрабатывающих самые популярные и востребованные задачи. Есть тут такое?

Потом Alexander правильно сказал про параметры. Сделайте перегруженные функции, чтобы рассширить возможности будущей библиотеки. Можно даже шаблон сюда прикрутить.

Да, в самой Документации написано:

Обычно в названии функции стремятся отобразить ее основное назначение. Читабельные программы, как правило, содержат разнообразные и грамотно подобранные идентификаторы.
 
Alexander Puzanov:
1. Если у пользователя вашей функции не 3 "промежутка времени", а 1 или 2 или 4 или ещё сколько-ть ваша функция пользователю бесполезна? Дайте осмысленное название, чтобы было видно что функция рассчитана исключительно на 3 "промежутка времени"

2. Если у пользователя вашей функции другие, более осмысленные имена переменных - не start1 stop1 итд - ему ваша функция бесполезна? Сделайте её хотя бы минимально приспособленной к жизни за пределами вашего личного кода - передавайте функции параметры вместо использования конкретных имён глобальных переменных

3. Если пользователь вставит пробел напр перед двоеточием - обычное дело с текстовым полем ввода - функция накроется тазом? Как мало ей надо. Сделайте хотя бы проверку параметров, если корректировку наиболее популярных ошибок ввода не сможете

---

Кто-то сможет вставлять эту функцию скажем в десяток своих кодов, где будут нужны проверки "промежутков времени"? Да вы сами будете её каждый раз переписывать даже для собственных кодов. В чём же смысл помещать это в кодобазу и называть 'библиотекой'?

Если 1 или 2 промежутка, то достаточно в настройках одно и тоже время выставить(сейчас по умолчанию 1 период). А если 4 например, то даже не програмист поймёт что надо добавить старт4-стоп4 и ещё одну строку в функции.

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

Ну да. Можно ещё проверку делать правильно ли пользователь разместил советник, не в индикаторах ли он.))))

Честно. Использую как есть во всех кодах. Заказчики очень довольны. 

 
Dennis Kirichenko:

Не сразу всё устроилось, Москва не сразу строилась :-))

Дак я же не против. Строитель таки построил трёхэтажный if, который работает, но с 3го этажа ему плохо видно косяки - подсказать же надо?

 

Vasyl Nosal:

Если 1 или 2 промежутка, то достаточно в настройках одно и тоже время выставить(сейчас по умолчанию 1 период).

9.9 из 10 пользователей оставят пустое место или поставят 0 в поле ненужной сессии

 

А если 4 например, то даже не програмист поймёт что надо добавить старт4-стоп4 и ещё одну строку в функции.

Одной будет мало. И кстати об этом - 6 StringToTime исполняются в вашей функции по каждому тику с одним и тем же результатом. Вы конечно в курсе, что тормознутее операций со строками только операции со внешними объектами - файлами, графикой итд? Правильнее преобразовывать строки в секунды от начала дня 1 раз - в OnInit

А добавление 4го и больше условий в ваш if станет зашибатой тренировкой для программистов того уровня на который ваш код расчитан

 

Ну да. Можно ещё проверку делать правильно ли пользователь разместил советник, не в индикаторах ли он.))))

MQ встроили эту проверку в терминал. От жеж им делать нефиг, да :)

 

Честно. Использую как есть во всех кодах. Заказчики очень довольны. 

Несколько большее кол-во заказчиков просто на стены лезут от распирающего щастя при таком способе ввода торговых сессий:

input string    Trade_Sessions = "5:00-11:30 15:00-23:35"; // Торговые сессии

Кол-во сессий здесь меняет заказчик без вмешательства программиста

 
Alexander Puzanov:

Дак я же не против. Строитель таки построил трёхэтажный if, который работает, но с 3го этажа ему плохо видно косяки - подсказать же надо?

 

9.9 из 10 пользователей оставят пустое место или поставят 0 в поле ненужной сессии

 

Одной будет мало. И кстати об этом - 6 StringToTime исполняются в вашей функции по каждому тику с одним и тем же результатом. Вы конечно в курсе, что тормознутее операций со строками только операции со внешними объектами - файлами, графикой итд? Правильнее преобразовывать строки в секунды от начала дня 1 раз - в OnInit

А добавление 4го и больше условий в ваш if станет зашибатой тренировкой для программистов того уровня на который ваш код расчитан

 

MQ встроили эту проверку в терминал. От жеж им делать нефиг, да :)

 

Несколько большее кол-во заказчиков просто на стены лезут от распирающего щастя при таком способе ввода торговых сессий:

Кол-во сессий здесь меняет заказчик без вмешательства программиста

Круто.

А что ж ты мне какую то недофункция предлагал когда я просил помочь с этой? А сейчас играешь царя горы? 

 
Vasyl Nosal:

Про проверку не понял.

стр.32 "Что такое защитное прогарммирование?"

Источник в аттачменте.


P.S. Не знаю, могут модераторы наказать за то, что приложил книгу...

<Могут, так как копия нелегальная.>

PPS. Ссылка на бук

Ремесло программиста. Практика написания хорошего кода
Ремесло программиста. Практика написания хорошего кода
  • отзывов: 3
  • 508.00 RUB
  • Питер Гудлиф
  • www.ozon.ru
Ничто не сравнится по ценности с советами настоящего программиста-профессионала. Книга Питера Гудлифа "Ремесло программиста" написана ясно, практично и занимательно. Она поможет вам перейти на более высокий уровень мастерства программирования и покажет, как писать код, который больше чем "просто работает". Да, вы умеете писать работающий код...