Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Доработка индикатора фракталов.

Господа программисты, есть разминка для мозга.

Есть чудесный индикатор MTF_Fractal_KAE. Но он использует данные простейшего индикатора фракталов iFractals(). Для расширения возможностей индикатора MTF_Fractal_KAE нужно заменить iFractals() кодом не менее чудесного индюка Fractals_Light_KAE.

Самостоятельные потуги результата не дали.

Если ещё и удастся создать буфер Buy и буфер Sell для хранения цены фракталов ближайших к текущей цене выше-ниже, то будет шикарно.
Пробой ближайшего фрактала говорит о смене тенденции, а остальные фракталы будут являться ликвидностью, за которой цена обязательно сходит.

MTF_Fractal_KAE.mq4 (10 Kb)
Fractals_Light_KAE.mq4 (6 Kb)

С уважением, КАЕ.
  • 0
  • Просмотров: 1250
  • 24 ноября 2022, 23:35
  • kvashnin007
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник по индикатору
Следующая запись в группе  
Советник на индикаторах QQQ и QQE Arrow для МТ5
24 ноября 2022
25 ноября 2022

Брокер для ваших роботов, 15 лет на рынке

Комментарии (3)

+
0
заменил фракталы на ваш индикатор: www.opentraders.ru/downloads/3455/


Редактирован: 26 ноября 2022, 12:43
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 25 ноября 2022, 17:54
+
0
Андрей, спасибо большое. Я такой имею. Написал. А можно ли объединить два индюка в один?

Типа того, что я написал, но правильно не работает.Где я пЛОХ?

<code>//+------------------------------------------------------------------+
//|                                           MTF Fractal KAE_v2.mq4 |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrRed    // Up_Fractal_Color
#property indicator_color2 clrBlue   // Down_Fractal_Color

enum Wight
   {
   Three_Bars,
   Five_Bars,
   Seven_Bars,
   };
extern int     Fractal_Timeframe                = 0;
extern Wight   FractalsWight                    =  Five_Bars;
//extern int     LevelDelta                       = 5;
extern bool    Show_Validation_Candle           = false;
extern bool    Show_Line                        = true;
extern int     HistoryBars                      = 2000;

double UpBuffer[], DnBuffer[], refchk, tempref, level;
int    barc;
double Current;
//+------------------------------------------------------------------+
//|                                                             INIT |
//+------------------------------------------------------------------+

