Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1230

Добавлено: evge » 04 фев 2016, 16:13

Тема: TrendLines - автоматическое формирование трендовых линий

Текст сообщения:

Описание:

Индикатор производит поиск по истории экстремумов и отмечает их кружками.
Между двумя последними понижающимися максимумами и двумя последними повышающимися минимумами, если таковые имеются, рисуется трендовая линия до текущего бара.

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

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

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

TrendLines.zip
(1.09 КБ) 1313 скачиваний

AD4-TrendLines-02.png

AD4-TrendLines-01.png


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

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

function Initialize()
{
   IndicatorName = "TrendLines";   
   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("Up", DrawAs.Custom, Color.Green, true, Axes.Parent);   
   AddSeries("Down", DrawAs.Custom, Color.Red, true, Axes.Parent);

   AddParameter("Period", 15);   
   AddParameter("Scan", 200, 1);

}

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

//Extremums

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) EH[Period] = Input.High[Period];
if (LC > 0) EL[Period] = Input.Low[Period];

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

//TrendLines

if (MaxIndex == CurrentIndex) {

var x1 = 0;
var x2 = 0;
var y1 = 0.0;
var y2 = 0.0;

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

if (x1 > 0 && x2 > 0) {   
   Down[x1] = y1;
   Down[0] = (double)(0 - x1) / (x2 - x1) * (y2 - y1) + y1;
}

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

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

if (x1 > 0 && x2 > 0) {   
   Up[x1] = y1;
   Up[0] = (double)(0 - x1) / (x2 - x1) * (y2 - y1) + y1;
}

} //m=c

Down.DrawLine();
Up.DrawLine();

}


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

AD4-TrendLines-00.png