Пользовательские индикаторы > AutoChannels - автоматическое построение каналов по экстремумам

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

AutoChannels - автоматическое построение каналов по экстремумам

Непрочитанное сообщение evge » 18 фев 2016, 08:14

Индикатор AutoChannels производит поиск по истории экстремумов и отмечает их кружками.
Между двумя последними понижающимися максимумами и двумя последними повышающимися минимумами, если таковые имеются, рисуется трендовая линия до текущего бара (последний видимый бар на графике). Если между данными экстремумами имеется противоположный экстремум (мин., макс.) на него проецируется трендовая линия, формируя канал. Дополнительно рисуется центральная линия.

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

PeriodL - количество баров (слева) для поиска экстремумов
PeriodR - количество баров (справа) для поиска экстремумов
Scan - количество баров сканируемой истории
ShowType - отображение в виде: 0 - каналы, 1..x - линии

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

AutoChannels-08.png
AutoChannels-08.png (37.09 КБ) 35598 просмотров

AutoChannels-07.png
AutoChannels-07.png (39.47 КБ) 35638 просмотров

AutoChannels-06.png
AutoChannels-06.png (40.33 КБ) 35642 просмотра

AutoChannels-00.png
AutoChannels-00.png (41.29 КБ) 35664 просмотра

AutoChannels-01.png
AutoChannels-01.png (40.41 КБ) 35693 просмотра

AutoChannels-02.png
AutoChannels-02.png (39.61 КБ) 35693 просмотра

AutoChannels-03.png
AutoChannels-03.png (37.39 КБ) 35693 просмотра

AutoChannels-04.png
AutoChannels-04.png (40.43 КБ) 35693 просмотра

AutoChannels-05.png
Два и более индикатора AutoChannels с разными параметрами
AutoChannels-05.png (40.88 КБ) 35691 просмотр


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

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

function Initialize()
{
   IndicatorName = "AutoChannels";   
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);   
   AddSeries("EH", DrawAs.Custom, Color.Green, true, Axes.Parent);   
   AddSeries("EL", DrawAs.Custom, Color.Red, true, Axes.Parent);
   AddSeries("Up1", DrawAs.Custom, Color.Green, true, Axes.Parent);
   AddSeries("Up2", DrawAs.Custom, Color.Green, true, Axes.Parent);
   AddSeries("UpA", DrawAs.Custom, Color.Gray, true, Axes.Parent); //average line   
   AddSeries("Down1", DrawAs.Custom, Color.Red, true, Axes.Parent);
   AddSeries("Down2", DrawAs.Custom, Color.Red, true, Axes.Parent);
   AddSeries("DownA", DrawAs.Custom, Color.Gray, true, Axes.Parent); //average line

   AddParameter("PeriodL", 15);   // фракталы, баров слева
   AddParameter("PeriodR", 15);   // фракталы, баров справа
   AddParameter("Scan", 300, 1); // сканируемый период
   AddParameter("ShowType", 0); // отображение в виде: 0 - каналы, 1..x - линии
}

function Evaluate()
{
// evge 18.02.2016 - 20.02.2016, http://alfadirect4.ru

// Extremums

if ((MaxIndex - CurrentIndex) > Scan) return;

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

var HC = true;
var LC = true;

//PeriodR
for (var x = 0; x < PeriodR; x++) {

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

if (!LC && !HC) break;

} //x

//PeriodL
for (var x = 0; x < PeriodL; x++) {

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

if (!LC && !HC) break;

} //x

if (HC) EH[PeriodR] = Input.High[PeriodR];
if (LC) EL[PeriodR] = Input.Low[PeriodR];

EH.DrawCircle();
EL.DrawCircle();

// TrendLines

if (MaxIndex == CurrentIndex) {

// Нисходящий канал / тренд

int x1 = 0, x2 = 0, x3 = 0;
double y1 = 0.0, y2 = 0.0, y3 = 0.0, Shift = 0.0;

for (var x = 0 + PeriodR; x < Scan; x++) {
   if (EH[x] > 0 && y2 == 0) { y2 = EH[x]; x2 = x; x++;//x+=Period-1;
   }
   if (y2 != 0) {
      if (EH[x] > 0 && y1 == 0 && y2 > EH[x]) break;
      if (EL[x] > 0) { x3 = x; y3 = EL[x]; }
      if (EH[x] > 0 && y1 == 0) { y1 = EH[x]; x1 = x; break; }
   } //y2
} //x

if (x1 > 0 && x2 > 0) {   
   Down1[x1] = y1;
   Down1[0] = (double)(0 - x1) / (x2 - x1) * (y2 - y1) + y1;
   if (x1 > x3 && x3 > x2)
      {
      Shift = y3 - ((double)(x3 - x1) / (x2 - x1) * (y2 - y1) + y1);
      Down2[x1] = Down1[x1] + Shift; //y3
      Down2[0] = Down1[0] + Shift;
      DownA[x1] = Down1[x1] + Shift / 2; //y3
      DownA[0] = Down1[0] + Shift / 2;
      }
}

// Восходящий канал / тренд

x1 = 0; x2 = 0; x3 = 0;
y1 = 0.0; y2 = 0.0; y3 = 0.0;

for (var x = 0 + PeriodR; x < Scan; x++) {
   if (EL[x] > 0 && y2 == 0) { y2 = EL[x]; x2 = x; x++; //x+=Period-1;
   }
   if (y2 != 0) {
      if (EL[x] > 0 && y1 == 0 && y2 < EL[x]) break;
      if (EH[x] > 0) { x3 = x; y3 = EH[x]; }
      if (EL[x] > 0 && y1 == 0) { y1 = EL[x]; x1 = x; break; }
   } //y2
} //x

if (x1 > 0 && x2 > 0) {   
   Up1[x1] = y1;
   Up1[0] = (double)(0 - x1) / (x2 - x1) * (y2 - y1) + y1;
   if (x1 > x3 && x3 > x2)
      {
      Shift = y3 - ((double)(x3 - x1) / (x2 - x1) * (y2 - y1) + y1);
      Up2[x1] = Up1[x1] + Shift; //y3
      Up2[0] = Up1[0] + Shift;
      UpA[x1] = Up1[x1] + Shift / 2; //y3
      UpA[0] = Up1[0] + Shift / 2;
      }
}

} //m=c

if (ShowType == 0) {
   if (Down2 > 0)
   Down1.DrawChannel(Down2);
   else
   Down1.DrawLine();

   if (Up2 > 0)
   Up1.DrawChannel(Up2);
   else
   Up1.DrawLine();
} else
{
Down1.DrawLine();
Up1.DrawLine();
Down2.DrawLine();
Up2.DrawLine();
}

UpA.DrawLine();
DownA.DrawLine();
}


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

AutoChannels.zip
(1.6 КБ) 2104 скачивания
никогда такого не было и вот опять

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

Re: AutoChannels - автоматическое построение каналов

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

Внес небольшие изменения по отображению. Добавил возможность выводить в виде каналов или линий на выбор.
никогда такого не было и вот опять

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

Re: AutoChannels - автоматическое построение каналов

Непрочитанное сообщение evge » 18 фев 2016, 22:08

Небольшие изменения, мелкая оптимизация. Исходный код и файл заменен. Изменения только в коде, функционал прежний.
никогда такого не было и вот опять

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

Re: AutoChannels - автоматическое построение каналов

Непрочитанное сообщение evge » 18 фев 2016, 22:33

Добавил центральную линию.
никогда такого не было и вот опять

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

Re: AutoChannels - автоматическое построение каналов по экстремумам

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

Добавил возможность раздельно указывать периоды для поиска экстремумов слева и справа.
Параметр Period заменен на 2 параметра: PeriodL, PeriodR
никогда такого не было и вот опять

Nurse
Сообщения: 10
Зарегистрирован: 23 июн 2016, 11:01

Re: AutoChannels - автоматическое построение каналов по экстремумам

Непрочитанное сообщение Nurse » 02 сен 2016, 12:14

Доброго дня.
Помогите пожалуйста. Планирую этот индикатор в стратегию добавить, можете добавить, что бы индикатор в момент когда рисует точку снизу выдавал переменную например LocaLow =true, а в момент когда рисует точку сверху LocalHigh = true, а спустя одну свечку они уже стали бы false.

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

Re: AutoChannels - автоматическое построение каналов по экстремумам

Непрочитанное сообщение evge » 02 сен 2016, 15:15

Это фракталы и момент тут наступает "задним числом".
никогда такого не было и вот опять

Verticalx
Сообщения: 2
Зарегистрирован: 08 авг 2022, 22:46

Re: AutoChannels - автоматическое построение каналов по экстремумам

Непрочитанное сообщение Verticalx » 08 авг 2022, 22:48

Добрый день,

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

А возможно ли:

1) прекращать построение торгового канала при пересечении каким-либо баром любой из линий после крайней правой точки построения канала?

2) возможно ли получение координат (значений цены/бара) при пробое канала?


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

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

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