int init() 
{
      SetIndexBuffer(0,UpBuffer); SetIndexStyle(0,DRAW_ARROW, DRAW_ARROW, 1);  SetIndexArrow(0,119);
      SetIndexBuffer(1,DnBuffer); SetIndexStyle(1,DRAW_ARROW, DRAW_ARROW, 1);SetIndexArrow(1,119);
   return(0);
}
//+------------------------------------------------------------------+
//|                                                           DEINIT |
//+------------------------------------------------------------------+
int deinit() 
{
   for (int i = ObjectsTotal(); i >= 0; i--) 
      if (StringSubstr(ObjectName(i),0,12) == "MTF_Fractal_KAE") 
         ObjectDelete(ObjectName(i));
   return(0);
}
//+------------------------------------------------------------------+
//|                                                            START |
//+------------------------------------------------------------------+
int start() 
{
   int i, c, dif;
   tempref = iHigh(Symbol(), Fractal_Timeframe, 1) + 
             iHigh(Symbol(), Fractal_Timeframe, 51) + 
             iHigh(Symbol(), Fractal_Timeframe, 101);
   
   if (barc != Bars || IndicatorCounted() < 0 || tempref != refchk) 
      {
      barc = Bars;
      refchk = tempref;
      } 
   else
      return(0);
      
   if (Fractal_Timeframe <= Period()) 
      Fractal_Timeframe = Period();
   
   dif = Fractal_Timeframe/Period();
   
   if (HistoryBars > Bars) HistoryBars = Bars-10;
   
   for(i = 0; i < HistoryBars; i++) 
      {
      if (iBarShift(NULL,Fractal_Timeframe,Time[i]) < 2) 
         {
         UpBuffer[i] = 0;
         DnBuffer[i] = 0;
         continue;
         }
      if(FractalsWight==Three_Bars)
         {
         //----Fractals up
         Current=High[i];
         if(Current>High[i+1] && Current>=High[i-1])
            UpBuffer[i]=Current;
         //----Fractals down
         Current=Low[i];
         if(Current<Low[i+1] && Current<=Low[i-1])
            DnBuffer[i]=Current;
         }
      if(FractalsWight==Five_Bars)
         {
         //----Fractals up
         Current=High[i];
         if(Current>High[i+1] && Current>High[i+2] && Current>=High[i-1] && Current>=High[i-2])
            UpBuffer[i]=Current;
         //----Fractals down
         Current=Low[i];
         if(Current<Low[i+1] && Current<Low[i+2] && Current<=Low[i-1] && Current<=Low[i-2])
            DnBuffer[i]=Current;
         }
      if(FractalsWight==Seven_Bars)
         {
         //----Fractals up
         Current=High[i];
         if(Current>High[i+3] && Current>High[i+2] && Current>High[i+1] 
           && Current>=High[i-1] && Current>=High[i-2] && Current>=High[i-3])
            UpBuffer[i]=Current;
         //----Fractals down
         Current=Low[i];
         if(Current<Low[i+3] && Current<Low[i+2] && Current<Low[i+1] 
           && Current<=Low[i-1] && Current<=Low[i-2] && Current<=Low[i-3])
            DnBuffer[i]=Current;
         }
      }
   //---   
   if (Show_Line) 
      {
      for(i = 0; i < HistoryBars; i++) 
         {
         if (UpBuffer[i] > 0) 
            {
            level = UpBuffer[i];//+LevelDelta*Point;
            for (c = i; c > 0; c--) 
               {
               if ((Open[c] < level && Close[c] > level) || (Open[c] > level && Close[c] < level)) 
                  break;
               if (Open[c] <= level && Close[c] <= level && Open[c-1] >= level && Close[c-1] >= level) 
                  break;
               if (Open[c] >= level && Close[c] >= level && Open[c-1] <= level && Close[c-1] <= level) 
                  break;
               }
            DrawLine ("H", i, c, level, 0, clrBlue, 0, 2);
            if (Show_Validation_Candle) 
               UpBuffer[i-2*dif] = level;
            i += dif;         
            }
         //---
         }
      for(i = 0; i < HistoryBars; i++) 
         {
         if (DnBuffer[i] > 0) 
            {
            level = DnBuffer[i];//-LevelDelta*Point;
            for (c = i; c > 0; c--) 
               {
               if ((Open[c] < level && Close[c] > level) || (Open[c] > level && Close[c] < level)) 
                  break;
               if (Open[c] <= level && Close[c] <= level && Open[c-1] >= level && Close[c-1] >= level) 
                  break;
               if (Open[c] >= level && Close[c] >= level && Open[c-1] <= level && Close[c-1] <= level) 
                  break;
               }
            DrawLine ("L", i, c, level, 0, clrRed, 0, 2);
            if (Show_Validation_Candle) 
               DnBuffer[i-2*dif] = level;
            i += dif;
            }
         }
      }
   return(0);
}
//+------------------------------------------------------------------+
//|                                                        DRAW LINE |
//+------------------------------------------------------------------+
void DrawLine (string dir, int i, int c, double lev, bool back, color col, int width, int style) 
{
   ObjectCreate("MTF_Fractal_"+dir+i,OBJ_TREND,0,0,0,0,0);
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_TIME1,iTime(Symbol(),Period(),i));
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_PRICE1,lev);
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_TIME2,iTime(Symbol(),Period(),c));
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_PRICE2,lev);
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_RAY,0);
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_BACK,back);
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_COLOR,col);
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_WIDTH,width);
   ObjectSet   ("MTF_Fractal_"+dir+i,OBJPROP_STYLE,style);
}
//+------------------------------------------------------------------+
</code>


Вроде просто, а линии рисует не на всех фракталах. Хотя по коду должен рисовать на всех. Причем, падла, не рисует самые «сладкие». Да и вообще рисует не так, как оригинал.

И что вы можете сказать про дополнительные два буфера хранения ближайших фракталов ниже и выше текущей цены? Если это возможно, то можно ли их значения вывести на график типа:
Фрактал ниже — 0.96744
фрактал выше — 1.00435

Тут возникает дилемма. Если индюк бы рисовал линии по каждому фракталу, то цену бы брали по линии. А так по фракталу. Дело в том, что ближайшие фракталы рассматриваются как уровни для пробоя. Остальные — как цель для ТР. Так вот LevelDelta я бы применял, только для фракталов пробоя. Т.е. ближайших сверху-снизу.

С уважением, КАЕ.
Редактирован: 26 ноября 2022, 19:57
avatar

  7  kvashnin007 Автор Сообщений: 598 - Андрей

  • 26 ноября 2022, 19:09
+
0
Уже стало традицией… Опять вежливо послали. Я был более высокого мнения. Да ладно. Перетопчусь.

Без уважения, КАЕ.
avatar

  7  kvashnin007 Автор Сообщений: 598 - Андрей

  • 8 декабря 2022, 21:43

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий