После того как вы познакомились с редактором Power Language, на предыдущем уроке, мы продолжим углублять наши знания. Если вы не читали предыдущий урок, то я бы предложил вам сделать это, это поможет вам в понимании того о чем будет говориться на этом уроке. Что ж, давайте начнем новый урок.
Откройте редактор Power Language, и создайте новый индикатор. Я назову его ABC_PowerLanguage Lesson 02 – Moving Average, чтобы затем я бы мог легко найти его в редакторе. Вы можете выбрать название по своему вкусу, и изменить его позже. Последняя часть названия индикатора говорит о том, что сегодня мы будем делать скользящую среднюю. Возможно, вы видели скользящие средние на графиках или помните этот термин из математики. Скользящие средние используются как фильтр для сглаживания данных.
На скриншоте вы видите скользящую среднюю с 200 периодом, которая дает гладкую линию. Недостатком этого индикатора является достаточно большое отставание. Это означает, что средняя становится мало чувствительна к изменениям цены. Если вы посмотрите на следующий скриншот, то увидите, насколько иное поведение скользящей средней с 200 периодом по сравнению со средней скользящей равной 10 периоду (Зеленого цвета). Последняя средняя гораздо быстрее реагирует на изменение цены, но дает гораздо больше шума.
Существует множество различных типов средних, различия которых заключается в способе вычисления данных. Простая скользящая средняя с 200 периодом вычисляется путем суммирования последних 200 точек и делением полученного результата на 200. Значение точек оказывают одинаковое влияние на результат. Первый бар и последний бар имеют одинаковый вес в формировании результата.
Два типа других, часто используемых средних это Экспоненциальная скользящая средняя и Взвешенная скользящая средняя. Отличие от простого скользящего среднего заключается в том, что они имеют более высокие весовые коэффициенты для более поздних точек данных. У взвешенного скользящего среднего вес будет уменьшаться в арифметической прогрессии. Для экспоненциальной средней он будет уменьшаться в геометрической прогрессии. Если вы хотите узнать подробнее о средних вы можете начать со статьи в Википедии. Для дальнейшего понимания этого урока, вам не нужна дополнительная информация.
Давайте начнем программировать нашу среднюю скользящую. Наш индикатор должен не только рассчитывать среднее значение, но и должен выводить этот результат на график. У Easy Language есть зарезервированное слово для этого – “Plot”, и мы используем его, чтобы сделать это. Прежде чем начать программировать, всегда лучше подумать о том, что вы хотите сделать и как вы хотите это сделать.
Так как этот индикатор не очень сложный, обдумывание не займет много времени. Когда речь идет о более сложных индикаторах, то вы можете сэкономить много времени с помощью предварительного планирования.
Наша цель состоит в том, чтобы создать индикатор, который вычисляет и рисует простую скользящую среднюю. Так же нам нужна возможность изменять длину средней при помощи вводных, для удобства настройки.
Для средней нам нужно сложить значения за необходимый период. Нам не нужно писать код, для всех возможных периодов средней. Нам нужно чтобы код был способен вычислять все возможные периоды сам по себе. Как вы думаете, как это можно сделать?
Ответ заключается в том, что нам циклическое повторение, которое может выполнятся для каждого бара несколько раз подряд. (на протяжении периода средней). Это звучит сложно, но на практике это будет довольно просто. Мы будем использовать цикл “for loop” для этой задачи. Этот цикл повторяется один или несколько раз, столько сколько определит пользователь. Код в Easy Language выполняется сверху вниз, и как правило, слева на право. После того, как код строки выполнен, выполняется следующая строка и так далее. В случае, если строка кода является началом цикла, то код строки внутри цикла будет выполняться установленное количество раз. Только тогда, когда цикл завершился, выполняются строки, следующие за строкой цикла.
Цикл выглядит и работает следующим образом:
Числовая переменная будет увеличиваться (или уменьшаться) с каждым циклом от её начального значения до конечного.
На скриншоте изображен цикл для переменной счетчика (ii в данном случае), с начальным значением 0. Цикл будет повторяться десять раз пока счетчик не достигнет значения 9. Затем блок цикла выполнится последний раз и отключится. Вам не нужно увеличивать значение счетчика самостоятельно, код цикла сам сделает это. Текущее значение счетчика будет сохранено в переменной счетчика. Таким образом, вы можете получить доступ к счетчику в каждом цикле и использовать его значение для наших расчетов. Это пригодиться для расчета нашей средней.
Иногда может потребоваться уменьшать значение счетчика на единицу при каждом повторении. Начальное значение в этом примере 9, но цикл выполняется десять раз, пока не заканчивается. Счетчик просто уменьшается с каждым повторением на единицу, пока не становится равным 0.
В EasyLanguage вы можете ссылаться на данные предыдущих баров. Использование числа в квадратных скобках вместе с зарезервированным словом, вычислением или переменной возвращает значение для определенного бара. Номер бара растет с текущего бара (который обозначается [0]), с шагом в один. Если вы хотите сохранить значение закрытия предыдущего бара в переменной под названием PrevCloseValue вы можете сделать это следующим образом:
Нам нужно построить нашу среднюю при помощи цен закрытия для последних Х баров. Здесь Х представляет вводную, чтобы обеспечить большую гибкость. Вы наверное, уже поняли, что мы будем использовать цикл, а так же мы будем ссылаться на значения предыдущих баров. Этого должно быть достаточно, чтобы написать код для основной части нашего индикатора. Давайте создадим вводные и переменные. Как вы помните из прошлого урока, что называя переменные значимыми именами, вы можете избежать множества неприятностей в будущем.
Нам нужно объявить вводную, с помощью которой мы сможем менять период нашей средней. Кроме того, нам нужны переменные, в которых будет храниться результаты вычислений, одна для значений счетчика, другая для хранения среднего значения. Для того чтобы нарисовать линию средней на графике мы будем использовать зарезервированное слово “Plot”. В Multicharts, вы можете использовать до 999 графиков одновременно. Зарезервированное слово “Plot” может иметь несколько параметров, такие как цвет, размер графика и другие. Мы поступим просто, и зададим Plot1 всего два параметра – один для цифрового значения переменной, другой для названия. В итоге, код должен выглядеть примерно так:
После компиляции этого кода мы можем загрузить наш индикатор на график в Multicharts. Давайте посмотрим на свойства индикатора. Вы можете найти их в ) >Файл>Свойства (>File>Properties) или нажав на значок Свойства в меню (он должен быть слева от кнопки Компиляция). Во вкладке стиль можно изменить цвет, стиль и толщину линии созданной вами. Открыв вкладку Свойства вы увидите несколько вариантов стиля, но сейчас вам нужно убедиться, что переключатель “Same as symbol” включен. Когда включена такая опция, индикатор рисуется непосредственно на графике цены, а не в дополнительном окне.
Теперь мы готовы применить наш индикатор к графику цены. Если у вас открыто окно с графиком цены в главном окне Multicharts, вы можете легко вставить в него индикатор.
Результат применения индикатора, должен быть похож на изображенный выше. Однако, как вы видите, он не выглядит правильным, так как не похож на привычную скользящую среднюю. Вы видите плоскую линию, которая растет от начала до конца графика. Это говорит о том, что мы где-то ошиблись. Как вы думайте, чего не хватает в коде? На самом деле мы забыли про маленькую, но крайне важную вещь. Нам нужно было кое-что добавить в первую часть цикла. Цикл просто складывает значения за предыдущие десять баров с каждым новым баром. Это нормально, но нам не нужно добавлять новые значения к старым значениям. Другими словами, вы должны убедиться, что CloseValueSum не содержит старые значения, когда начинается цикл. Добавив одну строку кода, мы получаем результат, который хотели достичь.
Мы так же можем изменить внешний вид индикатора на графике. С помощью вкладки стиль (style) под «Формат исследования» (Format study) мы можем изменить стиль, цвет и толщину линии. Во вкладке “Inputs” вы найдете вводные, которые мы создали, с настройками по умолчанию. Если вы загрузите второй экземпляр исследования и поменяете цвет и длину, вы сможете убедиться, что разные параметры дают разный результат.
или всё ещё живёт в омеге 2000i?