Есть задача в определении глобального тренда на 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 }
Спасибо, уточнить хочу. Закоментированый код специально? Можно любой бар подставить?
Спасибо, уточнить хочу. Закоментированый код специально? Можно любой бар подставить?
Да, это как пример, бар можно в параметры вывести и подгонять.
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);
Да, это как пример, бар можно в параметры вывести и подгонять.
Данная функция ищет и проверяет рядом стоящие фракталы или эксремальные (глобальные), ярко выраженные?
Просто мне по ходу видется что рядом стоящие, а это немного не то. Нужно четкие низины и вершины.
Чтобы можно было прописать так:
if (FrDn2 < FrDn1 && FrUp2 < FrUp1) return (1); Тренд на Бай if (FrDn2 > FrDn1 && FrUp2 > FrUp1) return (-1); Тренд на Селл return (0); Флет
Вот пример, на картинке с глобальными экстремумами. После их формирования мы утверждаем что у нас Тренд Бай. При изменении логики можно утверждать, что начался Тренд Селл
Данная функция ищет и проверяет рядом стоящие фракталы или эксремальные (глобальные), ярко выраженные?
Последние 2 фрактала на указанном в параметрах тф.
Значение берётся самый максимальный - минимальный фрактал из этих двух.
Чуть Выше привел пример правильного определения с экстремумами )) Фрактала то 4, только они не рядом стоят.
Типа такого ?
Индикатор поможет какой ТФ лучше исследовать по фракталам
Да тут индикатор то и не нужен как таковой, это видно визуально, просто хотелось автоматизировать процедурой, которая возвращает значения: 1 если тренд Бай, -1 если тренд Селл, 0 если Флет по примеру, который я привел. Индикатор строит направления по последним фракталам, а это неверно, будет много ложных сигналов.
хотелось автоматизировать процедурой, которая возвращает значения: 1 если тренд Бай, -1 если тренд Селл, 0 если Флет по примеру, который я привел. Индикатор строит направления по последним фракталам, а это неверно, будет много ложных сигналов.
Так в чём проблема то пример же верный.
По старшему тф как раз фракталы так строятся по интересным вершинам.
int signal = 0; if (FrDn2 < FrDn1 && FrUp2 < FrUp1) signal = 1; Тренд на Бай if (FrDn2 > FrDn1 && FrUp2 > FrUp1) signal = -1; Тренд на Селл
Так в чём проблема то пример же верный.
По старшему тф как раз фракталы так строятся по интересным вершинам.
Я же написал, что это не глобальные экстремумы. А локальные рядом расположенные. Глобальные я отмечал на своем скриншоте.
Нужно чтобы он глобальные находил и по ним определял какой тренд.
Проще, на Н4 и D находил глобальные точки, без переключения на меньшие таймфреймы.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день! Есть задача в определении глобального тренда на H4, D и выше.
Для Buy;
4 фрактала (2 нижних и 2 верхних):
1. Направление слева направо;
2. Первый нижний ниже второго нижнего
3. Первый верхний выше второго верхнего
4. Берутся только значимые фракталы - экстремумы, а не все подряд;
5. ZigZag не подходит, сильно врет и неправильно размечает;
Для SELL все зеркально.
Как это можно реализовать? Или может есть коды, где это уже реализовано?
P.S. В ручную тестировал фрактальный тренд, работает намного надежней, чем MA с периодами от 50 до 233 и углом наклона в 20 градусов, намного меньше ложных входов.
Спасибо за ответ.