Всем хорош фрактальный индикатор многоуважаемого Билла Вильямса, но не позволяет изменить период оценки экстремумов. Для примера, в стратегии Снайпер, при поиске уровней разворота РУ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); }
Так это выглядит на графике:
Далее этот индикатор я буду использовать для индикаторных исследований по стратегии снайпер