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

Рейтинг 2087



РЕКОМЕНДУЮ



Простой индикатор MIDDLE

Здравствуйте, Андрей.

Прошу написать индикатор, который бы рисовал в текущем дне линию уровня середины предыдущего дня — PREVIOUS DAY MIDDLE, НО на истории тоже должны быть видны уровни.

Если можно, то добавьте возможность указывать цвет и толщину линии и на всякий случай возможность указать кол-во дней, на которых рисовать (хотя это не принципиально, можно на всех днях).

P.S. Пытался найти в интернете, но так и не нашел. Нашел 2 чуть не дотягивающих до цели индикатора: один рисует на истории хай и лоу предыдущего дня в текущем — индикатор ACD_PV (подумал, что может в него добавить можно еще один уровень), второй рисует MIDDLE, но только в текущем дне, а на истории не рисует. Если надо — могу прикрепить оба индикатора.

Во вложении 2 файла-изображения: один ТЗ и второй, как приблизительно должен выглядеть индикатор на графике.
T3 PREVIUOS DAY MIDDLE.png (94 Kb)
mid resultat ind.png (82 Kb)
  • 0
  • Просмотров: 3646
  • 11 января 2018, 12:36
  • vasdco
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
уровни Мюррея
Следующая запись в группе  
Поправить советник
11 января 2018
12 января 2018

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

+
+1
Набросаю сегодня.



avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 11 января 2018, 17:49
+
0
Спасибо. Буду ждать.
avatar

  6  vasdco Автор Сообщений: 116 - Мастер

  • 11 января 2018, 18:07
+
0
Скиньте те что есть индикаторы?
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 11 января 2018, 20:43
+
0
avatar

  6  vasdco Автор Сообщений: 116 - Мастер

  • 11 января 2018, 21:03
комментарий был удален 2018-01-11 21:02:55 vasdco

+
+1
Написал с нуля. Для трех периодов: Н1, М30, М15.
www.opentraders.ru/downloads/1775/



avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 11 января 2018, 21:23
+
0
Супер *good*  Только как можно увеличить историю — кол-во дней? Хочу посмотреть его на более длительной истории — вплоть до года за каждый день? Если занимает много объёма, то можно оставить только Н1 таймфрейм.
Редактирован: 11 января 2018, 22:59
avatar

  6  vasdco Автор Сообщений: 116 - Мастер

  • 11 января 2018, 21:49
+
0
Плюс заметил пару багов, так сказать. Если в коде поменять int count=5; на другое бОльшее число, то на истории начинается смещение из-за неполных праздничных дней (Новый год, Рождество и, возможно, другие будут влиять, постоянно смещая)
Потом — не меняется цвет уровней, постоянно красный, но это не критично, хотя было бы лучше иметь возможность устанавливать самому цвет и толщину (стиль линии).
Редактирован: 11 января 2018, 22:51
avatar

  6  vasdco Автор Сообщений: 116 - Мастер

  • 11 января 2018, 22:03
+
0
В индикаторе ACD_PV хорошо реализовано построение в текущем дне уровней HIGH и LOW предыдущего дня с возможностью устанавливать цвет и толщину линий, НО не хватает только уровня середины и было бы СУПЕР. Посмотрите, пожалуйста, может там можно добавить всего пару строчек кода в ACD_PV?
avatar

  6  vasdco Автор Сообщений: 116 - Мастер

  • 11 января 2018, 22:11
+
+1
Поправил АДС:




//+------------------------------------------------------------------+
//|                                                                  |
//|                 Copyright © 2000-2007, MetaQuotes Software Corp. |
//|                                         http://www.metaquotes.ru |
//+------------------------------------------------------------------+
/**
* ACD_2.mq4
* Pivot Range and Previous High/Low
**/
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Aqua
#property indicator_color2 Aqua
#property indicator_color3 Aqua
#property indicator_color4 White
#property indicator_color5 White
#property indicator_color6 Red
#property indicator_color7 Green
#property indicator_color8 Orchid
//Input Params
extern string PivotRangeStart="00:30";
extern string PivotRangeEnd="00:30";
extern bool DisplayPivotPoint=true;
extern bool DisplayPreviousHighLow=true;
extern bool DisplayMAs=false;
//----
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
double Buffer5[];
double Buffer6[];
double Buffer7[];
double Buffer8[];
double pivots[50];
//----
double pivotRangeHigh;
double pivotRangeLow;
double pivotRangeClose;
double pivotPoint;
double pivotDiff;
double pivotTop=0;
double pivotBottom=0;
double pivot14MA;
double pivot30MA;
double pivot50MA;
//----
int openBar;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0,DRAW_LINE, STYLE_DOT, 1);
   SetIndexBuffer(0,Buffer1);
   SetIndexLabel(0,"Pivot Point");
   SetIndexStyle(1,DRAW_LINE, STYLE_DASH, 1);
   SetIndexBuffer(1,Buffer2);
   SetIndexLabel(1,"Pivot Range Top");
   SetIndexStyle(2,DRAW_LINE, STYLE_DASH, 1);
   SetIndexBuffer(2,Buffer3);
   SetIndexLabel(2,"Pivot Range Bottom");
   SetIndexStyle(3,DRAW_LINE, STYLE_SOLID, 1);
   SetIndexBuffer(3,Buffer4);
   SetIndexLabel(3,"Previous Day High");
   SetIndexStyle(4,DRAW_LINE, STYLE_SOLID, 1);
   SetIndexBuffer(4,Buffer5);
   SetIndexLabel(4,"Previous Day Low");
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,Buffer6);
   SetIndexLabel(5,"14 MA");
   SetIndexStyle(6,DRAW_LINE);
   SetIndexBuffer(6,Buffer7);
   SetIndexLabel(6,"30 MA");
   SetIndexStyle(7,DRAW_LINE);
   SetIndexBuffer(7,Buffer8);
   SetIndexLabel(7,"50 MA");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   string barTime="", lastBarTime="";
   string barDay="", lastBarDay="";
   int closeBar;
