Знатоки, помогите!

 

Здравствуйте. Помогите пожалуйста с этим индикатором. Уже пять дней бьюсь. Не
 могу понять почему не работает.
 Я его делал для определения истинного фрактала. Модель истинного фрактала
 считается, когда наименьшая цена опустилась от наивысшего значения два дня
 тому назад на величину составляющую 0,382 или 0,618, расчитанный между пиком и
 наименьшей ценой четыре дня назад. Это фрактал вверх. Для нижнего - наоборот.
У каждого фрактала проверяю значения его "крвыльев":
 
                                             High{3}
 
                              Low{5}                  Low{1}


d=[ High{3}-Low{1} ] / [ High{3}-Low{5} ]
 if (0.382<d<0.618) то фрактал Up истиннен и ставим значение.
 
 Рассчет вроде правилен, но не работает. Может я не правильно обозначил
 переменные?

Файлы:
4.mq4  3 kb
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 White

//---- input parameters

extern int CountBars=3000;

//---- buffers
double val1[];
double val2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,217);
   SetIndexBuffer(0,val1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,218);
   SetIndexBuffer(1,val2);
   SetIndexEmptyValue(1,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2                                            |
//+------------------------------------------------------------------+
int start()
  { double F_u,F_d;
   double xU,yU,dU,xD,yD,dD;
   int limit;
   int counted_bars=IndicatorCounted();
   
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for(int i=3; i<limit; i++)
{ 
   xU=High[i]-Low[i+2];
   yU=High[i]-Low[i-2];
   dU=yU/xU;
   
   xD=High[i+2]-Low[i];
   yD=High[i-2]-Low[i];
   dD=yD/xD;
   
        F_u=iFractals(0,0,MODE_UPPER,i);
        F_d=iFractals(0,0,MODE_LOWER,i);

         
if (F_u!=0&&0.382<dU<0.618)
{
        val1[i]=High[i]+15*Point;
}
if (F_d!=0&&0.382<dD<0.618) 
{
        val2[i]=Low[i]-15*Point;
}


}
   return(0);
  }
так будет наглядней
 
Kostay:
так будет наглядней
if (F_u!=0&&0.382<dU<0.618)??????????
{
        val1[i]=High[i]+15*Point;
}
if (F_d!=0&&0.382<dD<0.618) ????????
{
        val2[i]=Low[i]-15*Point;
}
 

d=[ High{3}-Low{1} ] / [ High{3}-Low{5} ]
if (0.382<d<0.618) то фрактал Up истиннен и ставим значение.

dU - расчет для фрактала вверх, dD - рассчет для фрактала вниз. 

 
Kostay:

d=[ High{3}-Low{1} ] / [ High{3}-Low{5} ]
if (0.382<d<0.618) то фрактал Up истиннен и ставим значение.

dU - расчет для фрактала вверх, dD - рассчет для фрактала вниз.

Вы результат сравнения d c величиной 0.382 сравниваете с величиной 0.618 и чтобы это значило ?

Учебник почитать не хотите ? Или хотя бы что-нибудь по программированию ? Примеры посмотреть - как правильно писать логические условия ?

 

Сравнивал и так и так.

Учебник "или что-нибудь по програмированию" периодически читаю. и примеров много посмотрел.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 White

//---- input parameters

extern int CountBars=3000;

//---- buffers
double val1[];
double val2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,217);
   SetIndexBuffer(0,val1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,218);
   SetIndexBuffer(1,val2);
   SetIndexEmptyValue(1,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2                                            |
//+------------------------------------------------------------------+
int start()
  { double F_u,F_d;
   double xU,yU,dU,xD,yD,dD;
   int limit;
   int counted_bars=IndicatorCounted();
   
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for(int i=3; i<limit; i++)
{ 
   xU=High[i]-Low[i+2];
   yU=High[i]-Low[i-2];
   dU=yU/xU;
   
   xD=High[i+2]-Low[i];
   yD=High[i-2]-Low[i];
   dD=yD/xD;
   
        F_u=iFractals(0,0,MODE_UPPER,i);
        F_d=iFractals(0,0,MODE_LOWER,i);

         
if (F_u!=0&&0.382<dU&&dU<0.618)
{
        val1[i]=High[i]+15*Point;
}
if (F_d!=0&&0.382<dD&&dD<0.618) 
{
        val2[i]=Low[i]-15*Point;
}


}
   return(0);
  }
Вот первый вариант. Два ненормализованных числа с плавающей точкой нельзя связывать операциями == или !=, но можно операциями <,>. Результат такой же.
 
if (F_u!=0&&0.382<dU&&dD<0.618)
{
        val1[i]=High[i]+15*Point;
}
if (F_d!=0&&0.382<dD&&dU<0.618) 
{
        val2[i]=Low[i]-15*Point;
}


 
Такой вариант у меня был. предыдущий комментарий.
 
Kostay:

Здравствуйте. Помогите пожалуйста с этим индикатором. Уже пять дней бьюсь. Не
могу понять почему не работает.
Я его делал для определения истинного фрактала. Модель истинного фрактала
считается, когда наименьшая цена опустилась от наивысшего значения два дня
тому назад на величину составляющую 0,382 или 0,618, расчитанный между пиком и
наименьшей ценой четыре дня назад. Это фрактал вверх. Для нижнего - наоборот.
У каждого фрактала проверяю значения его "крвыльев":

High{3}

Low{5} Low{1}


d=[ High{3}-Low{1} ] / [ High{3}-Low{5} ]
if (0.382<d<0.618) то фрактал Up истиннен и ставим значение.

Рассчет вроде правилен, но не работает. Может я не правильно обозначил
переменные?

А можно скриншот посмотреть?
 
на графике ни чего не выдает!
 
Kostay:
на графике ни чего не выдает!
А так ? ;-)
Файлы:
4_2.mq4  2 kb
Причина обращения: