Как ппределить тренд глобально с помощью фракталов на H4, D ?

 

Добрый день! Есть задача в определении глобального тренда на H4, D и выше.


Для Buy;

4 фрактала (2 нижних и 2 верхних):

1. Направление слева направо;

2. Первый нижний ниже второго нижнего

3. Первый верхний выше второго верхнего

4. Берутся только значимые фракталы - экстремумы, а не все подряд;

5. ZigZag не подходит, сильно врет и неправильно размечает;


Для SELL все зеркально.

Как это можно реализовать? Или может есть коды, где это уже реализовано?


P.S. В ручную тестировал фрактальный тренд, работает намного надежней, чем MA с периодами от 50 до 233 и углом наклона в 20 градусов, намного меньше ложных входов.

Спасибо за ответ.

 
Постников Артем:

Есть задача в определении глобального тренда на H4, D и выше.

Для Buy;

4 фрактала (2 нижних и 2 верхних):

1. Направление слева направо;
2. Первый нижний ниже второго нижнего
3. Первый верхний выше второго верхнего
4. Берутся только значимые фракталы - экстремумы, а не все подряд;
5. ZigZag не подходит, сильно врет и неправильно размечает;

Для SELL все зеркально.

Как это можно реализовать? Или может есть коды, где это уже реализовано?

extern int TF = 0; // если (=0) текущий тайм фрейм

void start() 
{
//---- Fractals ----------------------------------------------------------------------------------------------+
  double FrUp1=0.0,FrUp2=0.0;
  double UpF1=0, UpF3=0, UpF13;    // номера верхних фракталов
  int    UpB1=0, UpB3=0, UpSR=2;   // номера баров  
  while (UpF3==0){                 // поиск верхних фракталов
         UpF13=iFractals(NULL,TF,MODE_UPPER,UpSR);
      if(UpF13!=0){if(UpF1==0){UpB1=UpSR; UpF1=UpF13;}
 else if(UpF3==0){UpB3=UpSR; UpF3=UpF13;}}UpSR++;} 
         FrUp1=iHigh(NULL,TF,UpB1); //Последний фрактал
         FrUp2=iHigh(NULL,TF,UpB3); //Предпоследний фрактал
//-----------------------------------+
  double FrDn1=0.0,FrDn2=0.0;
  double DnF1=0, DnF3=0, DnF13;    // номера нижних фракталов
  int    DnB1=0, DnB3=0, DnSR=2;   // номера баров  
  while (DnF3==0){                 // поиск нижних фракталов
         DnF13=iFractals(NULL,TF,MODE_LOWER,DnSR);
      if(DnF13!=0){if(DnF1==0){DnB1=DnSR; DnF1=DnF13;}
 else if(DnF3==0){DnB3=DnSR; DnF3=DnF13;}}DnSR++;} 
         FrDn1=iLow(NULL,TF,DnB1); //Последний фрактал
         FrDn2=iLow(NULL,TF,DnB3); //Предпоследний фрактал
//-----------------------------------+                  
   double FrUp,FrDn;
   datetime TmFrUp,TmFrDn;
   if (FrDn2>FrDn1) 
      {FrDn=iLow(NULL,TF,DnB1);TmFrDn=iTime(NULL,TF,DnB1);} else {FrDn=iLow(NULL,TF,DnB3);TmFrDn=iTime(NULL,TF,DnB3);}
   if (FrUp1>FrUp2) 
      {FrUp=iHigh(NULL,TF,UpB1);TmFrUp=iTime(NULL,TF,UpB1);} else {FrUp=iHigh(NULL,TF,UpB3);TmFrUp=iTime(NULL,TF,UpB3);}

// if(Open[0]>FrUp) пробитие верхнего фрактала тренд для buy
// if(Open[0]<FrDn) пробитие нижнего фрактала тренд для sell
   }
 
FXwin:

Спасибо, уточнить хочу. Закоментированый код специально? Можно любой бар подставить?

 
Постников Артем:

Спасибо, уточнить хочу. Закоментированый код специально? Можно любой бар подставить?

Да, это как пример, бар можно в параметры вывести и подгонять.

extern int Bar = 0; // если (=0) текущий бар, если (=1) предыдущий бар

 int Send;
 if(Open[Bar]>FrUp) Send=OrderSend(Symbol(),OP_BUY,Lot,Ask,10,0,0,"Buy",Magic,0,Blue);
 if(Open[Bar]<FrDn) Send=OrderSend(Symbol(),OP_SELL,Lot,Bid,10,0,0,"Sell",Magic,0,Red);
 
FXwin:

Да, это как пример, бар можно в параметры вывести и подгонять.

Данная функция ищет и проверяет рядом стоящие фракталы или эксремальные (глобальные), ярко выраженные? 

Просто мне по ходу видется что рядом стоящие, а это немного не то. Нужно четкие низины и вершины.

Чтобы можно было прописать так:

 if (FrDn2 < FrDn1 && FrUp2 < FrUp1) return (1); Тренд на Бай
 if (FrDn2 > FrDn1 && FrUp2 > FrUp1) return (-1); Тренд на Селл

 return (0); Флет


Вот пример, на картинке с глобальными экстремумами. После их формирования мы утверждаем что у нас Тренд Бай. При изменении логики можно утверждать, что начался Тренд Селл

 
Постников Артем:

Данная функция ищет и проверяет рядом стоящие фракталы или эксремальные (глобальные), ярко выраженные? 

Последние 2 фрактала на указанном в параметрах тф.
Значение берётся самый максимальный - минимальный фрактал из этих двух.

 
FXwin:


Чуть Выше привел пример правильного определения с экстремумами )) Фрактала то 4, только они не рядом стоят.

 
Постников Артем:

Чуть Выше привел пример правильного определения с экстремумами )) Фрактала то 4, только они не рядом стоят.

Типа такого ?

 
FXwin:

Типа такого ?

Индикатор поможет какой ТФ лучше исследовать по фракталам

Да тут индикатор то и не нужен как таковой, это видно визуально, просто хотелось автоматизировать процедурой, которая возвращает значения: 1 если тренд Бай, -1 если тренд Селл, 0 если Флет по примеру, который я привел. Индикатор строит направления по последним фракталам, а это неверно, будет много ложных сигналов.

 
Постников Артем:

хотелось автоматизировать процедурой, которая возвращает значения: 1 если тренд Бай, -1 если тренд Селл, 0 если Флет по примеру, который я привел. Индикатор строит направления по последним фракталам, а это неверно, будет много ложных сигналов.

Так в чём проблема то пример же верный.
По старшему тф как раз фракталы так строятся по интересным вершинам.

int signal = 0;
if (FrDn2 < FrDn1 && FrUp2 < FrUp1) signal = 1;  Тренд на Бай
if (FrDn2 > FrDn1 && FrUp2 > FrUp1) signal = -1; Тренд на Селл
 
FXwin:

Так в чём проблема то пример же верный.
По старшему тф как раз фракталы так строятся по интересным вершинам.

Я же написал, что это не глобальные экстремумы. А локальные рядом расположенные. Глобальные я отмечал на своем скриншоте.

Нужно чтобы он глобальные находил и по ним определял какой тренд.


Проще, на Н4 и D находил глобальные точки, без переключения на меньшие таймфреймы.