- Вилы Эндрюса является методом определения канала на трендовом рынке.
- Этот метод, в действительности, разделяет главный канал на два меньших равноудаленных канала.
- Линии в Вилах Эндрюса имеют тенденцию вычерчивать линии поддержки и сопротивления.
Вилы Эндрюса были разработаны доктором Аланом Эндрюсом и основываются на том, что он называл своим методом "действия/противодействия". Первоначально названный "Изучением средней линии", этот метод основывается на наборе линий, проведенных от пиков и впадин на ценовом графике. Когда они связаны вместе, совокупность линий сильно напоминает вилы фермера.
Средние линии доктора Эндрюса и модель Вилы, часто показывают линии поддержки и сопротивления, где цены имеют тенденцию останавливаться или разворачиваться.
Параметры
Period - количество баров (слева + справа) для поиска фракталов (экстремумов) на графике
Scan - количество баров истории для анализа
Skip - количество игнорируемых баров от конца графика в сканируемой области (должно быть меньше чем Scan).
Примеры работы
Исходный текст индикатора
Код: Выделить всё
function Initialize()
{
   IndicatorName = "Pitchfork";   
   PriceStudy = true;
   AddInput("Input", Inputs.Candle);   
   AddSeries("EH", DrawAs.Custom, Color.Green, true, Axes.Parent);   
   AddSeries("EL", DrawAs.Custom, Color.Red, true, Axes.Parent);
   //up rays
   AddSeries("uA", DrawAs.Custom, Color.Green, true, Axes.Parent);   
   AddSeries("uB", DrawAs.Custom, Color.Green, true, Axes.Parent);
   AddSeries("uC", DrawAs.Custom, Color.Green, true, Axes.Parent);   
   AddSeries("uD", DrawAs.Custom, Color.Green, true, Axes.Parent);
   //down rays
   AddSeries("dA", DrawAs.Custom, Color.Red, true, Axes.Parent);   
   AddSeries("dB", DrawAs.Custom, Color.Red, true, Axes.Parent);
   AddSeries("dC", DrawAs.Custom, Color.Red, true, Axes.Parent);   
   AddSeries("dD", DrawAs.Custom, Color.Red, true, Axes.Parent);
   AddParameter("Period", 15);   
   AddParameter("Scan", 200, 1);
   AddParameter("Skip", 30, 1);
}
function Evaluate()
{
// Вилы Эндрюса
// evge 26.09.2017 http://alfadirect4.ru
//Extremums
double High = Input.High[Period];
double Low = Input.Low[Period];
bool HC = false, LC = false; 
for (var x = 0; x < Period * 2; x++) { 
   if (Input.High[x] > High) HC = true;
   if (Input.Low[x] < Low) LC = true;
   if (LC && HC) break;
} //x
if (!HC) EH[Period] = Input.High[Period];
if (!LC) EL[Period] = Input.Low[Period];
EH.DrawCircle();
EL.DrawCircle();
//TrendLines
if (MaxIndex == CurrentIndex) {
int    x1 = 0, x2 = 0, x3 = 0;
double    y1 = 0, y2 = 0, y3 = 0, x4 = 0, y4 = 0, y5 = 0;
for (var x = 0 + Period + Skip; x < Scan; x++) {
   if (EL[x] > 0 && y2 == 0 && y1 == 0) { y3 = EL[x]; x3 = x; continue; }   
   if (EL[x] > 0 && y3 != 0 && y2 == 0) break; 
   if (EH[x] > 0 && y3 != 0) { y2 = EH[x]; x2 = x; continue; }
   if (EH[x] > 0 && y3 != 0 && y2 != 0) break;
   
   if (EL[x] > 0 && y3 != 0 && y2 != 0) { y1 = EL[x]; x1 = x; break; } 
}
if (x1 > 0 && x2 > 0 && x3 > 0) {   
   x4 = (x2 + x3) * 0.5;
   y4 = (y2 + y3) * 0.5;
   
   uA[x1] = y1;
   uA[0] = (double)(0 - x1) / (x4 - x1) * (y4 - y1) + y1;
   
   y5 = (double)(x2 - x1) / (x4 - x1) * (y4 - y1) + y1;
   
   uB[x2] = y2;
   uB[0] = uA[0] + (y2 - y5);
   
   uC[x3] = y3;
   uC[0] = uA[0] - (y2 - y5);
   
   uD[x2] = y2;
   uD[x3] = y3;   
}
x1 = 0; x2 = 0; x3 = 0;
y1 = 0; y2 = 0; y3 = 0; x4 = 0; y4 = 0; y5 = 0;
for (var x = 0 + Period + Skip; x < Scan; x++) {
   if (EH[x] > 0 && y2 == 0 && y1 == 0) { y3 = EH[x]; x3 = x; continue; }   
   if (EH[x] > 0 && y3 != 0 && y2 == 0) break; 
   if (EL[x] > 0 && y3 != 0) { y2 = EL[x]; x2 = x; continue; }
   if (EL[x] > 0 && y3 != 0 && y2 != 0) break;
   
   if (EH[x] > 0 && y3 != 0 && y2 != 0) { y1 = EH[x]; x1 = x; break; } 
}
if (x1 > 0 && x2 > 0 && x3 > 0) {   
   x4 = (x2 + x3) * 0.5;
   y4 = (y2 + y3) * 0.5;
   
   dA[x1] = y1;
   dA[0] = (double)(0 - x1) / (x4 - x1) * (y4 - y1) + y1;
   
   y5 = (double)(x2 - x1) / (x4 - x1) * (y4 - y1) + y1;
   
   dB[x2] = y2;
   dB[0] = dA[0] + (y2 - y5);
   
   dC[x3] = y3;
   dC[0] = dA[0] - (y2 - y5);
   
   dD[x2] = y2;
   dD[x3] = y3;   
}
} //m=c
uA.DrawLine();
uB.DrawLine();
uC.DrawLine();
uD.DrawLine();
dA.DrawLine();
dB.DrawLine();
dC.DrawLine();
dD.DrawLine();
}
Скачать исходный текст

 
 