Учимся логике - страница 5

 
Vinin:


Это не моя строчка. Это авторская

Оптимальный код функции start()

Вот эти 2 строки, мягко говоря, выглядят странно:

   limit = Bars - counted_bars-1;
   if(Bars - counted_bars > 2) limit = Bars - nPeriod-1;

лучше так:

   if(Bars - counted_bars > 2) limit = Bars - nPeriod-1;
   else limit = Bars - counted_bars-1;
 
PapaYozh:

Абсолютно не понятно, зачем такие пляски вокруг булевых переменных, когда можно написать так:

Мне понравилось, спасибо, что напомнили, PapaYozh. Сам ведь подобные конструкции создавал - и забыл...
 
Vinin:


И логики тоже, логики мышления.

Третий вариант, отказываемся полностью от логических условий в индикаторе. Возникает вопрос - а возможно ли это.

Попробуем

Для этого добавим пару логических переменных

Весь код функции старт у нас стал таким


Mне кажется можно ещё упростить

for(int i = 0; i < limit; i++)
{
// Вариант три_v1

high=iMA(NULL,0,period,0,MODE_EMA,PRICE_HIGH,i);
low=iMA(NULL,0,period,0,MODE_EMA,PRICE_LOW,i);
atr=high-low;
MaTDn[i] = low - atr;
MaTUp[i] = high + atr;
}

Файлы:
 
Mathemat:
Мне понравилось, спасибо, что напомнили, PapaYozh. Сам ведь подобные конструкции создавал - и забыл...

На мой взгляд, там чрезмерное использоваие вызова функции Symbol().

Я б так написал:

   string smbl=Symbol();
   showEUR  = ( StringFind(smbl, "EUR", 0) != -1);
   showUSD  = ( StringFind(smbl, "USD", 0) != -1);
   showGBP  = ( StringFind(smbl, "GBP", 0) != -1);
   showCHF  = ( StringFind(smbl, "CHF", 0) != -1);
   showJPY  = ( StringFind(smbl, "JPY", 0) != -1);
Но это уже к логике не относится :)
 
Vinin:

На самом деле все просто. Появилось желание помочь другим делать оптимальный код, да и самому поучиться у других.

Не секрет, что со временем вырабатываются вполне определенные стереотипы, которые иногда (чаще всего) помогают, а иногда и мешают.

Подготовлю вариант индикатора и попытаюсь объяснить что и почему сделано. Если конечно интересно будет.


Обяснить на примере, как делать оптимальный код - не выйдет - слишком много будет упущений.

Дело в том, что есть масса правил создания оптимального кода,  И эта масса тянет на довольно толстую книгу. Например, не многие из тех, кто сталкивается с языком MQL4 знают, что для процессора гораздо проще выполнять операции сложения и вычитания, чем умножения и деления. Не многие знают, что с позиций оптимизации кода лучше написать а=b+b, чем a=b*2. Поэтому думаю, что для понимания логики программирования и оптимизации гораздо полезнее будет отослать интересующихся к сочинениям по построению оптимального кода, а так же по изучению алгоритмических языков, ну и прививать пользователям привычку строить блок-схемы будущих программ, во избежание упущений и минимизации числа переделок кода.

Прилагаю к этому посту ссылку на скачивание отличнейшей книги по построению кода.

С. Макконел "Совершенный код"


Скачать книгу можно здесь: http://depositfiles.com/files/ebk6t6t5h (размер файла 21 мегабайт. Формат - djvu) 

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

 
drknn:


Прилагаю к этому посту ссылку на скачивание отличнейшей книги по построению кода.

С. Макконел "Совершенный код"

+1, книга весьма полезная.
 
drknn:

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

тоже неплохо, но все-таки хорошо бы либо название ветки уточнить, либо начать уже логику изучать.

я, правда, сам не знаю как сделать второе...))

 
denis_orlov:

тоже неплохо, но все-таки хорошо бы либо название ветки уточнить, либо начать уже логику изучать.

я, правда, сам не знаю как сделать второе...))


Логика (др.-греч. λογική — «наука о рассуждении», «искусство рассуждения» от λόγος«речь», «рассуждение», «мысль») — наука о формах, методах и законах интеллектуальной познавательной деятельности, формализуемых с помощью логического языка. Поскольку это знание получено разумом, логика также определяется как наука о формах и законах правильного мышления. Поскольку мышление оформляется в языке в виде рассуждения, частным случаем которого являются доказательство и опровержение, логика иногда определяется как наука о способах рассуждения или наука о способах доказательств и опровержений. Логика как наука изучает способы достижения истины в процессе познания опосредованным путём, не из чувственного опыта, а из знаний, полученных ранее, поэтому её также можно определить как науку о способах получения выводного знания.

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

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

