В сегодняшнем уроке вы узнаете, как менять направление выполнения вашего кода при соблюдении определенных условий. Это возможно при использовании операторов. Вы можете найти их в практически любом языке программирования, по своей сути они являются основой каждой программы. Например, операторы могут быть использованы для того чтобы менять цвет скользящей средней, в зависимости от ей размещения по отношению к цене закрытия бара. Если вы хотите закрыть все позиции по истечении определенного времени, то необходимо использовать операторы. Если вы хотите включить алерт, после выполнения определенного условия, так же необходим оператор. Этот список можно продолжать довольно долго, но я думаю, вы уже поняли, что утверждения не только очень полезны, но и крайне важны. Ни один учебник по программированию не может обойтись без операторов, и поэтому крайне важно хорошо разобраться в них, прежде, чем мы можем перейти к более сложным вещам.
If…then…
If…then… простейшая форма условного оператора. Сначала проверяется условие, и если он оказывается верным, то выполняется следующий код. Если же условие не выполняется, то следующий код оператора не будет исполнен. Когда я сказал тест пройден, я не имел ввиду, что вы ограничены только логическими условиями (истина/ложь). В примере приведенном ниже, ii вы видите три оператора, два логических MyCondition1 и MyCondition2 и один оператор с числовой переменной.
В первом случае код проверяет “MyCondition1 =False”. Если “MyCondition1” действительно окажется ложным то результат теста окажется фактически истинным (так как условие выполнено). Это может показаться немного запутанным на первый взгляд, но если помните, мы делали аналогичные проверки на прошлом уроке, с циклами. Вы можете вывести результат теста на окно отладки при помощи команды “print”.
Код, следующий после оператора “if…then… “ будет исполняться только после проверки выполнения условия. В случае если проверка показала не соответствие условия, то будет исполняться следующий после тела оператора код. Если вы хотите чтобы в случае если условие верно то выполнялся один код, а если не то другой. В этом случает можно использовать два оператора “if…then… “ или использовать другой тип оператора.
If…then…else…
“If…then…else…” выполняет один код если условие верно, и второй, если условие не верно. Например, мы можем изменить цвет в средней скользящей в зависимости от её положения по отношению к цене закрытия бара. Если цена закрытия выше средней, то средняя должна быть окрашена в зеленый цвет, если нет то в красный. При помощи оператора “If…then…else…” и зарезервированного слова “SetPlotColor” мы можем сделать это. “SetPlotColor” имеет два параметра: первый это номер линии, у которой вы хотите изменить цвет (это 1 для Plot1 и 5 для Plot5 и т.д.) и второй для выбора цвета.
По плану средняя должна менять свой цвет в соответствии с её положением относительно цены закрытия. В случае где средняя будет равняться цене закрытия она будет окрашена в красный цвет. Вы можете объединять операторы и создавать дополнительные уровни операторов. Мы можем немного изменить оператор “If…then…else…”, чтобы добавить третий цвет для средней, когда скользящая средняя равна цене закрытия.
Сначала идет оператор “If…then…”, затем идет “If…then…else…”. Обратите внимание, что в случае как одиночного применения оператора “If” так и группы операторов “If” в конце должны стоять точки с запятой.
If…then begin…end
Операторы “If…then” и “If…then…else…” отлично подходят, если у вас есть только одно выражение. Для больших блоков кодов вы должны использовать оператор “If…then begin…end”. Этот оператор похож на “If…then”, но он позволяет размещать несколько строк кода между “begin” и “end”. “Begin” и “End” являются постоянными элементами для этого оператора, они обозначают начало и конец тела оператора. По сравнению с обычными операторами “If…then” и “If…then…else…”, оператор “If…then begin…end”, то все строки кода между “begin” и “end” должны заканчиваться точкой с запятой.
Давайте добавим простой блок в код нашей средней, который ставит крестики (для этого нужно изменить стиль линии в настройках) и дает сигнал, когда бар оказывается полностью ниже средней.
If…then begin…end else begin…end
Так же вы можете использовать оператор If…then begin…end else begin…end, если хотите использовать сразу несколько операторов кода после “else”. В использовании этого оператора есть одна особенность: после первого “end” не нужно ставить точку с запятой, только последний “end” закрывается точкой с запятой. Вы так же можете использовать два оператора If…then begin…end, чтобы выделить бары выше средней скользящей.
Once…begin…end
На этом уроке я бы хотел рассмотреть еще два оператора. Мы уже использовали один из них. Как вы, возможно, догадались это “Once…begin…end”, Мы использовали его в начале этого урока, но без условия. Специфика этого оператора заключается в том, что после того как только логическое выражение становиться истинным один раз, оно больше не выполняется. После того как он был выполнен один раз, то в дальнейшем код в теле этого оператора пропускается. Это может пригодиться чтобы инициализировать переменные или сделать расчеты, которые необходимо сделать только один раз. Оператор “Once” выглядит следующим образом:
Логическое выражение следующее за “once” необязательно, и без него можно обойтись,. В случае, если у вам нужен лишь один оператор который необходимо исполнить только один раз, вы так же можете не ставить “begin” и “end”. На изображении ниже вы можете увидеть три примера того как можно использовать оператор “once”. В первом примере, оператор удаляет всю информацию в окне отладки. Во втором случае код делает тоже самое, предварительно проверив “If CurrentBar = 1” и эта проверка осуществляется при каждом выполнении кода. С “once” код в теле оператора выполняется только один раз, после чего не проверяется. На втором примере вы видите, как вычислить тик и десятую долю символа, с последующим сохранением результата в двух переменных. В последнем примере код проверяет день недели, и если текущий день оказывается понедельником, то код очищает окно отладки, и пишет в нем новый текст.
Switch/case
Switch/case – это последние операторы, которые мы рассмотрим сегодня. Операторы switch и case крайне полезны при создании разветвленного и сложного кода. Вместо того, чтобы создавать код на основе множества вложенных “If…else” операторов, его можно сделать на основе оператора switch. Это звучит сложнее, чем есть на самом деле. Давайте рассмотрим простой пример кода, в котором используются операторы switch и case. Создайте индикатор, приведенный ниже, и загрузите его на график. Затем попробуйте поменять параметры, и посмотрите на результат, который отобразиться в окне отладки. Текст разделяется на две строки для удобства чтения. Обычно я делаю их в одну строку, если они не слишком длинные.
Код передает “Number” с помощью switch(переключателя) в первый case и выполняет следующий оператор. Если нужное case найдено, значит сначала выполняются код внутри оператора switch/case, а затем выполняется код следующий за оператором switch/case. Вот почему код для оператора для case от 2 до 5 никогда не будет исполнен, так как он входит в case «от 2 до 10». Поменяйте местами позиции для двух case и посмотрите как они будут выполняться в зависимости от вводной Number. Оператор “default” не является обязательным, вы можете использовать его, чтобы убедиться, что операторы выполняются, даже если условия не выполнены. Вы можете использовать несколько различных операторов, в каждом конкретном “case” или использовать один оператор печати для каждого “case” в этом примере.
Для операторов, которые мы рассмотрели в этом уроке характерно то, что их можно объединить в группы для создания более сложной логики. Иногда вам придется применять все свои творческие способности, чтобы добиться того, что вы хотите. Именно поэтому так важен хороший план. Потратьте немного времени, прежде чем начать писать код, чтобы сделать блок схему или логическую схему. В конце концов это поможет вам сэкономить много времени. Я говорил это раньше, и повторюсь снова, так как это важно. Научиться новому гораздо проще, чем отучиться от дурной привычки. Если вы начали изучать языки EasyLanguage или PowerLanguage, то привейте привычку планировать, прежде чем начать программирование.