Индикатор глючный, на графике запущены одновременно два индикатора фракталов, один встроенный (обозначен черными стрелочками/галочками), второй скачен отсюда (обозначен красным и синим ромбом). В момент возможного формирования фрактала сигнал одновременно дают оба индикатора, но ... НО в случае отмены фрактала (пробой последним формирующимся баром, экстремума фрактала), отменяется сигнал только! по встроенному индикатору, а индикатор выложенный здесь продолжает давать сигнал (его значки не удаляются с чарта).
Если не трудно поправьте код, плиз.
Блин, да он и сигнал раньше подаёт, если скорость в тестере поменьше сделать это чётко видно.
Может выложите нормальный индикатор, тот который в платформу встроен? (в качестве предложения)
Этот индикатор вроде по лучше кажет.
//+------------------------------------------------------------------+ //| wlxFractals.mq4 | //| Copyright © 2004, by konKop, GOODMAN, Mstera, af + wellx | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, by wellx" #property link "http://www.metaquotes.net" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 SeaGreen #property indicator_color2 Red //---- input parameters int Equals = 5; int nLeftUp = 2; int nRightUp = 2; int nLeftDown = 2; int nRightDown = 2; //---- buffers double FractalsUp[]; double FractalsDown[]; //---- int pos = 0, cntup = 0, cntdown = 0, cnt = 0; int r = 0, l = 0, e = 0; int fup = 0, fdown = 0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexBuffer(0, FractalsUp); SetIndexBuffer(1, FractalsDown); //---- SetIndexStyle(0, DRAW_ARROW, 0, 2); SetIndexArrow(0, 159); //---- SetIndexStyle(1, DRAW_ARROW, 0, 2); SetIndexArrow(1, 159); //---- cntup = nLeftUp + nRightUp + Equals + 1; cntdown = nLeftDown + Equals + 1; if(cntup >= cntdown) cnt = cntup; if(cntup < cntdown) cnt = cntdown; //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i=0, j=0; int cbars = IndicatorCounted(); //---- if(cbars < 0) return(-1); //---- if(cbars > 0) cbars--; pos = 0; //---- if(cbars > (Bars - cnt - 1)) pos =(Bars - cnt - 1); else pos = Bars - (cbars + nRightUp); //---- while(pos >= nRightUp) { FractalsUp[pos] = NULL; FractalsDown[pos] = NULL; //фРАКТАЛ ВВЕРХ r = nRightUp; //проверяем правую сторону фрактала //---- for(i = 1; i <= r; i++) { if(High[pos] <= High[pos-i]) break; } //если справа все ОК то i должно быть равно r+1 if(i == r + 1) //FractalsUp[pos]=High[pos]; { l = nLeftUp; //проверяем левую сторону фрактала e = Equals; //---- for(j = 1; j <= l + Equals; j++) { if(High[pos] < High[pos+j]) break; //---- if(High[pos] > High[pos+j]) l--; //---- if(High[pos] == High[pos+j]) e--; //---- if(l == 0) { FractalsUp[pos] = High[pos]; break; } //---- if(e < 0) break; } } //ФРАКТАЛ ВНИЗ r = nRightDown; //проверяем правую сторону фрактала //---- for(i = 1; i <= r; i++) { if(Low[pos] >= Low[pos-i]) break; } //---- if(i == r + 1) //FractalsUp[pos]=High[pos]; { l = nLeftDown; //проверяем левую сторону фрактала e = Equals; //---- for(j = 1; j <= l + Equals; j++) { if(Low[pos] > Low[pos+j]) break; //---- if(Low[pos] < Low[pos+j]) l--; //---- if(Low[pos] == Low[pos+j]) e--; //---- if(l == 0) { FractalsDown[pos] = Low[pos]; break; } if(e < 0) break; } } pos--; } //---- return(0); } //+------------------------------------------------------------------+
вот скрин для сравнения.
int Equals = 5; int nLeftUp = 2; int nRightUp = 2; int nLeftDown = 2; int nRightDown = 2;можно ли переделать текст индикатора, чтобы они стали внешними параметрами, которые можно задавать самому, чтобы искать фракталы из 5, 7, 9....свечей. Так можно было бы выделить наиболее важные экстремумы и частично избавиться от шумов. Как я понимаю, нужно задать всего 2 величины, например N=5, k=2, если рассматривать фрактал из 5 свечей.
Этот индикатор вроде по лучше кажет.
вот скрин для сравнения.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Fractals:
Фракталы (Fractals) — это один из пяти индикаторов торговой системы Билла Вильямса, позволяющий обнаруживать дно или вершину.
Author: MetaQuotes Software Corp.