Логика служит одним из инструментов почти любой науки.

 
denis_orlov:

тоже неплохо, но все-таки хорошо бы либо название ветки уточнить, либо начать уже логику изучать.

я, правда, сам не знаю как сделать второе...))


Могу поделиться тем, как оно было у меня.

На попытки вникнуть в логику как в науку у меня ушло три года - я всё не мог ухватить суть, мол, накой она вообще нужна эта логика. Она представляла тогда для меня просто набор почти бесполезных шаблонов, но я чувствовал, что что-то тут не так, поэтому продолжал вчитываться, пытаться рассуждать по её схемам, решать через формулы всякие логические задачки. А потом как гром среди ясного неба - до меня вдруг дошло... Потом, когда до меня наконец-то дошла вся ценность этой дисциплины, я начал активно привлекать к изучению логики своих друзей. Я буквально "горел" логикой. Друзья активно втягивались во весь логический юмор, в красоту жёстких выводов, в неразрешимость парадоксов и пока я был рядом, они хоть что-то познавали. Но оставшись 1 на 1 с самим собой, затухали как угли костра. Ни один из них так и не возжёг огонь собственного духа. Тут я понял, что им было со мной интересно, но не более - ни у кого из них небыло пинающей силы за спиной, которая бы вынудила их въехать в эту науку. И тогда всех, кто действительно изучил Логику, я для себя разбил на две категории. Все они были вынуждены её изучать. От этого ни куда не деться. Некоторые профессора, преподающие логику в универах говорят, что студентам она даётся очень тяжело. Зато потом они сами удивляются тому, насколько тяжко им давалась эта дисциплина и насколько легка она оказалась в применении. Ну так вот, всех этих вынужденных я для себя разбил на два класса - на тех, кто влюбился в логику в процессе её изучения и на тех, кто сдал по ней зачёты и забыл. С теми влюблёнными мне всегда приятно бесседовать - человек тебя понимает с полуслова. А вот с забывчивыми приходится иной раз вообще тяжко - такие люди играются в русскую рулетку с собственной смертью. Дело в том, что действовать сознательно можно только по заранее составленному плану. Только так можно навести порядок в своей жизни. Составление плана действий - это мыслительный процесс. Если он протекает не правильно, то и результат будет хреновый. У кого в голове хаос, у того и в делах бардак. Вот и получается, что мышление управляет нашими жизнями. И отказываться тут от Логики - это прямая быстрая дорога в могилу.

:) Хватит, пожалуй, а то я могу часами рассказывать о подобных вещах и это в конце-концов уведёт нас в сторону от темы данной ветки.

P.S.

Могу ещё лишь добавить, что у меня когда-то возникла в жизни настолько сложная ситуация, что я не знал что и делать - рушились все планы, надежды. Больно было жутко. Я просто задыхался от безысходности. Вот тогда-то я и решил, что пока ни разберусь от и до со сложившейся ситуацией, я не приму решения что мне делать со своей жизнью и как относться к тем, кто меня окружал. Из книг я знал, что есть такая наука как Логика. Тогда-то я и решил, что должен освоить её, чотб мои выводы были правильными. Сложность и боль жизненной ситуации была для меня той силой, которая подстёгивала меня, заставляя искать ответы на свои вопросы не только в логике, но и в куче других наук. Сейчас это всё в прошлом. Зачем я рассказал об этом? Да просто хотел, чтоб Вы понимали, что двигало мной, заставляя учить логику. Так сказать, показал на примере, что я не исключение и мне тоже пришлось изучать эту дисциплину из-под палки. Правда изучать не в универе, а самостоятельно. 

 
nikost:


Mне кажется можно ещё упростить

for(int i = 0; i < limit; i++)
{
// Вариант три_v1

high=iMA(NULL,0,period,0,MODE_EMA,PRICE_HIGH,i);
low=iMA(NULL,0,period,0,MODE_EMA,PRICE_LOW,i);
atr=high-low;
MaTDn[i] = low - atr;
MaTUp[i] = high + atr;
}


Я старался сохранить отрисовку как в первоначальном коде. АТР считается по другому. Если сравнишь два индикатора, то сам увидишь разницу.