iqoption

Индикаторы ThinkOrSwim: Parabolic SAR

Parabolic SAR является трендовым индикатором, который строится непосредственно на графике. Смысл Parabolic SAR индикатора, во многом, совпадает с широко известным индикатором "скользящая средняя". Основные отличия Parabolic SAR от скользящей средней, заключаются в том, что, так называемый,  "параболик" меняет свое положение в зависимости от направления тренда. Во время медвежьего тренда значения индикатора располагаются выше графика цены, а при бычьем тренде - ниже.

 

На рисунке изображен свечной график и в виде красных точек индикатор Parabolic SAR.

 

Глядя на график с нанесенным на него индикатором видно, что при пересечении цены и индикатора происходит переворот Parabolic SAR и следующие значения располагаются по другую сторону от цены. "Переворот" индикатора является сигналом, после которого чаще всего оканчивается ценовое движение, которое переходит во флет или коррекцию, либо вовсе происходит разворот тренда.

 

Опираясь на Parabolic SAR можно с высокой вероятностью определять оптимальные точки выхода из позиций. Так шортовые позиции следует закрывать когда цена поднимается выше линии Parabolic SAR, а лонговые позиции лучше закрыть когда цена опустится ниже линии индикатора. Еще одним вариантом использования индикатора является его использования в роли trailing stop линии (скользящего стопа).

 

Вводные данные (настройки индикатора Parabolic SAR)

 

input accelerationFactor = 0.02; // фактор ускорения – может быть изменен в настройках индикатора.

input accelerationLimit = 0.2; // максимальное значение фактора ускорения – может быть изменен в настройках индикатора.

Проверка корректности данных.

assert(accelerationFactor > 0, "'acceleration factor' must be positive: " + accelerationFactor); // assert – проверяет выражение на истинность (true или false), если выражение истинно – программа выполняется дальше, если выражение ложно – программа завершается аварийно и выводит сообщение, в данном случае о невозможности нахождения значения фактора ускорения среди отрицательных чисел.

 

assert(accelerationLimit >= accelerationFactor, "'acceleration limit' (" + accelerationLimit + ") must be greater than or equal to 'acceleration factor' (" + accelerationFactor + ")"); // в данном выражение проверяется верно ли утверждение – максимальное значение фактора ускорения должно быть больше или равно фактору ускорения, если это не так – выводится сообщение об ошибке.

 

Работа с переменными

 

def state = {default init, long, short}; //переменная state “подготавливается” для работы в конструкции switch-case, задавая три возможных значения - long, short или значение по умолчанию - default init, описываемые ниже

 

Определение переменных

def extreme;

def SAR;

def acc;

 

switch (state[1]) { //оператор switch — это оператор управления, выбирающий из списка возможных вариантов раздел переключения, для выполнения содержащегося в нём кода.

 

В каждой метке case указывается значение-константа. Оператор switch передает управление тому разделу, метка case которого совпадает со значением выражение switch (state[1]). Если ни одна из меток case не содержит совпадающего значения, управление передаётся в раздел default (значение по умолчанию), если таковой имеется. Если же раздела default нет, никакие действия не предпринимаются, и управление передаётся за пределы оператора switch.

case init:

   state = state.long;

   acc = accelerationFactor;

   extreme = high;

   SAR = low;

case short:

   if (SAR[1] < high)

   then {

       state = state.long;

       acc = accelerationFactor;

       extreme = high;

       SAR = extreme[1];

   } else {

       state = state.short;

       if (low < extreme[1])

       then {

           acc = min(acc[1] + accelerationFactor, accelerationLimit);

           extreme = low;

       } else {

           acc = acc[1];

           extreme = extreme[1];

       }

       SAR = max(max(high, high[1]), SAR[1] + acc * (extreme - SAR[1]));

   }

case long:

   if (SAR[1] > low)

   then {

       state = state.short;

       acc = accelerationFactor;

       extreme = low;

       SAR = extreme[1];

   } else {

       state = state.long;

       if (high > extreme[1])

       then {

           acc = min(acc[1] + accelerationFactor, accelerationLimit);

           extreme = high;

       } else {

           acc = acc[1];

           extreme = extreme[1];

       }

       SAR = min(min(low, low[1]), SAR[1] + acc * (extreme - SAR[1]));

   }

}

plot parSAR = SAR;

parSAR.SetPaintingStrategy(PaintingStrategy.POINTS); //стиль рисования (в данном случае точками) может быть выбран в настройках.

parSAR.SetDefaultColor(GetColor(5)); //цвет и размер параметров линии может быть выбран в настройках.