//----
   for(int i=Bars; i>=0; i--)
     {
      barTime=TimeToStr(Time[i], TIME_MINUTES);
      lastBarTime=TimeToStr(Time[i+1], TIME_MINUTES);
      barDay=TimeToStr(Time[i],TIME_DATE);
      lastBarDay=TimeToStr(Time[i+1],TIME_DATE);
      //need to handle if pivotrangestart/end is 00:00
      if ((PivotRangeEnd=="00:00" && barTime>=PivotRangeEnd && barDay>lastBarDay) || (barTime>=PivotRangeEnd && lastBarTime<PivotRangeEnd))
        {
         closeBar=i + 1;
//----
         if (openBar>0)
           {
            calculatePivotRangeValues(openBar, closeBar);
           }
        }
      if ((PivotRangeStart=="00:00" && barTime>=PivotRangeStart && barDay>lastBarDay) || (barTime>=PivotRangeStart && lastBarTime<PivotRangeStart))
        {
         openBar=i;
        }
      if (openBar>0)
        {
         drawIndicators(i);
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void calculatePivotRangeValues(int opBar, int closeBar)
  {
   pivotRangeHigh=High[Highest(NULL, 0, MODE_HIGH, (opBar - closeBar + 1), closeBar)];
   pivotRangeLow=Low[Lowest(NULL, 0, MODE_LOW, (opBar - closeBar + 1), closeBar)];
   pivotRangeClose=Close[closeBar];
   pivotPoint=((pivotRangeHigh + pivotRangeLow)/2);
   pivotDiff=MathAbs(((pivotRangeHigh + pivotRangeLow)/2) - pivotPoint);
   pivotTop=pivotPoint + pivotDiff;
   pivotBottom=pivotPoint - pivotDiff;
//----
   if (DisplayMAs) calcPivotMA();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void calcPivotMA()
  {
   //create temp array
   double pivs[50];
   //load new pivot
   ArrayCopy(pivs,pivots,1,0,49);
   pivs[0]=pivotPoint;
   ArrayCopy(pivots, pivs, 0, 0, WHOLE_ARRAY);
   //calcMA
   double pivSum=0;
   int count=ArraySize(pivots);
   if (count>=14)
     {
      for(int p=0; p<count; p++)
        {
         pivSum+=pivots[p];
//----
         if (p==13)
           {
            pivot14MA=pivSum/14;
           }
//----
         if (p==29)
         {pivot30MA=pivSum/30;}
//----
         if (p==49)
         {pivot50MA=pivSum/50;}
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void drawIndicators(int curBar)
  {
   if (DisplayPivotPoint) Buffer1[curBar]=pivotPoint;
//----
   Buffer2[curBar]=pivotTop;
   Buffer3[curBar]=pivotBottom;
//----
   if (DisplayPreviousHighLow)
     {
      Buffer4[curBar]=pivotRangeHigh;
      Buffer5[curBar]=pivotRangeLow;
     }
   if (DisplayMAs)
     {
      Buffer6[curBar]=pivot14MA;
      Buffer7[curBar]=pivot30MA;
      Buffer8[curBar]=pivot50MA;
     }
  }
//+------------------------------------------------------------------+
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 13 января 2018, 11:50
+
0
Это то, что нужно. ОГРОМНОЕ СПАСИБО! *good* *good* *good* 
avatar

  6  vasdco Автор Сообщений: 116 - Мастер

  • 13 января 2018, 17:21
комментарий был удален 2018-01-11 21:48:58 vasdco

+
+1
Чужой код не дорабатываю. То что можно было быстро сделать сделал.
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 12 января 2018, 19:59
+
0
Понятно. Но такой вариант не устраивает. Что ж, будем искать…
avatar

  6  vasdco Автор Сообщений: 116 - Мастер

  • 13 января 2018, 00:29
+
0
Это то, что нужно. ОГРОМНОЕ СПАСИБО! *good* *good* *good* 
avatar

  6  vasdco Автор Сообщений: 116 - Мастер

  • 13 января 2018, 17:23

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