Блог им. Hummel

ABC Easy/power language Урок 3.

Урок 1.
Урок 2.

Урок 3. Циклы с условиями.Как правильно использовать циклы в программировании. 

  Добро пожаловать на новый урок, на пути освоения MultiCharts и PowerLanguage. Если вы не читали предыдущие уроки, то я бы предложил вам сделать это. Этот урок будет основан на понятиях изложенных в предыдущих уроках. На уроке 02 мы узнали, как можно построить скользящую среднюю на графике. Мы использовали цикл, чтобы просуммировать значения предыдущих баров, которые нужно привести к среднему. Сегодня вы изучите еще один тип цикла. Так же вы узнаете, как использовать редактор для вывода информации в окне отладки.

  На первом уроке мы изучили главное окно в редакторе PowerLanguage. Когда вы откроете редактор, то вероятно увидите, что он разделен на три части. Если это не так, то скорее всего вы изменили внешний вид в меню «Вид» (View). Убедитесь, что «Окно отладки» (Output Bar) на месте, так как оно будет нужно нам на этом уроке.

ABC Easy/power language Урок 3.

  Перейдите в вкладку Вывод (Output) в нижней части окна. В ней редактор показывает информацию, поступающую от кода. Давайте посмотрим, как это работает. Создайте новый индикатор, присвойте ему имя по своему вкусу. Я использую имя, удобное для меня, которое указывает на назначение индикатора, и которое легок найти в списке индикаторов. Нам нужно чтобы текст демонстрировался один раз. EasyLanguage предлагает специальное зарезервированное слово, для кода, который вы хотите выполнить только один раз.

ABC Easy/power language Урок 3.

  Зарезервированное слово Print показывает текст в окне отладки. Если вы удалите зарезервированное слово Once, то текст будет печататься при каждом новом баре на графике или при каждом изменении цены в реальном времени.
ABC Easy/power language Урок 3.

  В предыдущем уроке мы использовали цикл для того чтобы сделать скользящую среднюю. Мы могли бы достичь тех же самых результатов с другим типом цикла. Вы можете спросить – зачем нам нужны циклы другого типа? Каждый вид цикла имеет свои особенности, и в некоторых случаях один тип лучше подходит к определенным задачам, чем другой. Новый тип цикла называется “while loop”. Он повторяет код до той поры пока  его условие верно. Цикл с условием может выглядеть следующим образом:
ABC Easy/power language Урок 3.

  Из кода видно, что цикл будет исполняться, пока ii не достигнет значения десять. Когда ii = 9 операторы внутри цикла выполнятся последний раз и ii будет равен десяти. Когда код перейдет на начало и проверит условие ii<10, то оно будет не верным, так как ii = 10, и следовательно,  цикл не будет выполнен снова.

  Переменная ii изначально равна 0, и операторы внутри цикла будут выполняться пока ii < 10, следовательно мы можем ожидать что в окне отладки появятся десять предложений.
ABC Easy/power language Урок 3.

  Как вы наверное помните, цикл автоматически увеличивает (или уменьшает) счетчик переменной и останавливается, когда достигается конечное значение счетчика. Вы должны сами установить переменную для счетчика самостоятельно. Если вы забудете поставить переменную или условие в первой строке цикла, то вы создадите так называемый «бесконечный цикл». Бесконечным он называется потому что он никогда не будет остановлен, и следовательно расчет кода никогда не будет закончено. Это может привести к зависанию MultiCharts, поэтому всегда проверяйте цикл с условием, чтобы избежать подобного. Давайте посмотрим на то, как выглядит бесконечный цикл, и как можно изменить код,  чтобы избежать зависания программы. Следующие три примера объединяет то, что их условие никогда не будет верно, что создает бесконечный цикл. Поэтому я бы не рекомендовал выполнять этот код в MultiCharts, если вы не хотите чтобы программа зависла. Программа Tradestation по умолчанию имеет защиту от зацикливания. В этом случае она не зависнет, а продемонстрирует предупреждение и остановит расчет кода.
 ABC Easy/power language Урок 3.

Давайте подробнее рассмотрим каждый пример чтобы понять, почему образуется бесконечный цикл. Первый цикл будет выполняться до тех пор, пока ii меньше чем десять. Сначала ii = 0, как это установлено по умолчанию. С каждым циклом ii уменьшается, т. е. с каждым разом  из ii вычитается единица. После первого круга, значение ii становится = -1, после второго -2 и так далее. Как вы видите переменная никогда не достигнет значения 10.

  Во втором примере цикл будет выполняться до тех пор, пока kk будет равен нулю. Значение  kk не изменяется в течении цикла, и таким образом цикл не будет остановлен. В последнем примере используется логическое (истина/ложь) условие для остановки цикла. Пока “ThisСondition” остается верным, цикл будет повторяться. В этом примере “ThisCondition”  никогда не примет значение ложь в конце цикла. Так что это приведет к еще одному бесконечному циклу и зависанию MultiCharts.

  Для того чтобы избежать зависания MultiCharts от бесконечного цикла вам нужно убедиться, что условие остановки становится истинным в какой-то момент времени. Так же  вы можете использовать дополнительный прием, чтобы остановить цикл.  При помощи зарезервированного слова “break” можно моментально остановить цикл, после чего код продолжит исполняться. Его можно использовать вместе с переменной, которая подсчитывает количество циклов и останавливает их после определенного количества. Я часто использую этот способ, так как он предлагает дополнительную защиту от ошибки и зависания. Это так же помогает в отладке кода. На изображениях вы можете видеть как можно остановить цикл, установив логическое выражение в состояние ложно.  
  ABC Easy/power language Урок 3.

    На этом скриншоте вы видите цикл, условием остановки которого является логическое условие  = ложь, которое включается после 12 циклов. Так же, вместо того, чтобы ставить переменную “ThisCondition” в состояние “false”, можно использовать зарезервированное слово “break”, для быстрой остановки цикла.
   При использовании “break” необходимо помнить то, что после выполнения этой команды, ни цикл не будет выполняться больше. Если вы установите значение “ThisCondition”  на “false”, то цикл начнется заново. Если вы посмотрите на следующий пример, то увидите, что текст после команды “break” больше не показывается в окне отладки. Причина в том, что цикл не возобновляется после команды “break”.
ABC Easy/power language Урок 3.

  Мы можем изменить наш первый бесконечный цикл, добавив команду “break”, вместо счетчика. Конечно, для практики лучше убедиться, что счетчик работает правильно, в том, что он получает приращение или наоборот уменьшается.
ABC Easy/power language Урок 3.

  Это даст вам лучшее понимание того, как работает цикл с условием, и как правильно его использовать, без зависания MultiCharts, из-за бесконечного цикла. Теперь давайте изменим скользящую среднюю из урока 02, заменив обычный цикл на цикл с условием. Для лучшего усвоения знаний вы должны попробовать в практике, что-нибудь из этого урока. Скользящая средняя с обычным циклом и средняя построенная при помощи цикла с условием, должны быть полностью одинаковыми, при одинаковых параметрах. Так же я советую вам использовать окно отладки, если вы столкнетесь с какими-нибудь проблемами. На изображении вы видите переменную построенную с  помощью обычного цикла (зеленая средняя) и переменную построенную при помощи цикла с условием (красная средняя).
ABC Easy/power language Урок 3.

★5
2 комментария
Слишком крупные картинки. Рекомендую уменьшить их. Раз в пять.
avatar
gib, Спасибо за ценное замечание, исправил.
avatar

теги блога Антон Ш

....все тэги



UPDONW
Новый дизайн