Пользовательские индикаторы > Extremums - экстремумы (фракталы)

Дополнительные индикаторы от пользователей Альфа-Директ 4. Готовые решения от пользователей.
Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Extremums - экстремумы (фракталы)

Непрочитанное сообщение evge » 05 фев 2016, 11:32

Описание:

Индикатор производит поиск по истории экстремумов и отмечает их кружками. Аналог фракталов Билла Вильямса.

Входные параметры:

Period - количество баров (слева и справа) для поиска экстремумов.

Примеры работы:

AD4-Extremums-00.png


Исходный текст индикатора:

Код: Выделить всё

function Initialize()
{
   IndicatorName = "Extremums";   
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);   
   AddSeries("H", DrawAs.Custom, Color.Green);   
   AddSeries("L", DrawAs.Custom, Color.Red);

   AddParameter("Period", 6);
}

function Evaluate()
{
//evge 05.02.2016 http://alfadirect4.ru

var High = Input.High[Period];
var Low = Input.Low[Period];

var HC = 1;
var LC = 1;

for (var x = 0; x < Period * 2; x++) {

if (Input.High[x] > High) HC = 0;
if (Input.Low[x] < Low) LC = 0;

if (LC == 0 && HC == 0) break;

} //x

if (HC > 0) H[Period] = Input.High[Period];
if (LC > 0) L[Period] = Input.Low[Period];

H.DrawCircle();
L.DrawCircle();

}



Скачать исходный текст:

Extremums.zip
(834 байт) 1650 скачиваний
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Re: Extremums

Непрочитанное сообщение evge » 07 фев 2016, 17:59

Ещё один вариант реализации.

Неуверен, но возможно он быстрее, т.к. цикл меньше в 2 раза, но условия в 2 раза "тяжелее" внутри цикла.

Код: Выделить всё

function Initialize()
{
   IndicatorName = "Extremums";   
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);   
   AddSeries("H", DrawAs.Custom, Color.Green);   
   AddSeries("L", DrawAs.Custom, Color.Red);

   AddParameter("Period", 6);
}

function Evaluate()
{
//evge 07.02.2016 http://alfadirect4.ru

var High = Input.High[Period];
var Low = Input.Low[Period];

var HC = true;
var LC = true;

for (var x = 1; x <= Period; x++) {

if (Input.High[Period + x] > High || Input.High[Period - x] > High) HC = false;
if (Input.Low[Period + x] < Low || Input.Low[Period - x] < Low) LC = false;

if (!LC && !HC) break;

} //x

if (HC) H[Period] = Input.High[Period];
if (LC) L[Period] = Input.Low[Period];

H.DrawCircle();
L.DrawCircle();

}
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Re: Extremums

Непрочитанное сообщение evge » 07 фев 2016, 21:24

Продолжая оптимизацию.

Логично будет, что экстремумов меньше чем баров на графике, а значит их поиск чаще будет браковаться с краев.

Вот вариант где поиск и проверка High, Low на превышение идёт с краев диапазона. Заодно добавлена проверка на уже забракованный экстремум, дабы несколько раз за проход не браковалось.

В теории это должно работать ещё быстрее

Код: Выделить всё

function Initialize()
{
   IndicatorName = "Extremums";   
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);   
   AddSeries("H", DrawAs.Custom, Color.Green);   
   AddSeries("L", DrawAs.Custom, Color.Red);

   AddParameter("Period", 6);
}

function Evaluate()
{
//evge 07.02.2016 http://alfadirect4.ru

var High = Input.High[Period];
var Low = Input.Low[Period];

var HC = true;
var LC = true;

for (var x = 0; x < Period; x++) {

if (HC) if (Input.High[Period * 2 - x] > High || Input.High[x] > High) HC = false;
if (LC) if (Input.Low[Period * 2 - x] < Low || Input.Low[x] < Low) LC = false;

if (!LC && !HC) break;

} //x

if (HC) H[Period] = Input.High[Period];
if (LC) L[Period] = Input.Low[Period];

H.DrawCircle();
L.DrawCircle();

}
никогда такого не было и вот опять

yaroslav13
Сообщения: 3
Зарегистрирован: 11 янв 2019, 13:40
Поблагодарили: 1 раз

Re: Extremums - экстремумы (фракталы)

Непрочитанное сообщение yaroslav13 » 11 янв 2019, 13:57

Добрый день! Подскажите как сделать что бы последние найденные значения экстремумов отображались на последнем баре? Хотел добавить в стратегию , что бы выход их позиций был по пересечению последнего найденного экстремума.

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Re: Extremums - экстремумы (фракталы)

Непрочитанное сообщение evge » 11 янв 2019, 14:29

Здравствуйте!

Вот код

Код: Выделить всё

function Initialize()
{
   IndicatorName = "ExtremumsLast";   
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);   
   AddSeries("H", DrawAs.Custom, Color.Green);   
   AddSeries("L", DrawAs.Custom, Color.Red);

   AddParameter("Period", 6);
}

function Evaluate()
{
//evge 07.02.2016 http://alfadirect4.ru

var High = Input.High[Period];
var Low = Input.Low[Period];

var HC = true;
var LC = true;

for (var x = 1; x <= Period; x++) {

if (Input.High[Period + x] > High || Input.High[Period - x] > High) HC = false;
if (Input.Low[Period + x] < Low || Input.Low[Period - x] < Low) LC = false;

if (!LC && !HC) break;

} //x

if (HC) H[0] = Input.High[Period]; else H[0] = H[1];
if (LC) L[0] = Input.Low[Period]; else L[0] = L[1];

H.DrawCircle();
L.DrawCircle();

}


Изменение только в строках

Код: Выделить всё

if (HC) H[Period] = Input.High[Period];
if (LC) L[Period] = Input.Low[Period];


заменены на

Код: Выделить всё

if (HC) H[0] = Input.High[Period]; else H[0] = H[1];
if (LC) L[0] = Input.Low[Period]; else L[0] = L[1];


Вот что будет на выходе

ExtremumsLast-01.png
ExtremumsLast-01.png (28.03 КБ) 21023 просмотра
никогда такого не было и вот опять

yaroslav13
Сообщения: 3
Зарегистрирован: 11 янв 2019, 13:40
Поблагодарили: 1 раз

Re: Extremums - экстремумы (фракталы)

Непрочитанное сообщение yaroslav13 » 11 янв 2019, 14:59

Спасибо большое! :)


Вернуться в «Пользовательские индикаторы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей