Всем хорош фрактальный индикатор многоуважаемого Билла Вильямса, но не позволяет изменить период оценки экстремумов. Для примера, в стратегии Снайпер, при поиске уровней разворота РУ3, удобно было бы использовать индикатор с периодом 9.
Ниже приводится код фрактального индикатора с настраиваемым периодом. Код настолько прост, что комментировать, а тем более скрывать его в скомпилированную версию смысла не имеет.
#property copyright "Copyright 2017 by Serg Deev"
#property link "http://fx-prog.ru"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_label1 "up"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrAqua
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
#property indicator_label2 "down"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
input int points=9;
double upBuffer[];
double downBuffer[];
int _points;
int OnInit() {
SetIndexBuffer(0,upBuffer);
SetIndexBuffer(1,downBuffer);
SetIndexArrow(0,217);
SetIndexArrow(1,218);
_points = points; if (_points < 5) _points = 5;
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total, const int prev_calculated,
const datetime &time[], const double &open[],
const double &high[], const double &low[],
const double &close[], const long &tick_volume[],
const long &volume[], const int &spread[]) {
if (rates_total < _points) return(0);
int limit = rates_total - prev_calculated;
if (limit > _points) limit -= _points;
for (int i=0; i<limit; i++) {
int up = iHighest(NULL,0,MODE_HIGH,_points,i);
if (up == (i+_points/2)) upBuffer[up] = high[up];
int down = iLowest(NULL,0,MODE_LOW,_points,i);
if (down == (i+_points/2)) downBuffer[down] = low[down];
}
return(rates_total);
}
Так это выглядит на графике:
Далее этот индикатор я буду использовать для индикаторных исследований по стратегии снайпер

13 октября, 2017
Sergey 
Опубликовано в рубрике